# HG changeset patch # User Wojciech Lopata # Date 1374870891 25200 # Node ID 14c91b18d79877641925f6d3d437083e1e0f8c77 # Parent cfdae231ba781a590e2e27b3eeee4dabda884be5 bookmarks: update only proper bookmarks on push -r/-B (issue 3973) Make push -r/-B update only these bookmarks that point to pushed revisions or their ancestors, so we can be sure that commit pointed by bookmark is present in the remote reposiory. Previously push tried to update all shared bookmarks. diff -r cfdae231ba78 -r 14c91b18d798 mercurial/localrepo.py --- a/mercurial/localrepo.py Sun Jul 28 15:02:32 2013 -0500 +++ b/mercurial/localrepo.py Fri Jul 26 13:34:51 2013 -0700 @@ -1951,6 +1951,9 @@ self.ui.debug("checking for updated bookmarks\n") rb = remote.listkeys('bookmarks') + revnums = map(unfi.changelog.rev, revs or []) + ancestors = [ + a for a in unfi.changelog.ancestors(revnums, inclusive=True)] for k in rb.keys(): if k in unfi._bookmarks: nr, nl = rb[k], hex(self._bookmarks[k]) @@ -1958,6 +1961,8 @@ cr = unfi[nr] cl = unfi[nl] if bookmarks.validdest(unfi, cr, cl): + if ancestors and cl.rev() not in ancestors: + continue r = remote.pushkey('bookmarks', k, nr, nl) if r: self.ui.status(_("updating bookmark %s\n") % k) diff -r cfdae231ba78 -r 14c91b18d798 tests/test-bookmarks-pushpull.t --- a/tests/test-bookmarks-pushpull.t Sun Jul 28 15:02:32 2013 -0500 +++ b/tests/test-bookmarks-pushpull.t Fri Jul 26 13:34:51 2013 -0700 @@ -422,7 +422,6 @@ remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files - updating bookmark @ failed! exporting bookmark add-foo $ cd ..