changeset 12734:5dfd1c49dcc5

bundlerepo: unify common code into a new getremotechanges The pattern where we fetch incoming remote changes and return them as a local bundlerepo seems common. It's nicer to have this code unified.
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Thu, 14 Oct 2010 22:41:43 +0200
parents 098dfb2b7596
children 8888e56ac417
files hgext/transplant.py mercurial/bundlerepo.py mercurial/hg.py
diffstat 3 files changed, 43 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/transplant.py	Tue Oct 12 23:33:43 2010 -0500
+++ b/hgext/transplant.py	Thu Oct 14 22:41:43 2010 +0200
@@ -15,8 +15,8 @@
 
 from mercurial.i18n import _
 import os, tempfile
-from mercurial import bundlerepo, changegroup, cmdutil, hg, merge, match
-from mercurial import patch, revlog, util, error, discovery
+from mercurial import bundlerepo, cmdutil, hg, merge, match
+from mercurial import patch, revlog, util, error
 from mercurial import revset, help
 
 class transplantentry(object):
@@ -484,25 +484,6 @@
     and then resume where you left off by calling :hg:`transplant
     --continue/-c`.
     '''
-    def getremotechanges(repo, url):
-        sourcerepo = ui.expandpath(url)
-        source = hg.repository(ui, sourcerepo)
-        tmp = discovery.findcommonincoming(repo, source, force=True)
-        common, incoming, rheads = tmp
-        if not incoming:
-            return (source, None, None)
-
-        bundle = None
-        if not source.local():
-            if source.capable('changegroupsubset'):
-                cg = source.changegroupsubset(incoming, rheads, 'incoming')
-            else:
-                cg = source.changegroup(incoming, 'incoming')
-            bundle = changegroup.writebundle(cg, None, 'HG10UN')
-            source = bundlerepo.bundlerepository(ui, repo.root, bundle)
-
-        return (source, incoming, bundle)
-
     def incwalk(repo, incoming, branches, match=util.always):
         if not branches:
             branches = None
@@ -559,7 +540,10 @@
     bundle = None
     source = opts.get('source')
     if source:
-        (source, incoming, bundle) = getremotechanges(repo, source)
+        sourcerepo = ui.expandpath(source)
+        source = hg.repository(ui, sourcerepo)
+        source, incoming, bundle = bundlerepo.getremotechanges(ui, repo, source,
+                                    force=True)
     else:
         source = repo
 
--- a/mercurial/bundlerepo.py	Tue Oct 12 23:33:43 2010 -0500
+++ b/mercurial/bundlerepo.py	Thu Oct 14 22:41:43 2010 +0200
@@ -14,7 +14,7 @@
 from node import nullid
 from i18n import _
 import os, struct, tempfile, shutil
-import changegroup, util, mdiff
+import changegroup, util, mdiff, discovery
 import localrepo, changelog, manifest, filelog, revlog, error
 
 class bundlerevlog(revlog.revlog):
@@ -288,3 +288,35 @@
     else:
         repopath, bundlename = parentpath, path
     return bundlerepository(ui, repopath, bundlename)
+
+def getremotechanges(ui, repo, other, revs=None, bundlename=None, force=False):
+    tmp = discovery.findcommonincoming(repo, other, heads=revs, force=force)
+    common, incoming, rheads = tmp
+    if not incoming:
+        try:
+            os.unlink(bundlename)
+        except:
+            pass
+        return other, None, None
+
+    bundle = None
+    if bundlename or not other.local():
+        # create a bundle (uncompressed if other repo is not local)
+
+        if revs is None and other.capable('changegroupsubset'):
+            revs = rheads
+
+        if revs is None:
+            cg = other.changegroup(incoming, "incoming")
+        else:
+            cg = other.changegroupsubset(incoming, revs, 'incoming')
+        bundletype = other.local() and "HG10BZ" or "HG10UN"
+        fname = bundle = changegroup.writebundle(cg, bundlename, bundletype)
+        # keep written bundle?
+        if bundlename:
+            bundle = None
+        if not other.local():
+            # use the created uncompressed bundlerepo
+            other = bundlerepository(ui, repo.root, fname)
+    return (other, incoming, bundle)
+
--- a/mercurial/hg.py	Tue Oct 12 23:33:43 2010 -0500
+++ b/mercurial/hg.py	Thu Oct 14 22:41:43 2010 +0200
@@ -11,7 +11,7 @@
 from node import hex, nullid, nullrev, short
 import localrepo, bundlerepo, httprepo, sshrepo, statichttprepo
 import lock, util, extensions, error, encoding, node
-import cmdutil, discovery, url, changegroup
+import cmdutil, discovery, url
 import merge as mergemod
 import verify as verifymod
 import errno, os, shutil
@@ -423,38 +423,12 @@
 
     if revs:
         revs = [other.lookup(rev) for rev in revs]
-    bundlename = opts["bundle"]
-    force = opts["force"]
-    tmp = discovery.findcommonincoming(repo, other, heads=revs, force=force)
-    common, incoming, rheads = tmp
-    if not incoming:
-        try:
-            os.unlink(bundlename)
-        except:
-            pass
+    other, incoming, bundle = bundlerepo.getremotechanges(ui, repo, other, revs,
+                                opts["bundle"], opts["force"])
+    if incoming is None:
         ui.status(_("no changes found\n"))
         return subreporecurse()
 
-    bundle = None
-    if bundlename or not other.local():
-        # create a bundle (uncompressed if other repo is not local)
-
-        if revs is None and other.capable('changegroupsubset'):
-            revs = rheads
-
-        if revs is None:
-            cg = other.changegroup(incoming, "incoming")
-        else:
-            cg = other.changegroupsubset(incoming, revs, 'incoming')
-        bundletype = other.local() and "HG10BZ" or "HG10UN"
-        fname = bundle = changegroup.writebundle(cg, bundlename, bundletype)
-        # keep written bundle?
-        if bundlename:
-            bundle = None
-        if not other.local():
-            # use the created uncompressed bundlerepo
-            other = bundlerepo.bundlerepository(ui, repo.root, fname)
-
     try:
         chlist = other.changelog.nodesbetween(incoming, revs)[0]
         displayer = cmdutil.show_changeset(ui, other, opts, buffered)