hgext/shelve.py
changeset 30522 7b3136bc7bfd
parent 30457 893be22cdb38
child 30542 64b55bffc1c0
--- a/hgext/shelve.py	Thu Nov 24 01:15:34 2016 +0000
+++ b/hgext/shelve.py	Wed Nov 23 14:58:52 2016 -0800
@@ -159,6 +159,8 @@
     """
     _version = 1
     _filename = 'shelvedstate'
+    _keep = 'keep'
+    _nokeep = 'nokeep'
 
     @classmethod
     def load(cls, repo):
@@ -175,6 +177,7 @@
             parents = [nodemod.bin(h) for h in fp.readline().split()]
             stripnodes = [nodemod.bin(h) for h in fp.readline().split()]
             branchtorestore = fp.readline().strip()
+            keep = fp.readline().strip() == cls._keep
         except (ValueError, TypeError) as err:
             raise error.CorruptedState(str(err))
         finally:
@@ -188,6 +191,7 @@
             obj.parents = parents
             obj.stripnodes = stripnodes
             obj.branchtorestore = branchtorestore
+            obj.keep = keep
         except error.RepoLookupError as err:
             raise error.CorruptedState(str(err))
 
@@ -195,7 +199,7 @@
 
     @classmethod
     def save(cls, repo, name, originalwctx, pendingctx, stripnodes,
-             branchtorestore):
+             branchtorestore, keep=False):
         fp = repo.vfs(cls._filename, 'wb')
         fp.write('%i\n' % cls._version)
         fp.write('%s\n' % name)
@@ -206,6 +210,7 @@
         fp.write('%s\n' %
                  ' '.join([nodemod.hex(n) for n in stripnodes]))
         fp.write('%s\n' % branchtorestore)
+        fp.write('%s\n' % (cls._keep if keep else cls._nokeep))
         fp.close()
 
     @classmethod
@@ -680,7 +685,7 @@
         stripnodes = [repo.changelog.node(rev)
                       for rev in xrange(oldtiprev, len(repo))]
         shelvedstate.save(repo, basename, pctx, tmpwctx, stripnodes,
-                          branchtorestore)
+                          branchtorestore, opts.get('keep'))
 
         util.rename(repo.join('rebasestate'),
                     repo.join('unshelverebasestate'))
@@ -782,6 +787,8 @@
 
         try:
             state = shelvedstate.load(repo)
+            if opts.get('keep') is None:
+                opts['keep'] = state.keep
         except IOError as err:
             if err.errno != errno.ENOENT:
                 raise