summaryrefslogtreecommitdiff
path: root/tests/test-rebase-collapse.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-rebase-collapse.t')
-rw-r--r--tests/test-rebase-collapse.t722
1 files changed, 722 insertions, 0 deletions
diff --git a/tests/test-rebase-collapse.t b/tests/test-rebase-collapse.t
new file mode 100644
index 0000000..a89b8fe
--- /dev/null
+++ b/tests/test-rebase-collapse.t
@@ -0,0 +1,722 @@
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > graphlog=
+ > rebase=
+ > mq=
+ >
+ > [phases]
+ > publish=False
+ >
+ > [alias]
+ > tglog = log -G --template "{rev}: '{desc}' {branches}\n"
+ > tglogp = log -G --template "{rev}:{phase} '{desc}' {branches}\n"
+ > EOF
+
+Create repo a:
+
+ $ hg init a
+ $ cd a
+ $ hg unbundle "$TESTDIR/bundles/rebase.hg"
+ adding changesets
+ adding manifests
+ adding file changes
+ added 8 changesets with 7 changes to 7 files (+2 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ hg up tip
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg tglog
+ @ 7: 'H'
+ |
+ | o 6: 'G'
+ |/|
+ o | 5: 'F'
+ | |
+ | o 4: 'E'
+ |/
+ | o 3: 'D'
+ | |
+ | o 2: 'C'
+ | |
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ cd ..
+
+
+Rebasing B onto H and collapsing changesets with different phases:
+
+
+ $ hg clone -q -u 3 a a1
+ $ cd a1
+
+ $ hg phase --force --secret 3
+
+ $ hg rebase --collapse --keepbranches
+ saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglogp
+ @ 5:secret 'Collapsed revision
+ | * B
+ | * C
+ | * D'
+ o 4:draft 'H'
+ |
+ | o 3:draft 'G'
+ |/|
+ o | 2:draft 'F'
+ | |
+ | o 1:draft 'E'
+ |/
+ o 0:draft 'A'
+
+ $ hg manifest
+ A
+ B
+ C
+ D
+ F
+ H
+
+ $ cd ..
+
+
+Rebasing E onto H:
+
+ $ hg clone -q -u . a a2
+ $ cd a2
+
+ $ hg phase --force --secret 6
+ $ hg rebase --source 4 --collapse
+ saved backup bundle to $TESTTMP/a2/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ @ 6: 'Collapsed revision
+ | * E
+ | * G'
+ o 5: 'H'
+ |
+ o 4: 'F'
+ |
+ | o 3: 'D'
+ | |
+ | o 2: 'C'
+ | |
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ hg manifest
+ A
+ E
+ F
+ H
+
+ $ cd ..
+
+Rebasing G onto H with custom message:
+
+ $ hg clone -q -u . a a3
+ $ cd a3
+
+ $ hg rebase --base 6 -m 'custom message'
+ abort: message can only be specified with collapse
+ [255]
+
+ $ hg rebase --source 4 --collapse -m 'custom message'
+ saved backup bundle to $TESTTMP/a3/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ @ 6: 'custom message'
+ |
+ o 5: 'H'
+ |
+ o 4: 'F'
+ |
+ | o 3: 'D'
+ | |
+ | o 2: 'C'
+ | |
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ hg manifest
+ A
+ E
+ F
+ H
+
+ $ cd ..
+
+Create repo b:
+
+ $ hg init b
+ $ cd b
+
+ $ echo A > A
+ $ hg ci -Am A
+ adding A
+ $ echo B > B
+ $ hg ci -Am B
+ adding B
+
+ $ hg up -q 0
+
+ $ echo C > C
+ $ hg ci -Am C
+ adding C
+ created new head
+
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ echo D > D
+ $ hg ci -Am D
+ adding D
+
+ $ hg up -q 1
+
+ $ echo E > E
+ $ hg ci -Am E
+ adding E
+ created new head
+
+ $ echo F > F
+ $ hg ci -Am F
+ adding F
+
+ $ hg merge
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -m G
+
+ $ hg up -q 0
+
+ $ echo H > H
+ $ hg ci -Am H
+ adding H
+ created new head
+
+ $ hg tglog
+ @ 7: 'H'
+ |
+ | o 6: 'G'
+ | |\
+ | | o 5: 'F'
+ | | |
+ | | o 4: 'E'
+ | | |
+ | o | 3: 'D'
+ | |\|
+ | o | 2: 'C'
+ |/ /
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ cd ..
+
+
+Rebase and collapse - more than one external (fail):
+
+ $ hg clone -q -u . b b1
+ $ cd b1
+
+ $ hg rebase -s 2 --collapse
+ abort: unable to collapse, there is more than one external parent
+ [255]
+
+Rebase and collapse - E onto H:
+
+ $ hg rebase -s 4 --collapse # root (4) is not a merge
+ saved backup bundle to $TESTTMP/b1/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ @ 5: 'Collapsed revision
+ |\ * E
+ | | * F
+ | | * G'
+ | o 4: 'H'
+ | |
+ o | 3: 'D'
+ |\ \
+ | o | 2: 'C'
+ | |/
+ o / 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ hg manifest
+ A
+ C
+ D
+ E
+ F
+ H
+
+ $ cd ..
+
+
+
+
+Test that branchheads cache is updated correctly when doing a strip in which
+the parent of the ancestor node to be stripped does not become a head and
+also, the parent of a node that is a child of the node stripped becomes a head
+(node 3).
+
+ $ hg clone -q -u . b b2
+ $ cd b2
+
+ $ hg heads --template="{rev}:{node} {branch}\n"
+ 7:c65502d4178782309ce0574c5ae6ee9485a9bafa default
+ 6:c772a8b2dc17629cec88a19d09c926c4814b12c7 default
+
+ $ cat $TESTTMP/b2/.hg/cache/branchheads
+ c65502d4178782309ce0574c5ae6ee9485a9bafa 7
+ c772a8b2dc17629cec88a19d09c926c4814b12c7 default
+ c65502d4178782309ce0574c5ae6ee9485a9bafa default
+
+ $ hg strip 4
+ saved backup bundle to $TESTTMP/b2/.hg/strip-backup/8a5212ebc852-backup.hg (glob)
+
+ $ cat $TESTTMP/b2/.hg/cache/branchheads
+ c65502d4178782309ce0574c5ae6ee9485a9bafa 4
+ 2870ad076e541e714f3c2bc32826b5c6a6e5b040 default
+ c65502d4178782309ce0574c5ae6ee9485a9bafa default
+
+ $ hg heads --template="{rev}:{node} {branch}\n"
+ 4:c65502d4178782309ce0574c5ae6ee9485a9bafa default
+ 3:2870ad076e541e714f3c2bc32826b5c6a6e5b040 default
+
+ $ cd ..
+
+
+
+
+
+
+Create repo c:
+
+ $ hg init c
+ $ cd c
+
+ $ echo A > A
+ $ hg ci -Am A
+ adding A
+ $ echo B > B
+ $ hg ci -Am B
+ adding B
+
+ $ hg up -q 0
+
+ $ echo C > C
+ $ hg ci -Am C
+ adding C
+ created new head
+
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ echo D > D
+ $ hg ci -Am D
+ adding D
+
+ $ hg up -q 1
+
+ $ echo E > E
+ $ hg ci -Am E
+ adding E
+ created new head
+ $ echo F > E
+ $ hg ci -m 'F'
+
+ $ echo G > G
+ $ hg ci -Am G
+ adding G
+
+ $ hg merge
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg ci -m H
+
+ $ hg up -q 0
+
+ $ echo I > I
+ $ hg ci -Am I
+ adding I
+ created new head
+
+ $ hg tglog
+ @ 8: 'I'
+ |
+ | o 7: 'H'
+ | |\
+ | | o 6: 'G'
+ | | |
+ | | o 5: 'F'
+ | | |
+ | | o 4: 'E'
+ | | |
+ | o | 3: 'D'
+ | |\|
+ | o | 2: 'C'
+ |/ /
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ cd ..
+
+
+Rebase and collapse - E onto I:
+
+ $ hg clone -q -u . c c1
+ $ cd c1
+
+ $ hg rebase -s 4 --collapse # root (4) is not a merge
+ merging E
+ saved backup bundle to $TESTTMP/c1/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ @ 5: 'Collapsed revision
+ |\ * E
+ | | * F
+ | | * G
+ | | * H'
+ | o 4: 'I'
+ | |
+ o | 3: 'D'
+ |\ \
+ | o | 2: 'C'
+ | |/
+ o / 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ hg manifest
+ A
+ C
+ D
+ E
+ G
+ I
+
+ $ cat E
+ F
+
+ $ cd ..
+
+
+Create repo d:
+
+ $ hg init d
+ $ cd d
+
+ $ echo A > A
+ $ hg ci -Am A
+ adding A
+ $ echo B > B
+ $ hg ci -Am B
+ adding B
+ $ echo C > C
+ $ hg ci -Am C
+ adding C
+
+ $ hg up -q 1
+
+ $ echo D > D
+ $ hg ci -Am D
+ adding D
+ created new head
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg ci -m E
+
+ $ hg up -q 0
+
+ $ echo F > F
+ $ hg ci -Am F
+ adding F
+ created new head
+
+ $ hg tglog
+ @ 5: 'F'
+ |
+ | o 4: 'E'
+ | |\
+ | | o 3: 'D'
+ | | |
+ | o | 2: 'C'
+ | |/
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+ $ cd ..
+
+
+Rebase and collapse - B onto F:
+
+ $ hg clone -q -u . d d1
+ $ cd d1
+
+ $ hg rebase -s 1 --collapse
+ saved backup bundle to $TESTTMP/d1/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ @ 2: 'Collapsed revision
+ | * B
+ | * C
+ | * D
+ | * E'
+ o 1: 'F'
+ |
+ o 0: 'A'
+
+ $ hg manifest
+ A
+ B
+ C
+ D
+ F
+
+Interactions between collapse and keepbranches
+ $ cd ..
+ $ hg init e
+ $ cd e
+ $ echo 'a' > a
+ $ hg ci -Am 'A'
+ adding a
+
+ $ hg branch '1'
+ marked working directory as branch 1
+ (branches are permanent and global, did you want a bookmark?)
+ $ echo 'b' > b
+ $ hg ci -Am 'B'
+ adding b
+
+ $ hg branch '2'
+ marked working directory as branch 2
+ (branches are permanent and global, did you want a bookmark?)
+ $ echo 'c' > c
+ $ hg ci -Am 'C'
+ adding c
+
+ $ hg up -q 0
+ $ echo 'd' > d
+ $ hg ci -Am 'D'
+ adding d
+
+ $ hg tglog
+ @ 3: 'D'
+ |
+ | o 2: 'C' 2
+ | |
+ | o 1: 'B' 1
+ |/
+ o 0: 'A'
+
+ $ hg rebase --keepbranches --collapse -s 1 -d 3
+ abort: cannot collapse multiple named branches
+ [255]
+
+ $ repeatchange() {
+ > hg checkout $1
+ > hg cp d z
+ > echo blah >> z
+ > hg commit -Am "$2" --user "$3"
+ > }
+ $ repeatchange 3 "E" "user1"
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ repeatchange 3 "E" "user2"
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ created new head
+ $ hg tglog
+ @ 5: 'E'
+ |
+ | o 4: 'E'
+ |/
+ o 3: 'D'
+ |
+ | o 2: 'C' 2
+ | |
+ | o 1: 'B' 1
+ |/
+ o 0: 'A'
+
+ $ hg rebase -s 5 -d 4
+ saved backup bundle to $TESTTMP/e/.hg/strip-backup/*-backup.hg (glob)
+ $ hg tglog
+ @ 4: 'E'
+ |
+ o 3: 'D'
+ |
+ | o 2: 'C' 2
+ | |
+ | o 1: 'B' 1
+ |/
+ o 0: 'A'
+
+ $ hg export tip
+ # HG changeset patch
+ # User user1
+ # Date 0 0
+ # Node ID f338eb3c2c7cc5b5915676a2376ba7ac558c5213
+ # Parent 41acb9dca9eb976e84cd21fcb756b4afa5a35c09
+ E
+
+ diff -r 41acb9dca9eb -r f338eb3c2c7c z
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/z Thu Jan 01 00:00:00 1970 +0000
+ @@ -0,0 +1,2 @@
+ +d
+ +blah
+
+ $ cd ..
+
+Rebase, collapse and copies
+
+ $ hg init copies
+ $ cd copies
+ $ hg unbundle "$TESTDIR/bundles/renames.hg"
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 11 changes to 7 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ hg up -q tip
+ $ hg tglog
+ @ 3: 'move2'
+ |
+ o 2: 'move1'
+ |
+ | o 1: 'change'
+ |/
+ o 0: 'add'
+
+ $ hg rebase --collapse -d 1
+ merging a and d to d
+ merging b and e to e
+ merging c and f to f
+ merging e and g to g
+ merging f and c to c
+ saved backup bundle to $TESTTMP/copies/.hg/strip-backup/*-backup.hg (glob)
+ $ hg st
+ $ hg st --copies --change .
+ A d
+ a
+ A g
+ b
+ R b
+ $ cat c
+ c
+ c
+ $ cat d
+ a
+ a
+ $ cat g
+ b
+ b
+ $ hg log -r . --template "{file_copies}\n"
+ d (a)g (b)
+
+Test collapsing a middle revision in-place
+
+ $ hg tglog
+ @ 2: 'Collapsed revision
+ | * move1
+ | * move2'
+ o 1: 'change'
+ |
+ o 0: 'add'
+
+ $ hg rebase --collapse -r 1 -d 0
+ abort: can't remove original changesets with unrebased descendants
+ (use --keep to keep original changesets)
+ [255]
+
+Test collapsing in place
+
+ $ hg rebase --collapse -b . -d 0
+ saved backup bundle to $TESTTMP/copies/.hg/strip-backup/*-backup.hg (glob)
+ $ hg st --change . --copies
+ M a
+ M c
+ A d
+ a
+ A g
+ b
+ R b
+ $ cat a
+ a
+ a
+ $ cat c
+ c
+ c
+ $ cat d
+ a
+ a
+ $ cat g
+ b
+ b
+ $ cd ..
+
+
+Test stripping a revision with another child
+
+ $ hg init f
+ $ cd f
+
+ $ echo A > A
+ $ hg ci -Am A
+ adding A
+ $ echo B > B
+ $ hg ci -Am B
+ adding B
+
+ $ hg up -q 0
+
+ $ echo C > C
+ $ hg ci -Am C
+ adding C
+ created new head
+
+ $ hg tglog
+ @ 2: 'C'
+ |
+ | o 1: 'B'
+ |/
+ o 0: 'A'
+
+
+
+ $ hg heads --template="{rev}:{node} {branch}: {desc}\n"
+ 2:c5cefa58fd557f84b72b87f970135984337acbc5 default: C
+ 1:27547f69f25460a52fff66ad004e58da7ad3fb56 default: B
+
+ $ hg strip 2
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ saved backup bundle to $TESTTMP/f/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ o 1: 'B'
+ |
+ @ 0: 'A'
+
+
+
+ $ hg heads --template="{rev}:{node} {branch}: {desc}\n"
+ 1:27547f69f25460a52fff66ad004e58da7ad3fb56 default: B
+
+ $ cd ..
+
+
+
+