Commits

Pierre-Yves David  committed 98b5ac4 Merge

merge stable into default

  • Participants
  • Parent commits 4c305b8, 12ed6df
  • Branches default

Comments (0)

Files changed (3)

File hgext/evolve.py

 '''
 
 testedwith = 'default'
+
 buglink = 'https://bitbucket.org/marmoute/mutable-history/issues'
 
 import sys
         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'), ],
 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)
 
 
     - 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.
     """
     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:
         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:
     _('[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')))
 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.
     # 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
     """
 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)

File tests/test-prev-next.t

+  $ cat >> $HGRCPATH <<EOF
+  > [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

File tests/test-tutorial.t

   
   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.
   
   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: