# HG changeset patch # User Pierre-Yves David # Date 1435201605 25200 # Node ID 9be1cadf7a07a0ee35b908dfc16e560673bf2ade # Parent 3c113c097339e7c785e526eba2dbb0e02e5aa78f next: add a --evolve option When on a topological head, this option will trigger the evolution of a unstable changeset that will result in a children of the current working copy parent. This should ease stacked changesets workflow by allowing to stick to prev and next to move through a stack of diff, evolving part of it on demand when needed. In case of ambiguity, the command will ask the user to choose. We need a better definition of "the stack of changesets I'm working on" to be able to seamlessly handling branching. diff -r 3c113c097339 -r 9be1cadf7a07 README --- a/README Wed Jun 24 19:42:01 2015 -0700 +++ b/README Wed Jun 24 20:06:45 2015 -0700 @@ -68,6 +68,7 @@ enabling - next/prev: requires `--merge` to move with uncommited changes - next: significantly reword error messages +- next: add a --evolve flag to evolve aspiring children when on a head 5.1.5 -- 2015-06-23 diff -r 3c113c097339 -r 9be1cadf7a07 hgext/evolve.py --- a/hgext/evolve.py Wed Jun 24 19:42:01 2015 -0700 +++ b/hgext/evolve.py Wed Jun 24 20:06:45 2015 -0700 @@ -2005,10 +2005,15 @@ @command('^next', [('B', 'move-bookmark', False, _('Move active bookmark after update')), - ('', 'merge', False, _('bring uncommited change along'))], + ('', 'merge', False, _('bring uncommited change along')), + ('', 'evolve', False, _('evolve the next changeset if necessary'))], '[-B]') def cmdnext(ui, repo, **opts): - """update to child and display summary lines""" + """update to next child + + You can use the --evolve flag to get unstable children evolved on demand. + + The summary line of the destination is displayed for clarity""" wkctx = repo[None] wparents = wkctx.parents() if len(wparents) != 1: @@ -2042,13 +2047,28 @@ ui.warn(_('explicitly update to one of them\n')) result = 1 else: - ui.warn(_('no children\n')) aspchildren = _aspiringchildren(repo, [repo['.'].rev()]) - if aspchildren: - msg = _('(%i unstable changesets to be evolved here, ' - 'do you want to evolve?)\n') - ui.warn(msg % len(aspchildren)) - result = 1 + if not opts['evolve']: + ui.warn(_('no children\n')) + if aspchildren: + msg = _('(%i unstable changesets to be evolved here, ' + 'do you want --evolve?)\n') + ui.warn(msg % len(aspchildren)) + result = 1 + elif 1 < len(aspchildren): + ui.warn("ambigious next (unstable) changeset:\n") + for c in aspchildren: + displayer.show(repo[c]) + ui.warn(_('(run "hg evolve --rev REV" on one of them)\n')) + return 1 + else: + cmdutil.bailifchanged(repo) + result = _solveone(ui, repo, repo[aspchildren[0]], False, + False, lambda:None, category='unstable') + if not result: + ui.status(_('working directory now at %s\n') % repo['.']) + return result + return 1 return result def _reachablefrombookmark(repo, revs, mark): diff -r 3c113c097339 -r 9be1cadf7a07 tests/test-prev-next.t --- a/tests/test-prev-next.t Wed Jun 24 19:42:01 2015 -0700 +++ b/tests/test-prev-next.t Wed Jun 24 20:06:45 2015 -0700 @@ -147,12 +147,12 @@ 1 new unstable changesets $ hg next no children - (1 unstable changesets to be evolved here, do you want to evolve?) + (1 unstable changesets to be evolved here, do you want --evolve?) [1] - $ hg evolve + $ hg next --evolve move:[2] added c atop:[3] added b (2) - working directory is now at e3b6d5df389b + working directory now at e3b6d5df389b next with ambiguity @@ -179,12 +179,14 @@ 2 new unstable changesets $ hg next no children - (2 unstable changesets to be evolved here, do you want to evolve?) + (2 unstable changesets to be evolved here, do you want --evolve?) [1] - $ hg evolve - abort: multiple evolve candidates - (select one of e3b6d5df389b, 9df671ccd2c7 with --rev) - [255] + $ hg next --evolve + ambigious next (unstable) changeset: + [4] added c + [5] added d + (run "hg evolve --rev REV" on one of them) + [1] $ hg evolve -r 5 move:[5] added d atop:[6] added b (3)