Mercurial > hg
view tests/test-rebase-abort.t @ 19925:9c78ed396075
rebase: preserve working directory parent (BC)
Prior to this changeset, rebase always left the working directory as a parent of
the last rebased changeset. The is dubious when, before the rebase, the working
directory was not a parent of the tip most rebased changeset.
With this changeset, we move the working directory back to its original parent.
If the original parent was rebased, we use it's successors.
This is a step toward solving issue3813 (rebase loses active bookmark if it's
not on a head)
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Mon, 14 Oct 2013 16:12:29 +0200 |
parents | e7fa36d2ad3a |
children | 7d5e7799a29f |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [extensions] > graphlog= > rebase= > > [phases] > publish=False > > [alias] > tglog = log -G --template "{rev}:{phase} '{desc}' {branches}\n" > EOF $ hg init a $ cd a $ echo c1 > common $ hg add common $ hg ci -m C1 $ echo c2 >> common $ hg ci -m C2 $ echo c3 >> common $ hg ci -m C3 $ hg up -q -C 1 $ echo l1 >> extra $ hg add extra $ hg ci -m L1 created new head $ sed -e 's/c2/l2/' common > common.new $ mv common.new common $ hg ci -m L2 $ hg phase --force --secret 2 $ hg tglog @ 4:draft 'L2' | o 3:draft 'L1' | | o 2:secret 'C3' |/ o 1:draft 'C2' | o 0:draft 'C1' Conflicting rebase: $ hg rebase -s 3 -d 2 merging common warning: conflicts during merge. merging common incomplete! (edit conflicts, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] Abort: $ hg rebase --abort saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob) rebase aborted $ hg tglog @ 4:draft 'L2' | o 3:draft 'L1' | | o 2:secret 'C3' |/ o 1:draft 'C2' | o 0:draft 'C1' Test safety for inconsistent rebase state, which may be created (and forgotten) by Mercurial earlier than 2.7. This emulates Mercurial earlier than 2.7 by renaming ".hg/rebasestate" temporarily. $ hg rebase -s 3 -d 2 merging common warning: conflicts during merge. merging common incomplete! (edit conflicts, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] $ mv .hg/rebasestate .hg/rebasestate.back $ hg update --quiet --clean 2 $ hg --config extensions.mq= strip --quiet "destination()" $ mv .hg/rebasestate.back .hg/rebasestate $ hg rebase --continue abort: cannot continue inconsistent rebase (use "hg rebase --abort" to clear borken state) [255] $ hg summary | grep '^rebase: ' rebase: (use "hg rebase --abort" to clear broken state) $ hg rebase --abort rebase aborted (no revision is removed, only broken state is cleared) $ cd .. Construct new repo: $ hg init b $ cd b $ 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 0 $ echo b > b $ hg ci -Am 'B bis' adding b created new head $ echo c1 > c $ hg ci -Am C1 adding c $ hg phase --force --secret 1 $ hg phase --public 1 Rebase and abort without generating new changesets: $ hg tglog @ 4:draft 'C1' | o 3:draft 'B bis' | | o 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ hg rebase -b 4 -d 2 merging c warning: conflicts during merge. merging c incomplete! (edit conflicts, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] $ hg tglog @ 4:draft 'C1' | o 3:draft 'B bis' | | @ 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ hg rebase -a rebase aborted $ hg tglog @ 4:draft 'C1' | o 3:draft 'B bis' | | o 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ cd ..