Make next/prev only move bookmarks optionally stable
authorRyan McElroy <rmcelroy@fb.com>
Wed, 29 Oct 2014 10:34:08 -0700
branchstable
changeset 1160 e29a813f6af5
parent 1157 5951969400ce
child 1161 ae233fe4529e
Make next/prev only move bookmarks optionally
hgext/evolve.py
tests/test-prev-next.t
--- a/hgext/evolve.py	Tue Nov 11 12:38:49 2014 +0000
+++ b/hgext/evolve.py	Wed Oct 29 10:34:08 2014 -0700
@@ -1584,9 +1584,10 @@
 shorttemplate = '[{rev}] {desc|firstline}\n'
 
 @command('^previous',
-         [],
-         '')
-def cmdprevious(ui, repo):
+         [('B', 'move-bookmark', False,
+             _('Move current active bookmark after update'))],
+         '[-B]')
+def cmdprevious(ui, repo, **opts):
     """update to parent and display summary lines"""
     wkctx = repo[None]
     wparents = wkctx.parents()
@@ -1598,11 +1599,14 @@
     if len(parents) == 1:
         p = parents[0]
         bm = bookmarks.readcurrent(repo)
-        shouldmove = bm is not None and bookmarks.iscurrent(repo, bm)
+        shouldmove = opts.get('move_bookmark') and bm is not None
         ret = hg.update(repo, p.rev())
-        if not ret and shouldmove:
-            repo._bookmarks[bm] = p.node()
-            repo._bookmarks.write()
+        if not ret:
+            if shouldmove:
+                repo._bookmarks[bm] = p.node()
+                repo._bookmarks.write()
+            else:
+                bookmarks.unsetcurrent(repo)
         displayer.show(p)
         return 0
     else:
@@ -1612,9 +1616,10 @@
         return 1
 
 @command('^next',
-         [],
-         '')
-def cmdnext(ui, repo):
+         [('B', 'move-bookmark', False,
+             _('Move current active bookmark after update'))],
+         '[-B]')
+def cmdnext(ui, repo, **opts):
     """update to child and display summary lines"""
     wkctx = repo[None]
     wparents = wkctx.parents()
@@ -1629,11 +1634,14 @@
     if len(children) == 1:
         c = children[0]
         bm = bookmarks.readcurrent(repo)
-        shouldmove = bm is not None and bookmarks.iscurrent(repo, bm)
+        shouldmove = opts.get('move_bookmark') and bm is not None
         ret = hg.update(repo, c.rev())
-        if not ret and shouldmove:
-            repo._bookmarks[bm] = c.node()
-            repo._bookmarks.write()
+        if not ret:
+            if shouldmove:
+                repo._bookmarks[bm] = c.node()
+                repo._bookmarks.write()
+            else:
+                bookmarks.unsetcurrent(repo)
         displayer.show(c)
         return 0
     else:
--- a/tests/test-prev-next.t	Tue Nov 11 12:38:49 2014 +0000
+++ b/tests/test-prev-next.t	Wed Oct 29 10:34:08 2014 -0700
@@ -5,7 +5,7 @@
   > EOF
   $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
 
-hg prev should move active bookmark
+hg prev -B should move active bookmark
   $ hg init
   $ touch a
   $ hg add a
@@ -16,31 +16,53 @@
   $ hg bookmark mark
   $ hg bookmarks
    * mark                      1:6e742c9127b3
-  $ hg prev
+  $ hg prev -B
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   [0] added a
   $ hg bookmarks
    * mark                      0:a154386e50d1
 
+hg next -B should move active bookmark
+  $ hg next -B
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [1] added b
+  $ hg bookmarks
+   * mark                      1:6e742c9127b3
+
+hg prev should unset active bookmark
+  $ hg prev
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [0] added a
+  $ hg bookmarks
+     mark                      1:6e742c9127b3
+
 hg next should move active bookmark
+  $ hg bookmark mark2
+  $ hg bookmarks
+     mark                      1:6e742c9127b3
+   * mark2                     0:a154386e50d1
   $ hg next
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   [1] added b
   $ hg bookmarks
-   * mark                      1:6e742c9127b3
+     mark                      1:6e742c9127b3
+     mark2                     0:a154386e50d1
+
+  $ hg bookmark -d mark2
+  $ hg bookmark mark
 
 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
+  $ hg prev -B
   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
+  $ hg next -B
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   [2] added c
   $ hg bookmarks
@@ -49,13 +71,13 @@
   $ hg up 1
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   (leaving bookmark mark)
-  $ hg next
+  $ hg next -B
   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
+  $ hg prev -B
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   [1] added b
   $ hg bookmarks