--- a/mercurial/commands.py Fri Jun 28 21:31:34 2019 +0530
+++ b/mercurial/commands.py Sat May 18 15:44:23 2019 +0530
@@ -1584,6 +1584,8 @@
('', 'amend', None, _('amend the parent of the working directory')),
('s', 'secret', None, _('use the secret phase for committing')),
('e', 'edit', None, _('invoke editor on commit messages')),
+ ('', 'force-close-branch', None,
+ _('forcibly close branch from a non-head changeset (ADVANCED)')),
('i', 'interactive', None, _('use interactive mode')),
] + walkopts + commitopts + commitopts2 + subrepoopts,
_('[OPTION]... [FILE]...'),
@@ -1671,7 +1673,7 @@
bheads = repo.branchheads(branch)
extra = {}
- if opts.get('close_branch'):
+ if opts.get('close_branch') or opts.get('force_close_branch'):
extra['close'] = '1'
if repo['.'].closesbranch():
@@ -1679,8 +1681,11 @@
' head'))
elif not bheads:
raise error.Abort(_('branch "%s" has no heads to close') % branch)
- elif branch == repo['.'].branch() and repo['.'].node() not in bheads:
- raise error.Abort(_('can only close branch heads'))
+ elif (branch == repo['.'].branch() and repo['.'].node() not in bheads
+ and not opts.get('force_close_branch')):
+ hint = _('use --force-close-branch to close branch from a non-head'
+ ' changeset')
+ raise error.Abort(_('can only close branch heads'), hint=hint)
elif opts.get('amend'):
if (repo['.'].p1().branch() != branch and
repo['.'].p2().branch() != branch):