comparison mercurial/exchange.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 877805928f85
children 9d2b2df2c2ba
comparison
equal deleted inserted replaced
44371:0275000564c4 44372:8407031f195f
854 pushop.outbookmarks.append((b, dcid, scid)) 854 pushop.outbookmarks.append((b, dcid, scid))
855 # search added bookmark 855 # search added bookmark
856 for b, scid, dcid in addsrc: 856 for b, scid, dcid in addsrc:
857 if b in explicit: 857 if b in explicit:
858 explicit.remove(b) 858 explicit.remove(b)
859 pushop.outbookmarks.append((b, b'', scid)) 859 if bookmod.isdivergent(b):
860 pushop.ui.warn(_(b'cannot push divergent bookmark %s!\n') % b)
861 pushop.bkresult = 2
862 else:
863 pushop.outbookmarks.append((b, b'', scid))
860 # search for overwritten bookmark 864 # search for overwritten bookmark
861 for b, scid, dcid in list(advdst) + list(diverge) + list(differ): 865 for b, scid, dcid in list(advdst) + list(diverge) + list(differ):
862 if b in explicit: 866 if b in explicit:
863 explicit.remove(b) 867 explicit.remove(b)
864 pushop.outbookmarks.append((b, dcid, scid)) 868 pushop.outbookmarks.append((b, dcid, scid))