[PATCH] bookmarks: delete divergent bookmarks on merge
David Soria Parra
dsp at php.net
Sat May 12 14:28:11 CDT 2012
# HG changeset patch
# User David Soria Parra <dsp at php.net>
# Date 1336850890 -7200
# Branch stable
# Node ID 9d92898103172d0d21aea81f3fb07cfe6c0f8589
# Parent 2fdd1902ed2d0862afd51f956379b0effac4e884
bookmarks: delete divergent bookmarks on merge
diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py
--- a/mercurial/bookmarks.py
+++ b/mercurial/bookmarks.py
@@ -150,13 +150,20 @@
def update(repo, parents, node):
marks = repo._bookmarks
update = False
- mark = repo._bookmarkcurrent
- if mark and marks[mark] in parents:
- old = repo[marks[mark]]
- new = repo[node]
- if new in old.descendants():
- marks[mark] = new.node()
- update = True
+ cur = repo._bookmarkcurrent
+ if not cur:
+ return False
+
+ toupdate = [b for b in marks if b.split('@', 1)[0] == cur.split('@', 1)[0]]
+ for mark in toupdate:
+ if mark and marks[mark] in parents:
+ old = repo[marks[mark]]
+ new = repo[node]
+ if new in old.descendants() and mark == cur:
+ marks[cur] = new.node()
+ update = True
+ if mark != cur:
+ del marks[mark]
if update:
repo._writebookmarks(marks)
return update
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1199,7 +1199,7 @@
raise
# update bookmarks, dirstate and mergestate
- bookmarks.update(self, p1, ret)
+ bookmarks.update(self, [p1, p2], ret)
for f in changes[0] + changes[1]:
self.dirstate.normal(f)
for f in changes[2]:
diff --git a/tests/test-bookmarks-merge.t b/tests/test-bookmarks-merge.t
new file mode 100644
--- /dev/null
+++ b/tests/test-bookmarks-merge.t
@@ -0,0 +1,31 @@
+# init
+
+ $ hg init
+ $ echo a > a
+ $ hg add a
+ $ hg commit -m'a'
+ $ echo b > b
+ $ hg add b
+ $ hg commit -m'b'
+ $ hg up -C 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo c > c
+ $ hg add c
+ $ hg commit -m'c'
+ created new head
+
+# test merging of diverged bookmarks
+ $ hg bookmark -r 1 "c at diverge"
+ $ hg bookmark -r 1 b
+ $ hg bookmark c
+ $ hg bookmarks
+ b 1:d2ae7f538514
+ * c 2:d36c0562f908
+ c at diverge 1:d2ae7f538514
+ $ hg merge "c at diverge"
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg commit -m'merge'
+ $ hg bookmarks
+ b 1:d2ae7f538514
+ * c 3:b8f96cf4688b
More information about the Mercurial-devel
mailing list