Mercurial > evolve
view tests/test-stack-branch.t @ 6376:5c8196a550b6
topic: make hg stack work for branches with double slashes in them
Other commands are likely affected as well.
Things to note: we're using FQBN-formatted branch instead of full
branch//namespace/topic in the workingctx.dirty() check because otherwise, if
you had no topic active and were trying to update to a topic, wdir would be
considered to be dirty and update would abort (same with unset topic namespace
and trying to update to a changeset with topic namespace set). With just a bare
branch, this doesn't happen, because you can't deactivate a branch. This is
caught by test-topic.t.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Thu, 15 Dec 2022 15:44:39 +0400 |
parents | c4097632a1a3 |
children | c5848d8b664d |
line wrap: on
line source
$ . "$TESTDIR/testlib/topic_setup.sh" Initial setup $ cat << EOF >> $HGRCPATH > [ui] > logtemplate = {rev} {branch} \{{get(namespaces, "topics")}} {phase} {desc|firstline}\n > [experimental] > evolution=createmarkers,exchange,allowunstable > EOF $ hg init main $ cd main $ hg branch double//slash marked working directory as branch double//slash (branches are permanent and global, did you want a bookmark?) $ echo aaa > aaa $ hg add aaa $ hg commit -m c_a $ echo aaa > bbb $ hg add bbb $ hg commit -m c_b $ hg branch foo//bar marked working directory as branch foo//bar $ echo aaa > ccc $ hg add ccc $ hg commit -m c_c $ echo aaa > ddd $ hg add ddd $ hg commit -m c_d $ echo aaa > eee $ hg add eee $ hg commit -m c_e $ echo aaa > fff $ hg add fff $ hg commit -m c_f $ hg log -G @ 5 foo//bar {} draft c_f | o 4 foo//bar {} draft c_e | o 3 foo//bar {} draft c_d | o 2 foo//bar {} draft c_c | o 1 double//slash {} draft c_b | o 0 double//slash {} draft c_a Check that topic without any parent does not crash --list --------------------------------------------------------- $ hg up double//slash// 0 files updated, 0 files merged, 4 files removed, 0 files unresolved $ hg stack ### target: double//slash (branch) s2@ c_b (current) s1: c_a $ hg phase --public 'branch("double//slash//")' $ hg up foo//bar// 4 files updated, 0 files merged, 0 files removed, 0 files unresolved Simple test ----------- 'hg stack' list all changeset in the topic $ hg branch foo//bar $ hg stack ### target: foo//bar (branch) s4@ c_f (current) s3: c_e s2: c_d s1: c_c s0^ c_b (base) $ hg stack -v ### target: foo//bar (branch) s4(18b3ff044de9)@ c_f (current) s3(b1913e064ca1): c_e s2(8fad7e98adf6): c_d s1(da14ac95d156): c_c s0(2450a061c0f0)^ c_b (base) Test "t#" reference ------------------- $ hg up s2 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg up foo//bar// 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg up s42 abort: cannot resolve "s42": branch "foo//bar//" has only 4 non-public changesets [255] $ hg up s2 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg summary parent: 3:8fad7e98adf6 c_d branch: foo//bar// commit: (clean) update: 2 new changesets (update) phases: 4 draft Case with some of the branch unstable ------------------------------------- $ echo bbb > ddd $ hg commit --amend 2 new orphan changesets $ hg log -G @ 6 foo//bar {} draft c_d | | * 5 foo//bar {} draft c_f | | | * 4 foo//bar {} draft c_e | | | x 3 foo//bar {} draft c_d |/ o 2 foo//bar {} draft c_c | o 1 double//slash {} public c_b | o 0 double//slash {} public c_a $ hg stack ### target: foo//bar (branch) s4$ c_f (orphan) s3$ c_e (orphan) s2@ c_d (current) s1: c_c s0^ c_b (base) $ hg up s3 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg stack ### target: foo//bar (branch) s4$ c_f (orphan) s3@ c_e (current orphan) s2: c_d s1: c_c s0^ c_b (base) $ hg up s2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved Also test the revset: $ hg log -r 'stack()' 2 foo//bar {} draft c_c 6 foo//bar {} draft c_d 4 foo//bar {} draft c_e 5 foo//bar {} draft c_f Case with multiple heads on the topic ------------------------------------- Make things linear again $ hg rebase -s 'desc(c_e)' -d 'desc(c_d) - obsolete()' rebasing 4:b1913e064ca1 "c_e" rebasing 5:18b3ff044de9 "c_f" $ hg log -G o 8 foo//bar {} draft c_f | o 7 foo//bar {} draft c_e | @ 6 foo//bar {} draft c_d | o 2 foo//bar {} draft c_c | o 1 double//slash {} public c_b | o 0 double//slash {} public c_a Create the second branch $ hg up 'desc(c_d)' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo aaa > ggg $ hg add ggg $ hg commit -m c_g created new head (consider using topic for lightweight branches. See 'hg help topic') $ echo aaa > hhh $ hg add hhh $ hg commit -m c_h $ hg log -G @ 10 foo//bar {} draft c_h | o 9 foo//bar {} draft c_g | | o 8 foo//bar {} draft c_f | | | o 7 foo//bar {} draft c_e |/ o 6 foo//bar {} draft c_d | o 2 foo//bar {} draft c_c | o 1 double//slash {} public c_b | o 0 double//slash {} public c_a Test output $ hg stack ### target: foo//bar (branch) (2 heads) s6@ c_h (current) s5: c_g s2^ c_d (base) s4: c_f s3: c_e s2: c_d s1: c_c s0^ c_b (base) Case with multiple heads on the topic with instability involved --------------------------------------------------------------- We amend the message to make sure the display base pick the right changeset $ hg up 'desc(c_d)' 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo ccc > ddd $ hg commit --amend -m 'c_D' 4 new orphan changesets $ hg rebase -d . -s 'desc(c_g)' rebasing 9:8c1819a4441f "c_g" rebasing 10:e255b784f0e9 "c_h" $ hg log -G o 13 foo//bar {} draft c_h | o 12 foo//bar {} draft c_g | @ 11 foo//bar {} draft c_D | | * 8 foo//bar {} draft c_f | | | * 7 foo//bar {} draft c_e | | | x 6 foo//bar {} draft c_d |/ o 2 foo//bar {} draft c_c | o 1 double//slash {} public c_b | o 0 double//slash {} public c_a $ hg stack ### target: foo//bar (branch) (2 heads) s6: c_h s5: c_g s2^ c_D (base current) s4$ c_f (orphan) s3$ c_e (orphan) s2@ c_D (current) s1: c_c s0^ c_b (base) Check that stack doesn't show draft changesets on a branch ---------------------------------------------------------- $ hg log --graph o 13 foo//bar {} draft c_h | o 12 foo//bar {} draft c_g | @ 11 foo//bar {} draft c_D | | * 8 foo//bar {} draft c_f | | | * 7 foo//bar {} draft c_e | | | x 6 foo//bar {} draft c_d |/ o 2 foo//bar {} draft c_c | o 1 double//slash {} public c_b | o 0 double//slash {} public c_a $ hg stack ### target: foo//bar (branch) (2 heads) s6: c_h s5: c_g s2^ c_D (base current) s4$ c_f (orphan) s3$ c_e (orphan) s2@ c_D (current) s1: c_c s0^ c_b (base) $ hg phase --public s1 $ hg stack ### target: foo//bar (branch) (2 heads) s5: c_h s4: c_g s1^ c_D (base current) s3$ c_f (orphan) s2$ c_e (orphan) s1@ c_D (current) s0^ c_c (base) Check that stack doesn't show changeset with a topic ---------------------------------------------------- $ hg topic --rev s4::s5 sometopic changed topic on 2 changesets to "sometopic" $ hg stack ### target: foo//bar (branch) s3$ c_f (orphan) s2$ c_e (orphan) s1@ c_D (current) s0^ c_c (base)