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: