[PATCH 5 of 6 RFC] destutil: show number of other branch heads, even if on a closed head

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Wed Feb 24 09:17:13 EST 2016


# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1456322433 -32400
#      Wed Feb 24 23:00:33 2016 +0900
# Node ID 1f9b3d38e380b018cbe10ed1acee882c014e3763
# Parent  54683cfda6e09c5502ad133d5a023929531a6b8b
destutil: show number of other branch heads, even if on a closed head

Before this patch, bare "hg update" doesn't show number of other
non-closed branch heads, if working parent is on a closed branch head
at the end of updating. This might mislead user into overlooking other
non-closed branch heads.

This patch gets a list of all branch heads regardless of closed-ness
of it, and uses it to examine whether working parent is on a branch
heads or not.

diff --git a/mercurial/destutil.py b/mercurial/destutil.py
--- a/mercurial/destutil.py
+++ b/mercurial/destutil.py
@@ -358,9 +358,10 @@ def _statusotherbook(ui, repo):
 
 def _statusotherbranchheads(ui, repo):
     currentbranch = repo.dirstate.branch()
+    allheads = repo.branchheads(currentbranch, closed=True)
     heads = repo.branchheads(currentbranch)
-    if repo.revs('%ln and parents()', heads):
-        # we are on a head
+    if repo.revs('%ln and parents()', allheads):
+        # we are on a head, even though it might be closed
         otherheads = repo.revs('%ln - parents()', heads)
         if otherheads:
             ui.status(_('%i other heads for branch "%s"\n') %
diff --git a/tests/test-update-branches.t b/tests/test-update-branches.t
--- a/tests/test-update-branches.t
+++ b/tests/test-update-branches.t
@@ -175,6 +175,41 @@ Cases are run as shown in that table, ro
   parent=1
   M foo
 
+  $ cd ..
+
+Test updating with closed head
+---------------------------------------------------------------------
+
+  $ hg clone -U -q b1 closed-heads
+  $ cd closed-heads
+
+Test updating if at least one non-closed branch head exists
+
+if on the closed branch head:
+- updating is no-op
+- "N other heads for ...." message is displayed
+
+  $ hg update -q -C 3
+  $ hg commit --close-branch -m 6
+  $ norevtest "on closed branch head" clean 6
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  1 other heads for branch "default"
+  parent=6
+
+Test updating if all branch heads are closed
+
+if on the closed branch head:
+- updating is no-op
+- "N other heads for ...." message isn't displayed
+
+  $ hg update -q -C 2
+  $ hg commit --close-branch -m 7
+  $ norevtest "all heads of branch default are closed" clean 6
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  parent=6
+
+  $ cd ../b1
+
 Test obsolescence behavior
 ---------------------------------------------------------------------
 


More information about the Mercurial-devel mailing list