Patchwork [3,of,3] shelve: copy bookmarks and restore them after a commit

login
register
mail settings
Submitter David Soria Parra
Date Oct. 3, 2013, 2:47 p.m.
Message ID <9e7613f80b09e92726b8.1380811664@achird.localdomain>
Download mbox | patch
Permalink /patch/2725/
State Superseded
Commit 5836edcbdc2e4c5bd97a50db512191b98c2d69d8
Headers show

Comments

David Soria Parra - Oct. 3, 2013, 2:47 p.m.
# HG changeset patch
# User David Soria Parra <dsp@experimentalworks.net>
# Date 1380806188 -7200
#      Thu Oct 03 15:16:28 2013 +0200
# Node ID 9e7613f80b09e92726b81adb8b267bf93aec2ff0
# Parent  a9c81ba427312f5b0eb0c6f18ead265a89d87623
shelve: copy bookmarks and restore them after a commit

cmdutil.commit() will advance the bookmarks. Therefore we have to restore
them afterwards.
Durham Goode - Oct. 3, 2013, 5:31 p.m.
On 10/3/13 7:47 AM, "David Soria Parra" <dsp@experimentalworks.net> wrote:

>         ui.status(_('shelved as %s\n') % name)
>         hg.update(repo, parent.node())
>     finally:
>+        if bms:
>+            # restore old bookmarks
>+            bms.write()

Do you need to restore the in-memory repo._bookmarks as well?  Just in
case the shelve function is ever called from another extension.  A quick
test seems to show me that editing .hg/bookmarks doesn't automatically
cause repo._bookmarks to refresh.

It'd also be nice if bookmarks were treated as part of the normal
transaction.  But that's probably out of the scope of this change.
David Soria Parra - Oct. 3, 2013, 5:39 p.m.
On 10/03/2013 07:31 PM, Durham Goode wrote:
> On 10/3/13 7:47 AM, "David Soria Parra" <dsp@experimentalworks.net> wrote:
> 
>>         ui.status(_('shelved as %s\n') % name)
>>         hg.update(repo, parent.node())
>>     finally:
>> +        if bms:
>> +            # restore old bookmarks
>> +            bms.write()
> 
> Do you need to restore the in-memory repo._bookmarks as well?  Just in
> case the shelve function is ever called from another extension.  A quick
> test seems to show me that editing .hg/bookmarks doesn't automatically
> cause repo._bookmarks to refresh.

yes i'll sent a follow-up patch.
> 
> It'd also be nice if bookmarks were treated as part of the normal
> transaction.  But that's probably out of the scope of this change.
> 

that would be ideal

Patch

diff --git a/hgext/shelve.py b/hgext/shelve.py
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -172,11 +172,12 @@ 
 
     name = opts['name']
 
-    wlock = lock = tr = None
+    wlock = lock = tr = bms = None
     try:
         wlock = repo.wlock()
         lock = repo.lock()
 
+        bms = repo._bookmarks.copy()
         # use an uncommited transaction to generate the bundle to avoid
         # pull races. ensure we don't print the abort message to stderr.
         tr = repo.transaction('commit', report=lambda x: None)
@@ -224,11 +225,15 @@ 
                        fp=shelvedfile(repo, name, 'patch').opener('wb'),
                        opts=mdiff.diffopts(git=True))
 
+
         if ui.formatted():
             desc = util.ellipsis(desc, ui.termwidth())
         ui.status(_('shelved as %s\n') % name)
         hg.update(repo, parent.node())
     finally:
+        if bms:
+            # restore old bookmarks
+            bms.write()
         if tr:
             tr.abort()
         lockmod.release(lock, wlock)
diff --git a/tests/test-shelve.t b/tests/test-shelve.t
--- a/tests/test-shelve.t
+++ b/tests/test-shelve.t
@@ -418,3 +418,23 @@ 
   default         (*)    create conflict (glob)
   $ hg shelve --cleanup
   $ hg shelve --list
+
+test bookmarks
+
+  $ hg bookmark test
+  $ hg bookmark
+   * test                      5:01ba9745dc5a
+  $ hg shelve
+  shelved as test
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg bookmark
+   * test                      5:01ba9745dc5a
+  $ hg unshelve
+  unshelving change 'test'
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 7 files
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg bookmark
+   * test                      5:01ba9745dc5a