# HG changeset patch # User Matt Mackall # Date 2011-12-06 20:17:33 # Node ID 2fad18f1540916bfa7be46b7122b3d19e04a09e7 # Parent 6f2eee68f6a5c98cd09f902eea83cc60691afac3 bookmarks: shadow divergent bookmarks of foo with foo@n diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -155,7 +155,9 @@ def listbookmarks(repo): d = {} for k, v in marks.iteritems(): - d[k] = hex(v) + # don't expose local divergent bookmarks + if '@' not in k and not k.endswith('@'): + d[k] = hex(v) return d def pushbookmark(repo, key, old, new): @@ -192,8 +194,14 @@ def updatefromremote(ui, repo, remote): changed = True ui.status(_("updating bookmark %s\n") % k) else: - ui.warn(_("not updating divergent" - " bookmark %s\n") % k) + for x in range(1, 100): + n = '%s@%d' % (k, x) + if n not in repo._bookmarks: + break + repo._bookmarks[n] = cr.node() + changed = True + ui.warn(_("divergent bookmark %s stored as %s\n") % (k, n)) + if changed: write(repo) diff --git a/tests/test-bookmarks-pushpull.t b/tests/test-bookmarks-pushpull.t --- a/tests/test-bookmarks-pushpull.t +++ b/tests/test-bookmarks-pushpull.t @@ -117,10 +117,11 @@ divergent bookmarks adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - not updating divergent bookmark X + divergent bookmark X stored as X@1 (run 'hg heads' to see heads, 'hg merge' to merge) $ hg book * X 1:9b140be10808 + X@1 2:0d2164f0ce0d Y 0:4e3505fd9583 foo -1:000000000000 foobar -1:000000000000 @@ -175,7 +176,7 @@ hgweb $ hg pull -B Z http://localhost:$HGPORT/ pulling from http://localhost:$HGPORT/ no changes found - not updating divergent bookmark X + divergent bookmark X stored as X@1 importing bookmark Z $ hg clone http://localhost:$HGPORT/ cloned-bookmarks requesting all changes