Patchwork [evolve-ext-V3] prune: with active bookmark should stay active

login
register
mail settings
Submitter Laurent Charignon
Date May 19, 2015, 7:22 p.m.
Message ID <54e15e4b6afc6be43552.1432063361@lcharignon-mbp.local>
Download mbox | patch
Permalink /patch/9186/
State Accepted
Headers show

Comments

Laurent Charignon - May 19, 2015, 7:22 p.m.
# HG changeset patch
# User Laurent Charignon <lcharignon@fb.com>
# Date 1431995078 25200
#      Mon May 18 17:24:38 2015 -0700
# Branch stable
# Node ID 54e15e4b6afc6be435520ca244b1d0656ed2363e
# Parent  f455ce2a3587f9f298aae61665be0027843bcfeb
prune: with active bookmark should stay active

hg prune with an active bookmark was deactivating the bookmark after the prune.
This patch makes sure that  if a bookmark was active before a "prune" operation
(except prune -B) then the bookmark stays activate afterwards.
Pierre-Yves David - May 19, 2015, 9:02 p.m.
On 05/19/2015 02:22 PM, Laurent Charignon wrote:
> # HG changeset patch
> # User Laurent Charignon <lcharignon@fb.com>
> # Date 1431995078 25200
> #      Mon May 18 17:24:38 2015 -0700
> # Branch stable
> # Node ID 54e15e4b6afc6be435520ca244b1d0656ed2363e
> # Parent  f455ce2a3587f9f298aae61665be0027843bcfeb
> prune: with active bookmark should stay active
>
> hg prune with an active bookmark was deactivating the bookmark after the prune.
> This patch makes sure that  if a bookmark was active before a "prune" operation
> (except prune -B) then the bookmark stays activate afterwards.

I've taken this. The merge with default, conflict in a way that seems to 
imply we do not handle the bookmark properly with --keep. Can you 
provide me a merge to pull and a patch that test/handle the --keep case.

Patch

diff --git a/hgext/evolve.py b/hgext/evolve.py
--- a/hgext/evolve.py
+++ b/hgext/evolve.py
@@ -1808,8 +1808,20 @@ 
                 newnode = newnode.parents()[0]
 
         if newnode.node() != wdp.node():
+            bookactive = bmactive(repo)
+            # Active bookmark that we don't want to delete (with -B option)
+            # we deactivate and move it before the update and reactivate it
+            # after
+            movebookmark = bookactive and not bookmark
+            if movebookmark:
+                bookmarks.deactivate(repo)
+                repo._bookmarks[bookactive] = newnode.node()
+                repo._bookmarks.write()
             commands.update(ui, repo, newnode.rev())
             ui.status(_('working directory now at %s\n') % newnode)
+            if movebookmark:
+                bookmarks.activate(repo, bookactive)
+
         # update bookmarks
         if bookmark:
             _deletebookmark(ui, marks, bookmark)
diff --git a/tests/test-prune.t b/tests/test-prune.t
--- a/tests/test-prune.t
+++ b/tests/test-prune.t
@@ -40,8 +40,9 @@ 
   $ hg prune --user blah --date '1979-12-15' .
   1 changesets pruned
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  (leaving bookmark BABAR)
   working directory now at 47d2a3944de8
+  $ hg bookmark
+   * BABAR                     3:47d2a3944de8
   $ hg debugobsolete
   9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'user': 'blah'}
 
@@ -50,6 +51,7 @@ 
   $ hg prune 1
   1 changesets pruned
   2 new unstable changesets
+  $ hg book -i BABAR
   $ hg debugobsolete
   9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'user': 'blah'}
   7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {1f0dee641bb7258c56bd60e93edfa2405381c41e} (*) {'user': 'test'} (glob)