comparison mercurial/bundle2.py @ 44372:8407031f195f

bookmarks: prevent pushes of divergent bookmarks (foo@remote) Before this change, such bookmarks are write-only: a client can push them but not pull/read them. And because these bookmark can't be read, even pushes are limited (for instance trying to delete such a bookmark fails with a vanilla client because the client thinks the bookmark is neither on the local nor the remote). This change makes the server refuses such bookmarks, and for earlier errors, makes the client refuse to send them. I think the change of behavior is acceptable because I think this is a bug in push/pull, and I don't think we change the behavior of `hg unbundle`, because it doesn't seem that `hg bundle` ever store bookmarks (and even if it did, it would seem weird anyway to try to send divergent bookmarks). Differential Revision: https://phab.mercurial-scm.org/D8117
author Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
date Thu, 13 Feb 2020 22:51:17 -0500
parents 74172a234dd3
children a03c177a4679
comparison
equal deleted inserted replaced
44371:0275000564c4 44372:8407031f195f
2366 for hookargs in allhooks: 2366 for hookargs in allhooks:
2367 op.repo.hook( 2367 op.repo.hook(
2368 b'prepushkey', throw=True, **pycompat.strkwargs(hookargs) 2368 b'prepushkey', throw=True, **pycompat.strkwargs(hookargs)
2369 ) 2369 )
2370 2370
2371 for book, node in changes:
2372 if bookmarks.isdivergent(book):
2373 msg = _(b'cannot accept divergent bookmark %s!') % book
2374 raise error.Abort(msg)
2375
2371 bookstore.applychanges(op.repo, op.gettransaction(), changes) 2376 bookstore.applychanges(op.repo, op.gettransaction(), changes)
2372 2377
2373 if pushkeycompat: 2378 if pushkeycompat:
2374 2379
2375 def runhook(unused_success): 2380 def runhook(unused_success):