changeset 48892:3d3d7fc6035a stable

commit: allow to close branch when committing change over a closed head Otherwise, an explicit other commit become necessary, which seems both silly and verbose. This is useful when merging closed heads on the same branches, for example when merging multiple repositories together.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 14 Jun 2022 04:04:08 +0200
parents 2f326ea19fbc
children 6cd249556e20
files mercurial/commands.py tests/test-branches.t
diffstat 2 files changed, 24 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Thu May 12 13:53:50 2022 +0400
+++ b/mercurial/commands.py	Tue Jun 14 04:04:08 2022 +0200
@@ -2087,10 +2087,17 @@
         extra[b'close'] = b'1'
 
         if repo[b'.'].closesbranch():
-            raise error.InputError(
-                _(b'current revision is already a branch closing head')
-            )
-        elif not bheads:
+            # Not ideal, but let us do an extra status early to prevent early
+            # bail out.
+            matcher = scmutil.match(repo[None], pats, opts)
+            s = repo.status(match=matcher)
+            if s.modified or s.added or s.removed:
+                bheads = repo.branchheads(branch, closed=True)
+            else:
+                msg = _(b'current revision is already a branch closing head')
+                raise error.InputError(msg)
+
+        if not bheads:
             raise error.InputError(
                 _(b'branch "%s" has no heads to close') % branch
             )
--- a/tests/test-branches.t	Thu May 12 13:53:50 2022 +0400
+++ b/tests/test-branches.t	Tue Jun 14 04:04:08 2022 +0200
@@ -283,6 +283,19 @@
   abort: current revision is already a branch closing head
   [10]
 
+  $ echo foo > b
+  $ hg commit -d '9 0' --close-branch -m 're-closing this branch'
+
+  $ echo bar > b
+  $ hg commit -d '9 0' --close-branch -m 're-closing this branch' bh1
+  abort: current revision is already a branch closing head
+  [10]
+  $ hg commit -d '9 0' --close-branch -m 're-closing this branch' b
+
+  $ hg debugstrip --rev 13: --no-backup
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg revert --all --no-backup
+
   $ hg log -r tip --debug
   changeset:   12:e3d49c0575d8fc2cb1cd6859c747c14f5f6d499f
   branch:      b