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)