bookmarks: resolve divergent bookmarks when fowarding bookmark to descendant stable
authorSean Farley <sean.michael.farley@gmail.com>
Wed, 01 May 2013 15:31:39 -0500
branchstable
changeset 19109 26c51e87e807
parent 19108 cb95716da5fe
child 19110 741d94aa92e4
bookmarks: resolve divergent bookmarks when fowarding bookmark to descendant This patch is a follow-up to 56dd55da2f7d that resolves divergent bookmarks between the to-be-forwarded bookmark MARK and the new descendant. This situation can happen when pulling new changesets, updating to the divergent bookmark, abandoning the previous changesets with strip, and then moving MARK to MARK@N. Test coverage is added.
mercurial/commands.py
tests/test-bookmarks.t
--- a/mercurial/commands.py	Tue Apr 30 09:02:02 2013 +0900
+++ b/mercurial/commands.py	Wed May 01 15:31:39 2013 -0500
@@ -816,6 +816,11 @@
                     return
                 anc = repo.changelog.ancestors([repo[target].rev()])
                 bmctx = repo[marks[mark]]
+                divs = [repo[b].node() for b in marks
+                        if b.split('@', 1)[0] == mark.split('@', 1)[0]]
+                deletefrom = [b for b in divs
+                              if repo[b].rev() in anc or b == target]
+                bookmarks.deletedivergent(repo, deletefrom, mark)
                 if bmctx.rev() in anc:
                     ui.status(_("moving bookmark '%s' forward from %s\n") %
                               (mark, short(bmctx.node())))
--- a/tests/test-bookmarks.t	Tue Apr 30 09:02:02 2013 +0900
+++ b/tests/test-bookmarks.t	Wed May 01 15:31:39 2013 -0500
@@ -590,3 +590,24 @@
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     0
   
+
+test clearing divergent bookmarks of linear ancestors
+
+  $ hg bookmark Z -r 0
+  $ hg bookmark Z@1 -r 1
+  $ hg bookmark Z@2 -r 2
+  $ hg bookmark Z@3 -r 3
+  $ hg book
+     Z                         0:f7b1eb17ad24
+     Z@1                       1:925d80f479bb
+     Z@2                       2:db815d6d32e6
+   * Z@3                       3:9ba5f110a0b3
+     four                      3:9ba5f110a0b3
+     should-end-on-two         2:db815d6d32e6
+  $ hg bookmark Z
+  moving bookmark 'Z' forward from f7b1eb17ad24
+  $ hg book
+   * Z                         3:9ba5f110a0b3
+     Z@1                       1:925d80f479bb
+     four                      3:9ba5f110a0b3
+     should-end-on-two         2:db815d6d32e6