diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -6142,8 +6142,20 @@ def unbundle(ui, repo, fname1, *fnames, for fname in fnames: f = hg.openpath(ui, fname) gen = exchange.readbundle(ui, f, fname) - modheads = changegroup.addchangegroup(repo, gen, 'unbundle', - 'bundle:' + fname) + if isinstance(gen, bundle2.unbundle20): + tr = repo.transaction('unbundle') + try: + op = bundle2.processbundle(repo, gen, lambda: tr) + tr.close() + finally: + if tr: + tr.release() + changes = [r.get('result', 0) + for r in op.records['changegroup']] + modheads = changegroup.combineresults(changes) + else: + modheads = changegroup.addchangegroup(repo, gen, 'unbundle', + 'bundle:' + fname) finally: lock.release() diff --git a/tests/test-bundle2-format.t b/tests/test-bundle2-format.t --- a/tests/test-bundle2-format.t +++ b/tests/test-bundle2-format.t @@ -762,13 +762,11 @@ Support for changegroup 9520eea781bcca16c1e15acc0ba14335a0e8e5ba eea13746799a9e0bfd88f29d3c2e9dc9389f524f 02de42196ebee42ef284b6780a87cdc96e8eaab6 - $ hg unbundle2 < ../rev.hg2 + $ hg unbundle ../rev.hg2 adding changesets adding manifests adding file changes added 0 changesets with 0 changes to 3 files - 0 unread bytes - addchangegroup return: 1 with reply