From patchwork Tue May 14 21:18:04 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v4] commit: amending with --close-branch (issue3445) From: Iulian Stana X-Patchwork-Id: 1641 Message-Id: To: mercurial-devel@selenic.com Date: Wed, 15 May 2013 00:18:04 +0300 # HG changeset patch # User Iulian Stana # Date 1367512607 -10800 # Thu May 02 19:36:47 2013 +0300 # Branch stable # Node ID f9db59f38518cf077cbc119ac3acfbddc94dbceb # Parent 90f4587801ed6c525d1264d8f5b9285fb5cb71cc commit: amending with --close-branch (issue3445) You can't close a branch that hasn't got a head. newbranch + commit --close-branch must fail newbranch + commit + commit --amend --close-branch must fail You must not be allowed to close a branch that is not defined. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1297,12 +1297,19 @@ # Let --subrepos on the command line override config setting. ui.setconfig('ui', 'commitsubrepos', True) + branch = repo[None].branch() + bheads = repo.branchheads(branch) + extra = {} if opts.get('close_branch'): extra['close'] = 1 - branch = repo[None].branch() - bheads = repo.branchheads(branch) + if not bheads: + raise util.Abort(_('can only close branch heads')) + elif opts.get('amend'): + if repo.parents()[0].p1().branch() != branch and \ + repo.parents()[0].p2().branch() != branch: + raise util.Abort(_('can only close branch heads')) if opts.get('amend'): if ui.configbool('ui', 'commitsubrepos'): diff --git a/tests/test-commit-amend.t b/tests/test-commit-amend.t --- a/tests/test-commit-amend.t +++ b/tests/test-commit-amend.t @@ -304,6 +304,8 @@ $ hg branches default 2:ce12b0b57d46 + + Refuse to amend during a merge: $ hg up -q default @@ -743,3 +745,32 @@ -aa -aa + + +Issue 3445: amending with --close-branch a commit that created a new head should fail +This shouldn't be possible: + + $ hg up -q default + $ hg branch closewithamend + marked working directory as branch closewithamend + (branches are permanent and global, did you want a bookmark?) + $ hg ci -Am.. + adding cc.orig + adding obs.py + adding obs.pyc + $ hg ci --amend --close-branch -m 'closing' + abort: can only close branch heads + [255] + +This silliness fails: + + $ hg branch silliness + marked working directory as branch silliness + (branches are permanent and global, did you want a bookmark?) + $ echo b >> b + $ hg ci --close-branch -m'open and close' + abort: can only close branch heads + [255] + + +