Patchwork commit: amending with --close-branch (issue3445)

login
register
mail settings
Submitter Iulian Stana
Date May 2, 2013, 4:44 p.m.
Message ID <061104a7fe6f814afd53.1367513066@doppler>
Download mbox | patch
Permalink /patch/1531/
State Superseded, archived
Commit b500a663a2c7543e9e8484e58753fefd71b2aa17
Headers show

Comments

Iulian Stana - May 2, 2013, 4:44 p.m.
# HG changeset patch
# User Iulian Stana <julian.stana@gmail.com>
# Date 1367512607 -10800
#      Thu May 02 19:36:47 2013 +0300
# Branch stable
# Node ID 061104a7fe6f814afd53e70d7b85a7f1dbfdea91
# Parent  90f4587801ed6c525d1264d8f5b9285fb5cb71cc
commit: amending with --close-branch (issue3445)

You can't close a branch that hasn't got a head.
newbrach + commit --close = fail
newbranch + commit + commit --amend --close = fail

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -1297,12 +1297,18 @@ 
         # 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:
+                raise util.Abort(_('can only close branch heads'))
 
     if opts.get('amend'):
         if ui.configbool('ui', 'commitsubrepos'):
diff --git a/tests/test-3446.t b/tests/test-3446.t
new file mode 100644
--- /dev/null
+++ b/tests/test-3446.t
@@ -0,0 +1,52 @@ 
+This shouldn't be possible:
+
+  $ hg init a
+  $ cd a
+  $ echo a >> a
+  $ hg ci -Am.
+  adding a
+  $ echo a >> a
+  $ hg branch foo
+  marked working directory as branch foo
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg ci -Am..
+  $ hg ci --amend --close-branch -m 'closing'
+  abort: can only close branch heads
+  [255]
+
+
+This silliness fails:
+
+  $ hg branch newbranch
+  marked working directory as branch newbranch
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo b >> b
+  $ hg ci --close -m'open and close'
+  abort: can only close branch heads
+  [255]
+
+Correct close with commit:
+
+  $ hg branch correctclose
+  marked working directory as branch correctclose
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo b >> b
+  $ hg ci -Am.
+  adding b
+  $ hg ci --close -m'open and close'
+
+Correct close with commit and amend:
+
+  $ hg branch amendclose
+  marked working directory as branch amendclose
+  (branches are permanent and global, did you want a bookmark?)
+  $ echo c >> c
+  $ hg ci -Am.
+  adding c
+  $ echo a >> a
+  $ hg ci -Am.
+  $ hg ci --amend --close -m'open and close'
+  saved backup bundle to $TESTTMP/a/.hg/strip-backup/109ed8058c1e-amend-backup.hg
+
+
+