Mercurial > evolve
view tests/test-fixup.t @ 6889:a66cf9008781
obslog: also display patch for rebased changesets
This applies the same logic that is used for "merge-diff" to rebased
changesets. The successors' content is compared to the content of the
predecessors rebased in-memory on the new parents.
This highlights the changes that were actually introduced while rebasing (like
conflict resolution or API adjustment).
As a side effect, obslog now also outputs slightly more diffs for splits,
showing what parts of the original big changeset were moved to the smaller
split components (but for now it only works for the first few changesets).
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 22 Sep 2024 02:58:54 +0200 |
parents | d0f0a7b68d2d |
children | 1328195f76a9 237f99ee3d64 |
line wrap: on
line source
========================== Testing `hg fixup` command ========================== $ . $TESTDIR/testlib/common.sh $ cat >> $HGRCPATH <<EOF > [extensions] > rebase = > evolve = > [diff] > git = 1 > EOF $ hg help fixup hg fixup [OPTION]... [-r] REV aliases: fix-up add working directory changes to an arbitrary revision A new changeset will be created, superseding the one specified. The new changeset will combine working directory changes with the changes in the target revision. This operation requires the working directory changes to be relocated onto the target revision, which might result in merge conflicts. If fixup is interrupted to manually resolve a conflict, it can be continued with --continue/-c, or aborted with --abort. Note that this command is fairly new and its behavior is still experimental. For example, the working copy will be left on a temporary, obsolete commit containing the fixed-up changes after the operation. This might change in the future. Returns 0 on success, 1 if nothing changed. options: -r --rev REV revision to amend -c --continue continue an interrupted fixup --abort abort an interrupted fixup (some details hidden, use --verbose to show complete help) Simple cases ------------ $ hg init simple $ cd simple $ mkcommit foo $ mkcommit bar $ mkcommit baz amending the middle of the stack -------------------------------- $ hg bookmark bm $ echo 'hookah bar' > bar $ hg fixup -r 'desc(bar)' (leaving bookmark bm) 1 new orphan changesets $ hg diff -c tip diff --git a/bar b/bar new file mode 100644 --- /dev/null +++ b/bar @@ -0,0 +1,1 @@ +hookah bar $ hg glog o 5:2eec5320cfc7 bar | (bm) draft | @ 3:fd2f632e47ab temporary fixup commit | | () draft | * 2:a425495a8e64 baz | | () draft orphan | x 1:c0c7cf58edc5 bar |/ () draft o 0:e63c23eaa88a foo () draft $ hg glog --hidden o 5:2eec5320cfc7 bar | (bm) draft | x 4:4869c1db2884 temporary fixup commit | | () draft | | @ 3:fd2f632e47ab temporary fixup commit | | | () draft | | * 2:a425495a8e64 baz | |/ () draft orphan | x 1:c0c7cf58edc5 bar |/ () draft o 0:e63c23eaa88a foo () draft using --dry-run should only print actions (issue6669) $ hg evolve --dry-run update:[5] bar $ hg evolve --dry-run --any update:[5] bar move:[2] baz atop:[5] bar hg rebase -r a425495a8e64 -d 2eec5320cfc7 $ hg evolve update:[5] bar 1 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory is now at 2eec5320cfc7 $ hg evolve move:[2] baz atop:[5] bar $ hg glog o 6:eb1755d9f810 baz | () draft @ 5:2eec5320cfc7 bar | (bm) draft o 0:e63c23eaa88a foo () draft amending working directory parent in secret phase ------------------------------------------------- $ hg up -r 'desc(baz)' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg phase --secret --force -r . $ echo buzz >> baz $ hg fix-up -r . $ hg evolve update:[9] baz 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 12b5e442244f $ hg glog @ 9:12b5e442244f baz | () secret o 5:2eec5320cfc7 bar | (bm) draft o 0:e63c23eaa88a foo () draft testing --abort/--continue -------------------------- $ hg up -r 'desc(foo)' 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo 'update foo' > foo $ hg ci -m 'update foo' created new head $ hg up -r 'desc(baz)' 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg glog o 10:c90c517f86b3 update foo | () draft | @ 9:12b5e442244f baz | | () secret | o 5:2eec5320cfc7 bar |/ (bm) draft o 0:e63c23eaa88a foo () draft testing --abort flag $ echo 'update foo again' >> foo $ hg fixup -r 'desc("update foo")' merging foo warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') unresolved merge conflicts (see 'hg help evolve.interrupted') [240] $ hg diff diff --git a/foo b/foo --- a/foo +++ b/foo @@ -1,1 +1,6 @@ +<<<<<<< destination: c90c517f86b3 - test: update foo update foo +======= +foo +update foo again +>>>>>>> evolving: 1c9958e73c2d - test: temporary fixup commit $ hg fixup --abort fixup aborted working directory is now at 12b5e442244f $ hg diff diff --git a/foo b/foo --- a/foo +++ b/foo @@ -1,1 +1,2 @@ foo +update foo again testing abort command $ hg fixup -r 'desc("update foo")' merging foo warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') unresolved merge conflicts (see 'hg help evolve.interrupted') [240] $ hg abort fixup aborted working directory is now at 12b5e442244f testing --continue flag $ hg fixup -r 'desc("update foo")' merging foo warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') unresolved merge conflicts (see 'hg help evolve.interrupted') [240] $ hg status --verbose M foo ? foo.orig # The repository is in an unfinished *fixup* state. # Unresolved merge conflicts: # # foo # # To mark files as resolved: hg resolve --mark FILE # To continue: hg fixup --continue # To abort: hg fixup --abort $ echo 'finalize foo' > foo $ hg resolve -m (no more unresolved files) continue: hg fixup --continue $ hg fixup --continue evolving 11:1c9958e73c2d "temporary fixup commit" $ hg diff -c tip diff --git a/foo b/foo --- a/foo +++ b/foo @@ -1,1 +1,1 @@ -foo +finalize foo $ hg glog o 13:fed7e534b3bb update foo | () draft | @ 11:1c9958e73c2d temporary fixup commit | | () secret | o 9:12b5e442244f baz | | () secret | o 5:2eec5320cfc7 bar |/ (bm) draft o 0:e63c23eaa88a foo () draft $ hg evolve update:[13] update foo 1 files updated, 0 files merged, 2 files removed, 0 files unresolved working directory is now at fed7e534b3bb testing continue command $ hg up -r 'desc("baz")' 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo 'not foo' > foo $ hg fixup -r 'desc("update foo")' merging foo warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') unresolved merge conflicts (see 'hg help evolve.interrupted') [240] $ echo 'bonjour fixed' > foo $ hg resolve --mark foo (no more unresolved files) continue: hg fixup --continue $ hg continue evolving 14:6b0b1270d7dd "temporary fixup commit" $ hg glog o 16:0dd54868f420 update foo | () draft | @ 14:6b0b1270d7dd temporary fixup commit | | () secret | o 9:12b5e442244f baz | | () secret | o 5:2eec5320cfc7 bar |/ (bm) draft o 0:e63c23eaa88a foo () draft $ hg evolve update:[16] update foo 1 files updated, 0 files merged, 2 files removed, 0 files unresolved working directory is now at 0dd54868f420 amending a descendant of wdp $ hg up 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo foobar > foobar $ hg add foobar $ hg fixup -r 'desc(baz)' $ hg glog o 19:b50fd0850076 baz | () secret | @ 17:4a9c4d14d447 temporary fixup commit | | () draft | | o 16:0dd54868f420 update foo | |/ () draft o | 5:2eec5320cfc7 bar |/ (bm) draft o 0:e63c23eaa88a foo () draft $ hg evolve update:[19] baz 2 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at b50fd0850076 $ hg glog @ 19:b50fd0850076 baz | () secret | o 16:0dd54868f420 update foo | | () draft o | 5:2eec5320cfc7 bar |/ (bm) draft o 0:e63c23eaa88a foo () draft $ hg diff -c . diff --git a/baz b/baz new file mode 100644 --- /dev/null +++ b/baz @@ -0,0 +1,2 @@ +baz +buzz diff --git a/foobar b/foobar new file mode 100644 --- /dev/null +++ b/foobar @@ -0,0 +1,1 @@ +foobar no fixup in progress $ hg fixup --continue abort: no interrupted fixup to continue [20] $ hg fixup --abort abort: no interrupted fixup to abort [20] testing error cases $ hg fixup tip --abort abort: cannot specify a revision with --abort [10] $ hg fixup -r tip --continue abort: cannot specify a revision with --continue [10] $ hg fixup abort: please specify a revision to fixup [10] $ hg fixup tip nothing changed [1] $ hg fixup -r tip nothing changed [1] $ hg fixup 1 2 3 hg fixup: invalid arguments hg fixup [OPTION]... [-r] REV add working directory changes to an arbitrary revision options: -r --rev REV revision to amend -c --continue continue an interrupted fixup --abort abort an interrupted fixup (use 'hg fixup -h' to show more help) [10] $ hg fixup :10 -r 5 abort: please specify just one revision [10] $ cd .. Multiple branches ----------------- $ hg init branches $ cd branches $ cat >> .hg/hgrc << EOF > [extensions] > topic = > [alias] > glog = log -GT '{rev}:{node|short} {desc}\n ({branch}) [{topic}]\n' > EOF $ mkcommit ROOT $ hg topic topic-A -q $ mkcommit A -q $ hg topic topic-B -q $ mkcommit B -q $ hg up 'desc(ROOT)' -q $ hg branch other-branch -q $ hg topic topic-C -q $ mkcommit C -q $ hg topic topic-D -q $ mkcommit D -q $ hg up 'desc(A)' -q $ hg glog o 4:deb0223c611b D | (other-branch) [topic-D] o 3:381934d792ab C | (other-branch) [topic-C] | o 2:d2dfccd24f25 B | | (default) [topic-B] | @ 1:0a2783c5c927 A |/ (default) [topic-A] o 0:ea207398892e ROOT (default) [] $ echo Z > Z $ hg add Z $ hg fix-up -r 'desc(C)' switching to topic topic-C 1 new orphan changesets $ hg evolve update:[7] C switching to topic topic-C 1 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory is now at 57d19d0ff7ee $ hg evolve --any move:[4] D atop:[7] C switching to topic topic-C C and D keep their original branch and topics $ hg glog o 8:203e06b553f5 D | (other-branch) [topic-D] @ 7:57d19d0ff7ee C | (other-branch) [topic-C] | o 2:d2dfccd24f25 B | | (default) [topic-B] | o 1:0a2783c5c927 A |/ (default) [topic-A] o 0:ea207398892e ROOT (default) [] $ cd ..