shelve: copy bookmarks and restore them after a commit
authorDavid Soria Parra <dsp@experimentalworks.net>
Thu, 03 Oct 2013 19:41:25 +0200
changeset 19874 5836edcbdc2e
parent 19873 b3de50b0c7aa
child 19876 7032dcff290c
shelve: copy bookmarks and restore them after a commit cmdutil.commit() will advance the bookmarks. Therefore we have to restore them afterwards. We have to use update() to ensure we preserve the bmstore object.
hgext/shelve.py
tests/test-shelve.t
--- a/hgext/shelve.py	Thu Oct 03 14:50:47 2013 +0200
+++ b/hgext/shelve.py	Thu Oct 03 19:41:25 2013 +0200
@@ -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,16 @@
                        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
+            repo._bookmarks.update(bms)
+            repo._bookmarks.write()
         if tr:
             tr.abort()
         lockmod.release(lock, wlock)
--- a/tests/test-shelve.t	Thu Oct 03 14:50:47 2013 +0200
+++ b/tests/test-shelve.t	Thu Oct 03 19:41:25 2013 +0200
@@ -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