[PATCH] bookmarks: fix head selection for merge with two bookmarked heads

Mads Kiilerich mads at kiilerich.com
Sun Dec 16 12:53:07 CST 2012


# HG changeset patch
# User Mads Kiilerich <mads at kiilerich.com>
# Date 1355683886 -3600
# Branch stable
# Node ID 1c99377ad04befd82dee47221d185a60dc8bc585
# Parent  7e2b9f6a2cd043966fca50a29a9867fb12387a22
bookmarks: fix head selection for merge with two bookmarked heads

A type error caused the search for the other head to fail. The code is fragile,
and instead it ended up using the 'first' bookmark head, but the ordering is
undefined and it could thus use the wrong bookmarkhead and fail with:

  $ hg up -q -C e at diverged
  $ hg merge
  abort: merging with a working directory ancestor has no effect

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4288,7 +4288,7 @@
 
     if not node and repo._bookmarkcurrent:
         bmheads = repo.bookmarkheads(repo._bookmarkcurrent)
-        curhead = repo[repo._bookmarkcurrent]
+        curhead = repo[repo._bookmarkcurrent].node()
         if len(bmheads) == 2:
             if curhead == bmheads[0]:
                 node = bmheads[1]
diff --git a/tests/test-bookmarks-merge.t b/tests/test-bookmarks-merge.t
--- a/tests/test-bookmarks-merge.t
+++ b/tests/test-bookmarks-merge.t
@@ -75,9 +75,27 @@
   $ echo f > f
   $ hg commit -Am "f"
   adding f
+  $ hg bookmarks -r 4 "e at diverged"
+  $ hg up -q -C "e at diverged"
+  $ hg merge
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ hg parents
+  changeset:   4:a0546fcfe0fb
+  bookmark:    e at diverged
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     d
+  
+  changeset:   5:26bee9c5bcf3
+  bookmark:    e
+  parent:      3:b8f96cf4688b
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     e
+  
   $ hg up -C e
-  1 files updated, 0 files merged, 2 files removed, 0 files unresolved
-  $ hg bookmarks -r 4 "e at diverged"
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg bookmarks
      b                         1:d2ae7f538514
      c                         3:b8f96cf4688b


More information about the Mercurial-devel mailing list