From patchwork Tue Jun 27 14:16:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Bug,5610] New: rebase transaction with pretxncommit hook regression From: mercurial-bugs@mercurial-scm.org X-Patchwork-Id: 21776 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Tue, 27 Jun 2017 14:16:37 +0000 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 .. 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'