unshelve: delete shelvedstate after a successful unshelve --continue
authorNavaneeth Suresh <navaneeths1998@gmail.com>
Thu, 25 Jul 2019 22:01:15 +0530
changeset 42703 073cfff9aaef
parent 42702 4814d993fe21
child 42704 6957f7b93e03
unshelve: delete shelvedstate after a successful unshelve --continue `unshelve --continue` was preventing the deletion of `shelvedstate` on a partial `unshelve`. Ideally, `shelvedstate` should be deleted after a successful `unshelve`. Now, the behavior of `unshelve --continue` will be as follows in interactive mode: 1] The user tried to `unshelve` changes interactively but, ran into conflicts. 2] They resolved the conflicts and triggered `unshelve --continue` but, unshelved changes partially. 3] Now, on trying to do `unshelve --continue` again will abort as the last `unshelve` was successful and we are deleting the `shelvedstate`. 4] If they want to unshelve the remaining shelved change, they need to trigger `unshelve` without `--continue`. Differential Revision: https://phab.mercurial-scm.org/D6694
mercurial/shelve.py
tests/test-shelve.t
--- a/mercurial/shelve.py	Wed Jul 24 18:15:27 2019 +0530
+++ b/mercurial/shelve.py	Thu Jul 25 22:01:15 2019 +0530
@@ -750,8 +750,8 @@
         if not phases.supportinternal(repo):
             repair.strip(ui, repo, state.nodestoremove, backup=False,
                          topic='shelve')
+        shelvedstate.clear(repo)
         if not ispartialunshelve:
-            shelvedstate.clear(repo)
             unshelvecleanup(ui, repo, state.name, opts)
         _restoreactivebookmark(repo, state.activebookmark)
         ui.status(_("unshelve of '%s' complete\n") % state.name)
--- a/tests/test-shelve.t	Wed Jul 24 18:15:27 2019 +0530
+++ b/tests/test-shelve.t	Thu Jul 25 22:01:15 2019 +0530
@@ -1425,3 +1425,29 @@
      summary:     add A to bars
   
 #endif
+
+  $ hg unshelve --continue
+  abort: no unshelve in progress
+  [255]
+
+  $ hg shelve --list
+  default-01      (*)* changes to: add A to bars (glob)
+  default         (*)* changes to: add B to foo (glob)
+  $ hg unshelve -n default-01 -i <<EOF
+  > y
+  > y
+  > EOF
+  temporarily committing pending changes (restore with 'hg unshelve --abort')
+  rebasing shelved changes
+  diff --git a/bar2 b/bar2
+  1 hunks, 1 lines changed
+  examine changes to 'bar2'?
+  (enter ? for help) [Ynesfdaq?] y
+  
+  @@ -1,2 +1,3 @@
+   A
+  +B
+   C
+  record this change to 'bar2'?
+  (enter ? for help) [Ynesfdaq?] y
+