sapling/tests/test-fbamend-fold.t
Arun Kulshreshtha 4a81b50bc3 fbamend: return early on split/fold error
Summary: Although the split and fold commands usually abort on error, in some cases they simply write to stderr and return a nonzero exit status. Previously, the wrappers in fbamend would expect failures to result in an abort, and therefore didn't return early. This resulted in restack errors when this was not the case -- notably in the case of folding a commit with itself. This diff fixes the problem by returning early on error.

Test Plan: Attempting to fold a commit with itself (i.e., `hg fold --exact . .`) fails with an error message instead of crashing.

Reviewers: #mercurial, simonfar

Reviewed By: simonfar

Subscribers: mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D4493029

Tasks: 15704338

Signature: t1:4493029:1485986404:17186b47786cf79c735b33adbb19de79ac75a5be
2017-02-01 15:14:17 -08:00

249 lines
4.6 KiB
Perl

Set up test environment.
$ . $TESTDIR/require-ext.sh directaccess evolve inhibit
$ extpath=`dirname $TESTDIR`
$ cp $extpath/hgext3rd/allowunstable.py $TESTTMP
$ cp $extpath/hgext3rd/fbamend.py $TESTTMP
$ cat >> $HGRCPATH << EOF
> [extensions]
> allowunstable=$TESTTMP/allowunstable.py
> directaccess=
> evolve=
> fbamend=$TESTTMP/fbamend.py
> inhibit=
> rebase=
> [experimental]
> evolution = createmarkers
> evolutioncommands = prev next fold split
> EOF
$ showgraph() {
> hg log --graph -T "{rev} {desc|firstline}" | sed \$d
> }
$ reset() {
> cd ..
> rm -rf repo
> hg init repo
> cd repo
> }
Set up repo.
$ hg init repo && cd repo
$ hg debugbuilddag -m "+5 *4 +2"
$ showgraph
o 7 r7
|
o 6 r6
|
o 5 r5
|
| o 4 r4
| |
| o 3 r3
| |
| o 2 r2
|/
o 1 r1
|
o 0 r0
Test that a fold works correctly on error.
$ hg fold --exact 7 7
single revision specified, nothing to fold
[1]
Test simple case of folding a head. Should work normally.
$ hg up 7
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg fold --from '.^'
2 changesets folded
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ showgraph
@ 8 r6
|
o 5 r5
|
| o 4 r4
| |
| o 3 r3
| |
| o 2 r2
|/
o 1 r1
|
o 0 r0
Test rebasing of stack after fold.
$ hg up 3
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg fold --from '.^'
2 changesets folded
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
rebasing 4:b762560d23fd "r4"
merging mf
$ showgraph
o 10 r4
|
@ 9 r2
|
| o 8 r6
| |
| o 5 r5
|/
o 1 r1
|
o 0 r0
Test rebasing of multiple children
$ hg up 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg fold --from '.^'
2 changesets folded
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
rebasing 5:* "r5" (glob)
merging mf
rebasing 8:* "r6" (glob)
merging mf
rebasing 9:* "r2" (glob)
merging mf
rebasing 10:* "r4" (glob)
merging mf
$ showgraph
o 15 r4
|
o 14 r2
|
| o 13 r6
| |
| o 12 r5
|/
@ 11 r0
Test folding multiple changesets, using default behavior of folding
up to working copy parent. Also tests situation where the branch to
rebase is not on the topmost folded commit.
$ reset
$ hg debugbuilddag -m "+5 *4 +2"
$ showgraph
o 7 r7
|
o 6 r6
|
o 5 r5
|
| o 4 r4
| |
| o 3 r3
| |
| o 2 r2
|/
o 1 r1
|
o 0 r0
$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg fold --from 2
3 changesets folded
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
rebasing 3:a422badec216 "r3"
merging mf
rebasing 4:b762560d23fd "r4"
merging mf
rebasing 5:77d787dfa5b6 "r5"
merging mf
rebasing 6:ec6d8e65acbe "r6"
merging mf
rebasing 7:9c9414e0356c "r7"
merging mf
$ showgraph
o 13 r7
|
o 12 r6
|
o 11 r5
|
| o 10 r4
| |
| o 9 r3
|/
@ 8 r0
Test folding changesets unrelated to working copy parent using --exact.
Also test that using node hashes instead of rev numbers works.
$ reset
$ hg debugbuilddag -m +6
$ showgraph
o 5 r5
|
o 4 r4
|
o 3 r3
|
o 2 r2
|
o 1 r1
|
o 0 r0
$ hg fold --exact 09bb8c f07e66 cb14eb
3 changesets folded
rebasing 4:aa70f0fe546a "r4"
merging mf
rebasing 5:f2987ebe5838 "r5"
merging mf
$ showgraph
o 8 r5
|
o 7 r4
|
o 6 r1
|
o 0 r0
Test --norebase flag.
$ hg fold --norebase --exact 6 7
2 changesets folded
$ showgraph
o 9 r1
|
| o 8 r5
| |
| o 7 r4
| |
| o 6 r1
|/
o 0 r0
Test case in which inhibit fails to inhibit the working copy parent, but
does inhibit its descendants in the old stack. The fold command should
manually inhibit any visible obsolete commits in the old stack.
$ hg up 7
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg fold --from 8
2 changesets folded
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ showgraph
@ 10 r4
|
| o 9 r1
| |
o | 6 r1
|/
o 0 r0
Test that bookmarks are correctly moved.
$ reset
$ hg debugbuilddag +3
$ hg bookmarks -r 1 test1
$ hg bookmarks -r 2 test2_1
$ hg bookmarks -r 2 test2_2
$ hg bookmarks
test1 1:* (glob)
test2_1 2:* (glob)
test2_2 2:* (glob)
$ hg fold --exact 1 2
2 changesets folded
$ hg bookmarks
test1 3:* (glob)
test2_1 3:* (glob)
test2_2 3:* (glob)