Mercurial > evolve
changeset 4252:a07cd1d076bb
next: solve the issue of `next` get confused by split
This patch solve a problem of next command which get confused by split.
Let me describe how it was getting confused:
Initial state of repo:
A---B---C
After splitting B to (B1,B2):
@
A---B1---B2
\
---B---C
X *
(note: C is orphan; checkedout to B1)
Lets make an amend on B1:
@
B1'
/
A---B1---B2
\ X *
\
---B---C
X *
Now, if run `hg next` (--evolve is True by default now):
$ it would give you choice to choose from B2 and C thinking that C could also
be a possbile children for B1, instead of stablizing B2 on B1.
I fixed this problem by filtering those aspiring children which can be
stablized on one of the aspiring children itself.
Changes made in test-prev-next.t shows the changed expected behaviour.
author | Sushil khanchi <sushilkhanchi97@gmail.com> |
---|---|
date | Tue, 06 Nov 2018 10:41:50 +0530 |
parents | a5ec7652c4f4 |
children | 35dac5aadcfc |
files | CHANGELOG hgext3rd/evolve/__init__.py tests/test-prev-next.t |
diffstat | 3 files changed, 16 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGELOG Tue Nov 06 15:10:56 2018 +0530 +++ b/CHANGELOG Tue Nov 06 10:41:50 2018 +0530 @@ -6,6 +6,7 @@ * push: have `--publish` overrule the `auto-publish` config * next: evolve aspiring children by default (use --no-evolve to skip) + * next: pick lower part of a split as destination 8.3.2 - in progress -------------------
--- a/hgext3rd/evolve/__init__.py Tue Nov 06 15:10:56 2018 +0530 +++ b/hgext3rd/evolve/__init__.py Tue Nov 06 10:41:50 2018 +0530 @@ -1146,6 +1146,16 @@ filtered.update(repo[c] for c in aspchildren if repo[c].topic() != topic) aspchildren = [ctx for ctx in aspchildren if ctx not in filtered] + + # To catch and prevent the case when `next` would get confused by split, + # lets filter those aspiring children which can be stablized on one of + # the aspiring children itself. + aspirants = set(aspchildren) + for aspchild in aspchildren: + possdests = evolvecmd._possibledestination(repo, aspchild) + if possdests & aspirants: + filtered.add(aspchild) + aspchildren = [ctx for ctx in aspchildren if ctx not in filtered] if aspchildren: needevolve = True
--- a/tests/test-prev-next.t Tue Nov 06 15:10:56 2018 +0530 +++ b/tests/test-prev-next.t Tue Nov 06 10:41:50 2018 +0530 @@ -484,8 +484,8 @@ use 'hg resolve' to retry unresolved file merges [2] added bar -Add test which shows that `next` command get confused by split: ---------------------------------------------------------------- +Add test which shows that now `next` command does not get confused by split: +---------------------------------------------------------------------------- $ cd .. $ mkdir nextconfused $ cd nextconfused @@ -584,13 +584,6 @@ $ hg next --evolve << EOF > q > EOF - ambiguous next (unstable) changeset, choose one to evolve and update: - 0: [fdc998261dcb] C - 1: [279f6cab32b5] B - q: quit the prompt - enter the index of the revision you want to select: q - ambiguous next (unstable) changeset: - [2] C - [4] B - (run 'hg evolve --rev REV' on one of them) - [1] + move:[4] B + atop:[5] B modified + working directory now at 1b434459c7e7