Mercurial > evolve
view tests/test-topic.t @ 2679:5156a67f66a6
topics: update current topic to the topic of newly rebased commit (issue5551)
The rebase code passes branchmerge equals to True while updating to the rebased
commit. We need to make sure topic is preserved even after rebase and hence we
need to update the topic even when branchmerge argument is set to True. But
there is a twist in the tale, merge also uses this part of code and we allow to
update topic when brancmerge is True, in merge cases the topic after merge will
the topic of the destination commit, not the topic of working directory parent.
So we need the function to have information about whether a rebase is going on,
and we do it by wrapping the rebase command and storing some value in the
config. This is a bit hacky but works for now. This patch fixes issue related to
loosing of topic while rebase.
Thanks to Boris Feld for the rigourous tests.
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Thu, 29 Jun 2017 02:31:55 +0530 |
parents | 0ade6e87346b |
children | 9b68a2083dac |
line wrap: on
line source
$ . "$TESTDIR/testlib/topic_setup.sh" $ hg init pinky $ cd pinky $ cat <<EOF >> .hg/hgrc > [phases] > publish=false > EOF $ cat <<EOF >> $HGRCPATH > [experimental] > # disable the new graph style until we drop 3.7 support > graphstyle.missing = | > EOF $ hg help topics hg topics [TOPIC] View current topic, set current topic, or see all topics. The --verbose version of this command display various information on the state of each topic. options: --clear clear active topic if any -r --rev REV revset of existing revisions -l --list show the stack of changeset in the topic (some details hidden, use --verbose to show complete help) $ hg topics Test topics interaction with evolution: $ hg topics --config experimental.evolution= $ hg topics --config experimental.evolution= --rev . bob abort: must have obsolete enabled to change topics [255] Create some changes: $ for x in alpha beta gamma delta ; do > echo file $x >> $x > hg addremove > hg ci -m "Add file $x" > done adding alpha adding beta adding gamma adding delta Still no topics $ hg topics Test commit flag and help text $ echo stuff >> alpha $ HGEDITOR=cat hg ci -t topicflag HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Leave message empty to abort commit. HG: -- HG: user: test HG: topic 'topicflag' HG: branch 'default' HG: changed alpha abort: empty commit message [255] $ hg revert alpha $ hg topic * topicflag Make a topic $ hg topic narf $ hg topics * narf $ echo topic work >> alpha $ hg ci -m 'start on narf' $ hg co .^ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg topic fran $ hg topics * fran narf $ echo >> fran work >> beta $ hg ci -m 'start on fran' $ hg co narf switching to topic narf 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg topic fran * narf $ hg log -r . -T '{topics}\n' narf $ echo 'narf!!!' >> alpha $ hg ci -m 'narf!' $ hg log -G @ changeset: 6:7c34953036d6 | tag: tip | topic: narf | parent: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: narf! | | o changeset: 5:0469d521db49 | | topic: fran | | parent: 3:a53952faf762 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: start on fran | | o | changeset: 4:fb147b0b417c |/ topic: narf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on narf | o changeset: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file delta | o changeset: 2:15d1eb11d2fa | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file gamma | o changeset: 1:c692ea2c9224 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file beta | o changeset: 0:c2b7d2f7d14b user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Add file alpha Exchanging of topics: $ cd .. $ hg init brain $ hg -R pinky push -r 4 brain pushing to brain searching for changes adding changesets adding manifests adding file changes added 5 changesets with 5 changes to 4 files Export $ hg -R pinky export # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 7c34953036d6a36eae468c550d0592b89ee8bffc # Parent fb147b0b417c25ca15547cd945acf51cf8dcaf02 # EXP-Topic narf narf! diff -r fb147b0b417c -r 7c34953036d6 alpha --- a/alpha Thu Jan 01 00:00:00 1970 +0000 +++ b/alpha Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +1,3 @@ file alpha topic work +narf!!! Import $ hg -R pinky export > narf.diff $ hg -R pinky --config extensions.strip= strip . 1 files updated, 0 files merged, 0 files removed, 0 files unresolved saved backup bundle to $TESTTMP/pinky/.hg/strip-backup/7c34953036d6-1ff3bae2-backup.hg (glob) $ hg -R pinky import narf.diff applying narf.diff $ hg -R pinky log -r . changeset: 6:7c34953036d6 tag: tip topic: narf parent: 4:fb147b0b417c user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: narf! Now that we've pushed to brain, the work done on narf is no longer a draft, so we won't see that topic name anymore: $ hg log -R pinky -G @ changeset: 6:7c34953036d6 | tag: tip | topic: narf | parent: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: narf! | | o changeset: 5:0469d521db49 | | topic: fran | | parent: 3:a53952faf762 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: start on fran | | o | changeset: 4:fb147b0b417c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on narf | o changeset: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file delta | o changeset: 2:15d1eb11d2fa | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file gamma | o changeset: 1:c692ea2c9224 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file beta | o changeset: 0:c2b7d2f7d14b user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Add file alpha $ cd brain $ hg co tip 4 files updated, 0 files merged, 0 files removed, 0 files unresolved Because the change is public, we won't inherit the topic from narf. $ hg topic $ echo what >> alpha $ hg topic query $ hg ci -m 'what is narf, pinky?' $ hg log -Gl2 @ changeset: 5:c01515cfc331 | tag: tip | topic: query | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: what is narf, pinky? | o changeset: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on narf | $ hg push -f ../pinky -r query pushing to ../pinky searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) $ hg -R ../pinky log -Gl 4 o changeset: 7:c01515cfc331 | tag: tip | topic: query | parent: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: what is narf, pinky? | | @ changeset: 6:7c34953036d6 |/ topic: narf | parent: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: narf! | | o changeset: 5:0469d521db49 | | topic: fran | | parent: 3:a53952faf762 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: start on fran | | o | changeset: 4:fb147b0b417c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on narf | $ hg topics * query $ cd ../pinky $ hg co query switching to topic query 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo answer >> alpha $ hg ci -m 'Narf is like `zort` or `poit`!' $ hg merge narf merging alpha warning: conflicts while merging alpha! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] $ hg revert -r narf alpha $ hg resolve -m alpha (no more unresolved files) $ hg topic narf $ hg ci -m 'Finish narf' $ hg topics fran * narf query $ hg debugnamecomplete # branch:topic here is a buggy side effect default default:fran default:narf default:query fran narf query tip $ hg phase --public narf POSSIBLE BUG: narf topic stays alive even though we just made all narf commits public: $ hg topics fran * narf $ hg log -Gl 6 @ changeset: 9:ae074045b7a7 |\ tag: tip | | parent: 8:54c943c1c167 | | parent: 6:7c34953036d6 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: Finish narf | | | o changeset: 8:54c943c1c167 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: Narf is like `zort` or `poit`! | | | o changeset: 7:c01515cfc331 | | parent: 4:fb147b0b417c | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: what is narf, pinky? | | o | changeset: 6:7c34953036d6 |/ parent: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: narf! | | o changeset: 5:0469d521db49 | | topic: fran | | parent: 3:a53952faf762 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: start on fran | | o | changeset: 4:fb147b0b417c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on narf | $ cd ../brain $ hg topics * query $ hg pull ../pinky -r narf pulling from ../pinky abort: unknown revision 'narf'! [255] $ hg pull ../pinky -r default pulling from ../pinky searching for changes adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 1 files (run 'hg update' to get a working copy) $ hg topics * query We can pull in the draft-phase change and we get the new topic $ hg pull ../pinky pulling from ../pinky searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads) $ hg topics fran * query $ hg log -Gr 'draft()' o changeset: 9:0469d521db49 | tag: tip | topic: fran | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | query is not an open topic, so when we clear the current topic it'll disappear: $ hg topics --clear $ hg topics fran --clear when we don't have an active topic isn't an error: $ hg topics --clear Topic revset $ hg log -r 'topic()' -G o changeset: 9:0469d521db49 | tag: tip | topic: fran | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | $ hg log -r 'not topic()' -G o changeset: 8:ae074045b7a7 |\ parent: 7:54c943c1c167 | | parent: 6:7c34953036d6 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: Finish narf | | | o changeset: 7:54c943c1c167 | | parent: 5:c01515cfc331 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: Narf is like `zort` or `poit`! | | o | changeset: 6:7c34953036d6 | | parent: 4:fb147b0b417c | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: narf! | | | @ changeset: 5:c01515cfc331 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: what is narf, pinky? | o changeset: 4:fb147b0b417c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on narf | o changeset: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file delta | o changeset: 2:15d1eb11d2fa | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file gamma | o changeset: 1:c692ea2c9224 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: Add file beta | o changeset: 0:c2b7d2f7d14b user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Add file alpha No matches because narf is already closed: $ hg log -r 'topic(narf)' -G This regexp should match the topic `fran`: $ hg log -r 'topic("re:.ra.")' -G o changeset: 9:0469d521db49 | tag: tip | topic: fran | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | Exact match on fran: $ hg log -r 'topic(fran)' -G o changeset: 9:0469d521db49 | tag: tip | topic: fran | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | Match current topic: $ hg topic fran $ hg log -r 'topic(.)' (no output is expected) $ hg co fran switching to topic fran 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg log -r 'topic(.)' changeset: 9:0469d521db49 tag: tip topic: fran parent: 3:a53952faf762 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: start on fran Deactivate the topic. $ hg topics * fran $ hg topics --clear $ echo fran? >> beta $ hg ci -m 'fran?' created new head $ hg log -Gr 'draft()' @ changeset: 10:4073470c35e1 | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 9:0469d521db49 | topic: fran | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | $ hg topics fran Changing topic fails if we don't give a topic $ hg topic --rev 9 abort: changing topic requires a topic name or --clear [255] Can't change topic of a public change $ hg topic --rev 1:: --clear abort: can't change topic of a public change [255] Can clear topics $ hg topic --rev 9 --clear changed topic on 1 changes please run hg evolve --rev "not topic()" now $ hg log -Gr 'draft() and not obsolete()' o changeset: 11:0beca5ab56c3 | tag: tip | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | | @ changeset: 10:4073470c35e1 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | trouble: unstable | | summary: fran? | | Normally you'd do this with evolve, but we'll use rebase to avoid bonus deps in the testsuite. $ hg rebase -d tip -s . rebasing 10:4073470c35e1 "fran?" Can add a topic to an existing change $ hg topic $ hg sum parent: 12:18b70b8de1f0 tip fran? branch: default commit: (clean) update: 5 new changesets, 2 branch heads (merge) phases: 2 draft $ hg topic --rev 11 wat changed topic on 1 changes please run hg evolve --rev "topic(wat)" now $ hg log -r . changeset: 12:18b70b8de1f0 user: test date: Thu Jan 01 00:00:00 1970 +0000 trouble: unstable summary: fran? $ hg sum parent: 12:18b70b8de1f0 (unstable) fran? branch: default commit: (clean) update: 5 new changesets, 2 branch heads (merge) phases: 3 draft unstable: 1 changesets $ hg topic wat $ hg log -Gr 'draft() and not obsolete()' o changeset: 13:686a642006db | tag: tip | topic: wat | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | | @ changeset: 12:18b70b8de1f0 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | trouble: unstable | | summary: fran? | | Normally you'd do this with evolve, but we'll use rebase to avoid bonus deps in the testsuite. $ hg topic wat $ hg rebase -d tip -s . rebasing 12:18b70b8de1f0 "fran?" switching to topic wat $ hg topic wat $ hg log -Gr 'draft()' @ changeset: 14:45358f7a5892 | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 13:686a642006db | topic: wat | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | Amend a topic $ hg topic watwat $ hg ci --amend $ hg log -Gr 'draft()' @ changeset: 16:6c40a4c21bbe | tag: tip | topic: watwat | parent: 13:686a642006db | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 13:686a642006db | topic: wat | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | Clear and amend: $ hg topic --clear $ hg ci --amend $ hg log -r . changeset: 18:0f9cd5070654 tag: tip parent: 13:686a642006db user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: fran? Reading the same topic with topic --rev should work: $ hg topic --rev . watwat switching to topic watwat changed topic on 1 changes Testing issue5441 $ hg co 19 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg log -Gr 'draft()' @ changeset: 19:980a0f608481 | tag: tip | topic: watwat | parent: 13:686a642006db | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 13:686a642006db | topic: wat | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | $ hg topics --rev '13::19' changewat switching to topic changewat changed topic on 2 changes please run hg evolve --rev "topic(changewat)" now $ hg log -Gr 'draft()' @ changeset: 21:56c83be6105f | tag: tip | topic: changewat | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 20:ceba5be9d56f | topic: changewat | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | Case with branching: $ hg up changewat 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg up t1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo gamma >> gamma $ hg ci -m gamma $ hg log -Gr 'draft()' @ changeset: 22:0d3d805542b4 | tag: tip | topic: changewat | parent: 20:ceba5be9d56f | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: gamma | | o changeset: 21:56c83be6105f |/ topic: changewat | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 20:ceba5be9d56f | topic: changewat | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | $ hg topics --rev 't1::' changewut switching to topic changewut changed topic on 3 changes please run hg evolve --rev "topic(changewut)" now $ hg log -Gr 'draft()' @ changeset: 25:729ed5717393 | tag: tip | topic: changewut | parent: 23:62e49f09f883 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: gamma | | o changeset: 24:369c6e2e5474 |/ topic: changewut | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: fran? | o changeset: 23:62e49f09f883 | topic: changewut | parent: 3:a53952faf762 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran |