diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1675,6 +1675,8 @@ if not bheads: raise error.Abort(_('can only close branch heads')) + elif branch == repo['.'].branch() and repo['.'].node() not in bheads: + raise error.Abort(_('can only close branch heads')) elif opts.get('amend'): if (repo['.'].p1().branch() != branch and repo['.'].p2().branch() != branch): diff --git a/tests/test-branches.t b/tests/test-branches.t --- a/tests/test-branches.t +++ b/tests/test-branches.t @@ -956,19 +956,16 @@ trying to close branch from a cset which is not a branch head it should abort: -XXX: it should have aborted here $ hg ci -m "closing branch" --close-branch - created new head + abort: can only close branch heads + [255] $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg log -GT "{rev}: {node|short} {desc|firstline}\n\t{branch}\n\n" - _ 3: 006876ddd20e closing branch + o 2: 155349b645be added c | default | - | o 2: 155349b645be added c - |/ default - | o 1: 5f6d8a4bf34a added b | default |