Mercurial > hg-stable
changeset 25501:a99fee62611d
bookmarks: abort the whole push if bookmarks fails to update (BC)
When using bundle2, the bookmark's pushkey parts are now made mandatory. As a
result failure to update the bookmark server side will result in the transaction
being aborted.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 27 May 2015 22:25:33 -0700 |
parents | 00ecc894138d |
children | bd41c19383db |
files | mercurial/exchange.py tests/test-bookmarks-pushpull.t tests/test-hook.t |
diffstat | 3 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/exchange.py Mon Jun 08 16:55:21 2015 -0700 +++ b/mercurial/exchange.py Wed May 27 22:25:33 2015 -0700 @@ -569,8 +569,17 @@ pushop.stepsdone.add('bookmarks') part2book = [] enc = pushkey.encode + + def handlefailure(pushop, exc): + targetid = int(exc.partid) + for partid, book, action in part2book: + if partid == targetid: + raise error.Abort(bookmsgmap[action][1].rstrip() % book) + # we should not be called for part we did not generated + assert False + for book, old, new in pushop.outbookmarks: - part = bundler.newpart('pushkey', mandatory=False) + part = bundler.newpart('pushkey') part.addparam('namespace', enc('bookmarks')) part.addparam('key', enc(book)) part.addparam('old', enc(old)) @@ -581,7 +590,7 @@ elif not new: action = 'delete' part2book.append((part.id, book, action)) - + pushop.pkfailcb[part.id] = handlefailure def handlereply(op): ui = pushop.ui
--- a/tests/test-bookmarks-pushpull.t Mon Jun 08 16:55:21 2015 -0700 +++ b/tests/test-bookmarks-pushpull.t Wed May 27 22:25:33 2015 -0700 @@ -755,8 +755,8 @@ searching for changes no changes found pushkey-abort: prepushkey hook exited with status 1 - exporting bookmark @ failed! - [1] + abort: exporting bookmark @ failed! + [255] $ hg -R ../issue4455-dest/ bookmarks no bookmarks set @@ -768,8 +768,8 @@ searching for changes no changes found remote: pushkey-abort: prepushkey hook exited with status 1 - exporting bookmark @ failed! - [1] + abort: exporting bookmark @ failed! + [255] $ hg -R ../issue4455-dest/ bookmarks no bookmarks set @@ -791,8 +791,8 @@ searching for changes no changes found remote: pushkey-abort: prepushkey hook exited with status 1 - exporting bookmark @ failed! - [1] + abort: exporting bookmark @ failed! + [255] $ hg -R ../issue4455-dest/ bookmarks no bookmarks set
--- a/tests/test-hook.t Mon Jun 08 16:55:21 2015 -0700 +++ b/tests/test-hook.t Wed May 27 22:25:33 2015 -0700 @@ -271,11 +271,8 @@ pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=push (glob) prepushkey.forbid hook: HG_BUNDLE2=1 HG_KEY=baz HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_SOURCE=push HG_TXNID=TXN:* HG_URL=push (glob) pushkey-abort: prepushkey hook exited with status 1 - pretxnclose hook: HG_BUNDLE2=1 HG_SOURCE=push HG_TXNID=TXN:* HG_TXNNAME=push HG_URL=push (glob) - txnclose hook: HG_BUNDLE2=1 HG_SOURCE=push HG_TXNID=TXN:* HG_TXNNAME=push HG_URL=push (glob) - exporting bookmark baz failed! - listkeys hook: HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'} - [1] + abort: exporting bookmark baz failed! + [255] $ cd ../a test that prelistkeys can prevent listing keys