All pastes #1962564 Raw Edit

nicdumz

public text v1 · immutable
#1962564 ·published 2010-10-14 22:48 UTC
rendered paste body
# HG changeset patch# User Nicolas Dumazet <nicdumz.commits@gmail.com># Date 1287088903 -7200# Node ID 5a7f64d702734953d0a7898667eecb8a0ddbf780# Parent  4bca87c29445a6fb67aebe7eaed3f89c171cae41bundlerepo: unify common code into a new getremotechangesThe pattern where we fetch incoming remote changes and returnthem as a local bundlerepo seems common. It's nicer to have thiscode unified.diff --git a/hgext/transplant.py b/hgext/transplant.py--- a/hgext/transplant.py+++ b/hgext/transplant.py@@ -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 diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py--- a/mercurial/bundlerepo.py+++ b/mercurial/bundlerepo.py@@ -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)+diff --git a/mercurial/hg.py b/mercurial/hg.py--- a/mercurial/hg.py+++ b/mercurial/hg.py@@ -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)