diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -104,6 +104,8 @@ class pushoperation(object): self.outobsmarkers = set() # outgoing bookmarks self.outbookmarks = [] + # transaction manager + self.trmanager = None @util.propertycache def futureheads(self): @@ -204,6 +206,10 @@ def push(repo, remote, force=False, revs msg = 'cannot lock source repository: %s\n' % err pushop.ui.debug(msg) try: + if pushop.locallocked: + pushop.trmanager = transactionmanager(repo, + 'push-response', + pushop.remote.url()) pushop.repo.checkpush(pushop) lock = None unbundle = pushop.remote.capable('unbundle') @@ -222,7 +228,11 @@ def push(repo, remote, force=False, revs finally: if lock is not None: lock.release() + if pushop.trmanager: + pushop.trmanager.close() finally: + if pushop.trmanager: + pushop.trmanager.release() if locallock is not None: locallock.release() @@ -693,13 +703,11 @@ def _pushsyncphase(pushop): def _localphasemove(pushop, nodes, phase=phases.public): """move to in the local source repo""" - if pushop.locallocked: - tr = pushop.repo.transaction('push-phase-sync') - try: - phases.advanceboundary(pushop.repo, tr, phase, nodes) - tr.close() - finally: - tr.release() + if pushop.trmanager: + phases.advanceboundary(pushop.repo, + pushop.trmanager.transaction(), + phase, + nodes) else: # repo is not locked, do not change any phases! # Informs the user that phases should have been moved when diff --git a/tests/test-bundle2-exchange.t b/tests/test-bundle2-exchange.t --- a/tests/test-bundle2-exchange.t +++ b/tests/test-bundle2-exchange.t @@ -176,6 +176,9 @@ push remote: added 1 changesets with 0 changes to 0 files (-1 heads) remote: 1 new obsolescence markers updating bookmark book_eea1 + pre-close-tip:02de42196ebe draft book_02de + postclose-tip:02de42196ebe draft book_02de + b2x-transactionclose hook: HG_SOURCE=push-response HG_URL=file:$TESTTMP/other $ hg -R other log -G o 3:eea13746799a public Nicolas Dumazet book_eea1 G |\ @@ -254,6 +257,9 @@ push over ssh remote: postclose-tip:5fddd98957c8 draft book_5fdd remote: b2x-transactionclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1 HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 remote: changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 + pre-close-tip:02de42196ebe draft book_02de + postclose-tip:02de42196ebe draft book_02de + b2x-transactionclose hook: HG_SOURCE=push-response HG_URL=ssh://user@dummy/other $ hg -R other log -G o 6:5fddd98957c8 draft Nicolas Dumazet book_5fdd C | @@ -292,6 +298,9 @@ push over http remote: added 1 changesets with 1 changes to 1 files remote: 1 new obsolescence markers updating bookmark book_32af + pre-close-tip:02de42196ebe draft book_02de + postclose-tip:02de42196ebe draft book_02de + b2x-transactionclose hook: HG_SOURCE=push-response HG_URL=http://localhost:$HGPORT2/ $ cat other-error.log Check final content.