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
--- 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
+