Commit 51b769b4 authored by Anton Shestakov's avatar Anton Shestakov
Browse files

next: treat targets that need evolution the same as regular targets

Unless --no-evolve is given.

In case when there's only one stable child that otherwise fits perfectly as a
hg next target, but there are also unstable children on the current topic and
we are allowed to evolve them, hg next should treat them as targets too and
give a prompt to select the revision to update to. With this patch it does.
parent c8050f0f7de4
Pipeline #20977 failed with stage
in 4 minutes and 30 seconds
......@@ -885,17 +885,17 @@ def cmdnext(ui, repo, **opts):
else:
cmdutil.bailifchanged(repo, hint=_(b'do you want --merge?'))
if len(children) == 1:
if len(children) == 1 and (not opts['evolve'] or not aspchildren):
c = children[0]
return _updatetonext(ui, repo, c, display, opts)
elif children:
cheader = _(b"ambiguous next changeset, choose one to update:")
crevs = [c.rev() for c in children]
crevs = [c.rev() for c in children] + aspchildren
selectedrev = utility.revselectionprompt(ui, repo, crevs, cheader)
if selectedrev is None:
ui.warn(_(b"ambiguous next changeset:\n"))
for c in children:
display(c)
for rev in crevs:
display(repo[rev])
ui.warn(_(b"explicitly update to one of them\n"))
return 1
else:
......
......@@ -8,6 +8,179 @@
> 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
B1 shouldn't be considered a target, orphan or not
$ 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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment