view tests/test-topic-prev-next.t @ 6791:2ef4e26c4bc0 stable

topic: add more branchcache entries to test-topic-flow-publish-flag.t It seems these new entries started appearing after the recent-ish refactoring of branchcache in core. Now the server and the client have the same branch cache data on disk, which is probably for the best. The actual output with changeset hashes is: branch2-base:c0155e8ec55a9b46d415d5b13a319d0c80e26e9d o double//slash branch2-immutable:c0155e8ec55a9b46d415d5b13a319d0c80e26e9d o double//slash branch2-served:256a2cb64fd8ada4ff18d57606d212f094cb50fb o double//slash c0155e8ec55a is public, so it's correct to be in "base" and "immutable" repo views. 256a2cb64fd8 is draft (without topic), so it's expected to be in the "served" view.
author Anton Shestakov <av6@dwimlabs.net>
date Thu, 13 Jun 2024 15:45:02 +0400
parents 3571685e2aa2
children 9da0114a8a02
line wrap: on
line source

  $ . "$TESTDIR/testlib/topic_setup.sh"
  $ . "$TESTDIR/testlib/common.sh"

  $ cat << EOF >> $HGRCPATH
  > [extensions]
  > evolve =
  > [ui]
  > logtemplate = '{rev} [{topic}] {desc}\n'
  > EOF

Checking target ambiguity in hg next

  $ hg init ambiguous-next
  $ cd ambiguous-next

  $ mkcommit root
  $ hg topic A
  marked working directory as topic: A
  $ mkcommit A1
  active topic 'A' grew its first changeset
  (see 'hg help topics' for more information)
  $ mkcommit A2
  $ mkcommit A3
  $ mkcommit A4
  $ hg up 'desc("A3")'
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ mkcommit A5
  $ hg up 'desc("A2")'
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ hg topic B
  $ mkcommit B1
  active topic 'B' grew its first changeset
  (see 'hg help topics' for more information)
  $ mkcommit B2

  $ hg log -G
  @  7 [B] B2
  |
  o  6 [B] B1
  |
  | o  5 [A] A5
  | |
  | | o  4 [A] A4
  | |/
  | o  3 [A] A3
  |/
  o  2 [A] A2
  |
  o  1 [A] A1
  |
  o  0 [] root
  

Quick sanity check

  $ hg up 'desc("A1")'
  switching to topic A
  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
  $ hg next
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  [s2] A2
  $ hg stack
  ### topic: A (2 heads)
  ### target: default (branch)
  s5: A4
  s3^ A3 (base)
  s4: A5
  s3: A3
  s2@ A2 (current)
  s1: A1
  s0^ root (base)
  $ hg next
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  [s3] A3
  $ hg log -G
  o  7 [B] B2
  |
  o  6 [B] B1
  |
  | o  5 [A] A5
  | |
  | | o  4 [A] A4
  | |/
  | @  3 [A] A3
  |/
  o  2 [A] A2
  |
  o  1 [A] A1
  |
  o  0 [] root
  
  $ hg next
  ambiguous next changeset:
  [s5] A4
  [s4] A5
  explicitly update to one of them
  [1]

Let's make some changesets unstable

  $ hg up 'desc("A2")'
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo foo > A2
  $ hg amend
  5 new orphan changesets
  $ hg stack
  ### topic: A (2 heads)
  ### target: default (branch)
  s5$ A4 (orphan)
  s3^ A3 (base orphan)
  s4$ A5 (orphan)
  s3$ A3 (orphan)
  s2@ A2 (current)
  s1: A1
  s0^ root (base)
  $ hg log -G
  @  8 [A] A2
  |
  | *  7 [B] B2
  | |
  | *  6 [B] B1
  | |
  | | *  5 [A] A5
  | | |
  | | | *  4 [A] A4
  | | |/
  | | *  3 [A] A3
  | |/
  | x  2 [A] A2
  |/
  o  1 [A] A1
  |
  o  0 [] root
  

Simply walking on unstable changesets should work as expected

  $ hg up 'desc("B2")'
  switching to topic B
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg prev
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  [s1] B1
  $ hg next
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  [s2] B2

B1 shouldn't be considered a target, orphan or not

  $ hg up 'desc("A2")'
  switching to topic A
  1 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ hg next
  move:[s3] A3
  atop:[s2] A2
  working directory is now at 2b67b6a6cae1

B1 is not considered a target when it's been stabilized

  $ hg up 'desc("A2")'
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg evolve --rev 'desc("B1")'
  move:[6] B1
  atop:[8] A2
  switching to topic A
  $ hg next
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  [s3] A3

A4 and A5 should be ambiguous for hg next even if A5 is an orphan and A4 is not

  $ hg evolve --rev 'desc("A3") + desc("A4")'
  move:[s5] A4
  atop:[s3] A3
  $ hg up 'desc("A3")'
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg stack
  ### topic: A (2 heads)
  ### target: default (branch)
  s5: A4
  s3^ A3 (base current)
  s4$ A5 (orphan)
  s3@ A3 (current)
  s2: A2
  s1: A1
  s0^ root (base)
  $ hg next --no-evolve --dry-run
  hg update 51d70e81d730;
  [s5] A4
  $ hg next
  ambiguous next changeset:
  [s5] A4
  [s4] A5
  explicitly update to one of them
  [1]

  $ cd ..

Making sure plain hg next sticks to topic when target is unstable

  $ hg init next-unstable-topic
  $ cd next-unstable-topic

  $ mkcommit ROOT
  $ hg topics topic-a
  marked working directory as topic: topic-a
  $ mkcommit A
  active topic 'topic-a' grew its first changeset
  (see 'hg help topics' for more information)
  $ hg topics topic-b
  $ mkcommit B
  active topic 'topic-b' grew its first changeset
  (see 'hg help topics' for more information)
  $ hg up 'topic("topic-a")'
  switching to topic topic-a
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo foo > foo
  $ hg ci -A --amend
  adding foo
  1 new orphan changesets
  $ hg log -G
  @  3 [topic-a] A
  |
  | *  2 [topic-b] B
  | |
  | x  1 [topic-a] A
  |/
  o  0 [] ROOT
  

  $ hg next
  no children on topic "topic-a"
  do you want --no-topic
  [1]

  $ hg next --no-topic
  move:[2] B
  atop:[3] A
  working directory is now at 53f8332d648f

  $ cd ..