destutil: show message about other branch heads, even if on a closed head

Before this patch, bare "hg update" displays message below, if there
is at least one non-closed branch head other than current parent:

   1. 'XX other heads for branch "BRANCH"' message, if current parent is
      on a non-closed branch head

      This suggests user to invoke "hg heads" or so for merging them.

   2. no message, if current parent is on a closed branch head

      At this patch, bare "hg update" might choose closed branch head
      as update destination, and it causes this situation easily.

   3. no message, otherwise (= current parent isn't on any branch head)

'XX other heads for branch "BRANCH"' should be displayed also in #2
case above, because user might overlook other non-closed branch heads.

This patch gets a list of all branch heads regardless of closed-ness
of it, and uses it (= 'allheads') to distinguish #1/#2 from #3 above.
This commit is contained in:
FUJIWARA Katsunori 2016-02-24 23:00:33 +09:00
parent 4bd619a29e
commit c83f9e65b1
2 changed files with 38 additions and 2 deletions

View File

@ -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') %

View File

@ -175,6 +175,41 @@ Cases are run as shown in that table, row by row.
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
---------------------------------------------------------------------