diff mercurial/commands.py @ 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 6cfa30681a1d
children 288de6f5d724
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
             )