mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
4a81b50bc3
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
249 lines
4.6 KiB
Perl
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)
|