sapling/tests/test-fbamend-fold.t
Arun Kulshreshtha 50c7f6c256 fbamend: add automatic restacking to split and fold
Summary: Automatically rebase unstable commits left behind after a split or fold in the middle of a stack. Previously, users had to run `hg restack` to fix their stacks after the fact. This change also fixes the issue identified in t14560234 whereby the old stack (entirely obsolete) stack would be left visible after splitting or folding a head commit due to the inhibit extension not correctly deinhibiting the old stack.

Test Plan: Create a stack of commits and perform `hg split` or `hg fold` on a commit (or set of commits) that have descendants. After the operation these commits should be rebased, preserving the linearity of the stack. See unit tests for specific test cases.

Reviewers: #mercurial, durham

Reviewed By: durham

Subscribers: mjpieters

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

Tasks: 14560234, 15266009

Signature: t1:4432833:1484880689:1e07e421c8871dfef8bd016454aaed5a88a4a7d1
2017-01-20 00:24:45 -08:00

227 lines
4.0 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 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 '.^'
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 '.^'
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 '.^'
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 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 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