# HG changeset patch # User Sushil khanchi # Date 1541481110 -19800 # Node ID a07cd1d076bb92a4d16c6837cd85fc2e00fbab35 # Parent a5ec7652c4f402523e1ae9ce09fddd8f3ce5a37c 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. diff -r a5ec7652c4f4 -r a07cd1d076bb CHANGELOG --- 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 ------------------- diff -r a5ec7652c4f4 -r a07cd1d076bb hgext3rd/evolve/__init__.py --- 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 diff -r a5ec7652c4f4 -r a07cd1d076bb tests/test-prev-next.t --- 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