Patchwork [Bug,5610] New: rebase transaction with pretxncommit hook regression

login
register
mail settings
Submitter mercurial-bugs@mercurial-scm.org
Date June 27, 2017, 2:16 p.m.
Message ID <bug-5610-285@https.bz.mercurial-scm.org/>
Download mbox | patch
Permalink /patch/21776/
State Not Applicable
Headers show

Comments

mercurial-bugs@mercurial-scm.org - June 27, 2017, 2:16 p.m.
https://bz.mercurial-scm.org/show_bug.cgi?id=5610

            Bug ID: 5610
           Summary: rebase transaction with pretxncommit hook regression
           Product: Mercurial
           Version: 4.2.1
          Hardware: All
                OS: All
            Status: UNCONFIRMED
          Severity: bug
          Priority: wish
         Component: Mercurial
          Assignee: bugzilla@mercurial-scm.org
          Reporter: henriks+hg@unity3d.com
                CC: mercurial-devel@mercurial-scm.org

Around cf8ad0e6c0e4, rebase was placed in a single transaction, but it no
longer takes failures from e.g. pretxncommit into consideration, essentially
breaking `hg rebase --continue` support in this case, unless the hook raises
InterventionRequired. Either we should willingly break backcompat with hooks
and document that, or relax the exception types caught (I'd be strongly
inclined to prefer the latter).

Here's a patch to illustrate the behavior:

+  
   $ cd ..

Patch

diff --git a/tests/test-rebase-interruptions.t
b/tests/test-rebase-interruptions.t
--- a/tests/test-rebase-interruptions.t
+++ b/tests/test-rebase-interruptions.t
@@ -271,4 +271,56 @@  Abort the rebasing:
   |/
   o  0:public 'A'

+
+Test rebase interrupted by hooks (pretxncommit)
+
+  $ hg up 2
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo F > F
+  $ hg add F
+  $ hg ci -m F
+  $ hg rebase --source 2 --dest 5 --tool internal:other --config
'hooks.pretxncommit=hg log -r $HG_NODE | grep "summary:     C"'
+  rebasing 2:965c486023db "C"
+  summary:     C
+  rebasing 6:a0b2430ebfb8 "F" (tip)
+  transaction abort!
+  rollback completed
+  abort: pretxncommit hook exited with status 1
+  [255]
+  $ hg tglogp
+  @  7:secret 'C'
+  |
+  | @  6:secret 'F'
+  | |
+  o |  5:public 'B'
+  | |
+  o |  4:public 'E'
+  | |
+  o |  3:public 'D'
+  | |
+  | o  2:secret 'C'
+  | |
+  | o  1:public 'B'
+  |/
+  o  0:public 'A'
+  
+  $ hg rebase --continue
+  already rebased 2:965c486023db "C" as 401ccec5e39f
+  rebasing 6:a0b2430ebfb8 "F"
+  saved backup bundle to
$TESTTMP/a3/.hg/strip-backup/965c486023db-aa6250e7-backup.hg (glob)
+  $ hg tglogp
+  @  6:secret 'F'
+  |
+  o  5:secret 'C'
+  |
+  o  4:public 'B'
+  |
+  o  3:public 'E'
+  |
+  o  2:public 'D'
+  |
+  | o  1:public 'B'
+  |/
+  o  0:public 'A'