# HG changeset patch # User Martin von Zweigbergk # Date 2017-06-16 23:56:16 # Node ID 3e102a8dd52c1f16f9b9f153e6d7e1fb66bfb35b # Parent b482d80e041bb99fb513370f80f00591f9f79c54 bundle2: record changegroup data in 'op.records' (API) When adding support for bundling and unbundling phases, it will be useful to have the list of added changesets. To do that, we return the list from changegroup.apply(). diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -1492,9 +1492,12 @@ def handlechangegroup(op, inpart): op.repo.requirements.add('treemanifest') op.repo._applyopenerreqs() op.repo._writerequirements() - ret = cg.apply(op.repo, tr, 'bundle2', 'bundle2', - expectedtotal=nbchangesets) - op.records.add('changegroup', {'return': ret}) + ret, addednodes = cg.apply(op.repo, tr, 'bundle2', 'bundle2', + expectedtotal=nbchangesets) + op.records.add('changegroup', { + 'return': ret, + 'addednodes': addednodes, + }) if op.reply is not None: # This is definitely not the final form of this # return. But one need to start somewhere. @@ -1557,8 +1560,11 @@ def handleremotechangegroup(op, inpart): if not isinstance(cg, changegroup.cg1unpacker): raise error.Abort(_('%s: not a bundle version 1.0') % util.hidepassword(raw_url)) - ret = cg.apply(op.repo, tr, 'bundle2', 'bundle2') - op.records.add('changegroup', {'return': ret}) + ret, addednodes = cg.apply(op.repo, tr, 'bundle2', 'bundle2') + op.records.add('changegroup', { + 'return': ret, + 'addednodes': addednodes, + }) if op.reply is not None: # This is definitely not the final form of this # return. But one need to start somewhere. diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -426,9 +426,10 @@ class cg1unpacker(object): repo.ui.flush() # never return 0 here: if deltaheads < 0: - return deltaheads - 1 + ret = deltaheads - 1 else: - return deltaheads + 1 + ret = deltaheads + 1 + return ret, added class cg2unpacker(cg1unpacker): """Unpacker for cg2 streams. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -5218,7 +5218,7 @@ def unbundle(ui, repo, fname1, *fnames, else: txnname = 'unbundle\n%s' % util.hidepassword(url) with repo.transaction(txnname) as tr: - modheads = gen.apply(repo, tr, 'unbundle', url) + modheads, addednodes = gen.apply(repo, tr, 'unbundle', url) return postincoming(ui, repo, modheads, opts.get(r'update'), None, None) diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -1449,7 +1449,8 @@ def _pullchangeset(pullop): "changegroupsubset.")) else: cg = pullop.remote.changegroupsubset(pullop.fetch, pullop.heads, 'pull') - pullop.cgresult = cg.apply(pullop.repo, tr, 'pull', pullop.remote.url()) + pullop.cgresult, addednodes = cg.apply(pullop.repo, tr, 'pull', + pullop.remote.url()) def _pullphase(pullop): # Get remote phases data from remote @@ -1737,7 +1738,7 @@ def unbundle(repo, cg, heads, source, ur # legacy case: bundle1 (changegroup 01) txnname = "\n".join([source, util.hidepassword(url)]) with repo.lock(), repo.transaction(txnname) as tr: - r = cg.apply(repo, tr, source, url) + r, addednodes = cg.apply(repo, tr, source, url) else: r = None try: