Mercurial > hg > evolve
view tests/test-topic-issue6406.t @ 6770:d2b90c9e5829 stable
uncommit: set uncommit_source extra consistently in interactive mode
Previously, the uncommit_source extra was only explicitly set on the temporary
changeset created during the uncommit command.
Due to a contract mismatch because the extra() method returned a dict that
might be reused for multiple callers and this call site expected a fresh dict,
the resulting changeset produced by the uncommit command might or might not
have had the correct extra nonetheless. This changeset ensures that it will be
set consistently.
There is a discussion whether the extra() method (in core) should always return
a fresh dict. Independent of the outcome of the discussion, this fix should
work. I checked that the tests work no matter whether extra() returns a fresh
dict or a reused one (current core behavior).
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Thu, 01 Feb 2024 19:13:24 +0100 |
parents | 81fe0a498447 |
children | 9da0114a8a02 195941260a67 |
line wrap: on
line source
hg pick with no active topic and with a different active topic (issue6406) https://bz.mercurial-scm.org/show_bug.cgi?id=6406 For prior discussions on this behavior see also https://foss.heptapod.net/mercurial/evolve/-/merge_requests/313 https://foss.heptapod.net/mercurial/evolve/-/merge_requests/390 $ . "$TESTDIR/testlib/common.sh" $ cat << EOF >> "$HGRCPATH" > [phases] > publish = no > [extensions] > evolve = > topic = > EOF #testcases inmemory ondisk #if inmemory $ cat >> $HGRCPATH <<EOF > [experimental] > evolution.in-memory = yes > EOF #endif $ hg init issue6406 $ cd issue6406 $ mkcommit ROOT $ hg debug-topic-namespace aaa marked working directory as topic namespace: aaa $ hg topic a-things marked working directory as topic: a-things $ mkcommit apple active topic 'a-things' grew its first changeset (see 'hg help topics' for more information) $ hg up 'desc("ROOT")' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg debug-topic-namespace bbb marked working directory as topic namespace: bbb $ hg topic b-things marked working directory as topic: b-things $ mkcommit banana active topic 'b-things' grew its first changeset (see 'hg help topics' for more information) $ mkcommit blackberry $ hg up 'desc("apple")' switching to topic-namespace aaa switching to topic a-things 1 files updated, 0 files merged, 2 files removed, 0 files unresolved This is what the help text says about this issue $ hg help pick | grep 'active topic' The resulting changeset will have the current active topic. If there's no active topic set, the resulting changeset will also not have any topic. wdir has no active topic: pick should clear topic of the resulting cset $ hg debug-topic-namespace --clear $ hg topic --clear $ hg pick 'desc("banana")' picking 2:fcda3d8dafd2 "banana" 1 new orphan changesets $ hg log -r . -T '{rev}: {desc} ({fqbn})\n' 4: banana (default) $ hg debug-topic-namespace none $ hg topic --current no active topic [1] wdir has active topic: pick should use the active topic for the resulting cset $ hg debug-topic-namespace everything marked working directory as topic namespace: everything $ hg topic all-things marked working directory as topic: all-things $ hg pick 'desc("blackberry")' picking 3:48bbfbece8fa "blackberry" active topic 'all-things' grew its first changeset (see 'hg help topics' for more information) $ hg log -r . -T '{rev}: {desc} ({fqbn})\n' 5: blackberry (default//everything/all-things) $ hg debug-topic-namespace everything $ hg topic --current all-things $ hg log -GT '{rev}: {desc} ({fqbn})\n{join(extras, " ")}\n\n' @ 5: blackberry (default//everything/all-things) | branch=default topic=all-things topic-namespace=everything | o 4: banana (default) | branch=default | o 1: apple (default//aaa/a-things) | branch=default topic=a-things topic-namespace=aaa | o 0: ROOT (default) branch=default