# HG changeset patch # User Siddharth Agarwal # Date 1413269773 25200 # Node ID 3a4d7482318747dd07afca4a7cc8f059b0866629 # Parent 2179747e7feaa6fa310ef2d7204b5ad6ac8c0267 pull: wrap exchange.pull if localrepository.pull isn't available Mercurial rev 73b5b8312ce6 removed localrepository.pull. We don't do it the other way round (wrap pull if exchange.pull is available) because that's been available with a different signature since Mercurial 3.0. diff --git a/hgsubversion/__init__.py b/hgsubversion/__init__.py --- a/hgsubversion/__init__.py +++ b/hgsubversion/__init__.py @@ -146,6 +146,9 @@ def extsetup(ui): if not hgutil.safehasattr(localrepo.localrepository, 'push'): # Mercurial >= 3.2 extensions.wrapfunction(exchange, 'push', wrappers.exchangepush) + if not hgutil.safehasattr(localrepo.localrepository, 'pull'): + # Mercurial >= 3.2 + extensions.wrapfunction(exchange, 'pull', wrappers.exchangepull) helpdir = os.path.join(os.path.dirname(__file__), 'help') diff --git a/hgsubversion/svnrepo.py b/hgsubversion/svnrepo.py --- a/hgsubversion/svnrepo.py +++ b/hgsubversion/svnrepo.py @@ -103,9 +103,11 @@ def generate_repo_class(ui, repo): def push(self, remote, force=False, revs=None, newbranch=None): return wrappers.push(self, remote, force, revs) - @remotesvn - def pull(self, remote, heads=[], force=False): - return wrappers.pull(self, remote, heads, force) + if hgutil.safehasattr(localrepo.localrepository, 'pull'): + # Mercurial < 3.2 + @remotesvn + def pull(self, remote, heads=[], force=False): + return wrappers.pull(self, remote, heads, force) @remotesvn def findoutgoing(self, remote, base=None, heads=None, force=False): diff --git a/hgsubversion/wrappers.py b/hgsubversion/wrappers.py --- a/hgsubversion/wrappers.py +++ b/hgsubversion/wrappers.py @@ -518,6 +518,19 @@ def pull(repo, source, heads=[], force=F else: ui.status("pulled %d revisions\n" % revisions) +def exchangepull(orig, repo, remote, heads=None, force=False, bookmarks=()): + capable = getattr(remote, 'capable', lambda x: False) + if capable('subversion'): + pullop = exchange.pulloperation(repo, remote, heads, force, + bookmarks=bookmarks) + try: + pullop.cgresult = pull(repo, remote, heads, force) + return pullop + finally: + pullop.releasetransaction() + else: + return orig(repo, remote, heads, force, bookmarks=bookmarks) + def rebase(orig, ui, repo, **opts): """rebase current unpushed revisions onto the Subversion head