# HG changeset patch # User Pierre-Yves David # Date 1397421973 14400 # Node ID 98b5ac44a25913e546f4588dba5b7a1db39c82d4 # Parent 4c305b8d4259972c2146bbc5fa8b64b1bdb17983# Parent 12ed6dfa8eead0deb3b3062df1466e63c1e54640 merge stable into default diff -r 4c305b8d4259 -r 98b5ac44a259 hgext/evolve.py --- a/hgext/evolve.py Mon Apr 07 16:41:29 2014 -0700 +++ b/hgext/evolve.py Sun Apr 13 16:46:13 2014 -0400 @@ -20,6 +20,7 @@ ''' testedwith = 'default' + buglink = 'https://bitbucket.org/marmoute/mutable-history/issues' import sys @@ -1073,7 +1074,7 @@ ui.write(' mean length: %9i\n' % mean) @command('^evolve|stabilize|solve', - [('n', 'dry-run', False, 'do not perform actions, print what to be done'), + [('n', 'dry-run', False, 'do not perform actions, just print what would be done'), ('A', 'any', False, 'evolve any troubled changeset'), ('a', 'all', False, 'evolve all troubled changesets'), ('c', 'continue', False, 'continue an interrupted evolution'), ], @@ -1081,13 +1082,13 @@ def evolve(ui, repo, **opts): """Solve trouble in your repository - - rebase unstable changeset to make it stable again, - - create proper diff from bumped changeset, - - merge divergent changesets. + - rebase unstable changesets to make them stable again, + - create proper diffs from bumped changesets, + - merge divergent changesets, - update to a successor if the working directory parent is obsolete - By default, take the first trouble changeset that looks relevant. + By default, takes the first troubled changeset that looks relevant. (The logic is still a bit fuzzy) @@ -1097,7 +1098,7 @@ - For divergent, this means taking "." if applicable. - With --any, evolve picks any troubled changeset to solve. + With --any, evolve picks any troubled changeset to repair. The working directory is updated to the newly created revision. """ @@ -1536,7 +1537,12 @@ displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) if len(parents) == 1: p = parents[0] - hg.update(repo, p.rev()) + bm = bookmarks.readcurrent(repo) + shouldmove = bm is not None and bookmarks.iscurrent(repo, bm) + ret = hg.update(repo, p.rev()) + if not ret and shouldmove: + repo._bookmarks[bm] = p.node() + repo._bookmarks.write() displayer.show(p) return 0 else: @@ -1562,7 +1568,12 @@ return 1 if len(children) == 1: c = children[0] - hg.update(repo, c.rev()) + bm = bookmarks.readcurrent(repo) + shouldmove = bm is not None and bookmarks.iscurrent(repo, bm) + ret = hg.update(repo, c.rev()) + if not ret and shouldmove: + repo._bookmarks[bm] = c.node() + repo._bookmarks.write() displayer.show(c) return 0 else: @@ -1624,22 +1635,22 @@ _('[OPTION] [-r] REV...')) # -U --noupdate option to prevent wc update and or bookmarks update ? def cmdprune(ui, repo, *revs, **opts): - """get rid of changesets by marking them obsolete + """hide changesets by marking them obsolete Obsolete changesets becomes invisible to all commands. - Non-pruned descendant of pruned changesets becomes "unstable". Use the + Unpruned descendants of pruned changesets becomes "unstable". Use the :hg:`evolve` to handle such situation. - When the working directory parent is pruned the repository is updated to a - non obsolete parents. + When the working directory parent is pruned, the repository is updated to a + non-obsolete parent. - You can use the ``--succ`` option to informs mercurial that a newer version + You can use the ``--succ`` option to inform mercurial that a newer version of the pruned changeset exists. You can use the ``--biject`` option to specify a 1-1 (bijection) between revisions to prune and successor changesets. This option may be removed in - a future release (with the functionality absored automatically). + a future release (with the functionality absorbed automatically). """ revs = set(scmutil.revrange(repo, list(revs) + opts.get('rev'))) @@ -1837,10 +1848,10 @@ def uncommit(ui, repo, *pats, **opts): """move changes from parent revision to working directory - Changes to selected files in parent revision appear again as + Changes to selected files in the checked out revision appear again as uncommitted changed in the working directory. A new revision - without selected changes is created, becomes the new parent and - obsoletes the previous one. + without the selected changes is created, becomes the checked out + revision, and obsoletes the previous one. The --include option specifies patterns to uncommit. The --exclude option specifies patterns to keep in the commit. @@ -1921,7 +1932,7 @@ # allow to choose the seed ? _('[-r] revs')) def touch(ui, repo, *revs, **opts): - """Create successors with exact same property but hash + """Create successors that are identical to their predecessors except for the changeset ID This is used to "resurrect" changesets """ @@ -1977,10 +1988,10 @@ def fold(ui, repo, *revs, **opts): """Fold multiple revisions into a single one - Revision from your current working directory to the specified one are fold - as a new one replacing the other + The revisions from your current working directory to the given one are folded + into a single successor revision. - you can alternatively use --rev to explicitly specify revision to be fold + you can alternatively use --rev to explicitly specify revisions to be folded, ignoring the current working directory parent. """ revs = list(revs) diff -r 4c305b8d4259 -r 98b5ac44a259 tests/test-prev-next.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-prev-next.t Sun Apr 13 16:46:13 2014 -0400 @@ -0,0 +1,62 @@ + $ cat >> $HGRCPATH < [extensions] + > hgext.rebase= + > hgext.graphlog= + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH + +hg prev should move active bookmark + $ hg init + $ touch a + $ hg add a + $ hg commit -m 'added a' + $ touch b + $ hg add b + $ hg commit -m 'added b' + $ hg bookmark mark + $ hg bookmarks + * mark 1:6e742c9127b3 + $ hg prev + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [0] added a + $ hg bookmarks + * mark 0:a154386e50d1 + +hg next should move active bookmark + $ hg next + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + [1] added b + $ hg bookmarks + * mark 1:6e742c9127b3 + +hg next/prev should not interfere with inactive bookmarks + $ touch c + $ hg add c + $ hg commit -m 'added c' + $ hg bookmark -r2 no-move + $ hg prev + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [1] added b + $ hg bookmarks + * mark 1:6e742c9127b3 + no-move 2:4e26ef31f919 + $ hg next + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + [2] added c + $ hg bookmarks + * mark 2:4e26ef31f919 + no-move 2:4e26ef31f919 + $ hg up 1 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg next + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + [2] added c + $ hg bookmarks + mark 2:4e26ef31f919 + no-move 2:4e26ef31f919 + $ hg prev + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [1] added b + $ hg bookmarks + mark 2:4e26ef31f919 + no-move 2:4e26ef31f919 diff -r 4c305b8d4259 -r 98b5ac44a259 tests/test-tutorial.t --- a/tests/test-tutorial.t Mon Apr 07 16:41:29 2014 -0700 +++ b/tests/test-tutorial.t Sun Apr 13 16:46:13 2014 -0400 @@ -444,9 +444,10 @@ move changes from parent revision to working directory - Changes to selected files in parent revision appear again as uncommitted - changed in the working directory. A new revision without selected changes - is created, becomes the new parent and obsoletes the previous one. + Changes to selected files in the checked out revision appear again as + uncommitted changed in the working directory. A new revision without the + selected changes is created, becomes the checked out revision, and + obsoletes the previous one. The --include option specifies patterns to uncommit. The --exclude option specifies patterns to keep in the commit. @@ -477,11 +478,11 @@ Fold multiple revisions into a single one - Revision from your current working directory to the specified one are fold - as a new one replacing the other + The revisions from your current working directory to the given one are + folded into a single successor revision. - you can alternatively use --rev to explicitly specify revision to be fold - ignoring the current working directory parent. + you can alternatively use --rev to explicitly specify revisions to be + folded, ignoring the current working directory parent. options: