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.
--- 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