D6694: unshelve: fix bug on a partial unshelve with --continue

navaneeth.suresh (Navaneeth Suresh) phabricator at mercurial-scm.org
Thu Jul 25 12:33:33 EDT 2019


navaneeth.suresh created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  `unshelve --continue` after a partial unshelve was not working
  before. This patch makes that to work.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6694

AFFECTED FILES
  mercurial/shelve.py
  tests/test-shelve.t

CHANGE DETAILS

diff --git a/tests/test-shelve.t b/tests/test-shelve.t
--- a/tests/test-shelve.t
+++ b/tests/test-shelve.t
@@ -1355,7 +1355,7 @@
   > y
   > y
   > y
-  > y
+  > n
   > EOF
   diff --git a/bar1 b/bar1
   1 hunks, 1 lines changed
@@ -1379,6 +1379,23 @@
   +B
    C
   record change 2/2 to 'bar2'?
+  (enter ? for help) [Ynesfdaq?] n
+  
+  unshelve of 'default-01' complete
+  $ hg unshelve --continue <<EOF
+  > y
+  > y
+  > EOF
+  diff --git a/bar1 b/bar1
+  1 hunks, 1 lines changed
+  examine changes to 'bar1'?
+  (enter ? for help) [Ynesfdaq?] y
+  
+  @@ -1,2 +1,3 @@
+   A
+  +B
+   C
+  record this change to 'bar1'?
   (enter ? for help) [Ynesfdaq?] y
   
   unshelve of 'default-01' complete
diff --git a/mercurial/shelve.py b/mercurial/shelve.py
--- a/mercurial/shelve.py
+++ b/mercurial/shelve.py
@@ -753,6 +753,15 @@
                             topic='shelve')
             shelvedstate.clear(repo)
             unshelvecleanup(ui, repo, state.name, opts)
+        else:
+            # This is tricky. The function call might seems to be not useful.
+            # But, we do update state.parents here. Otherwise, checkparents()
+            # will fail.
+            shelvedstate.save(repo, basename, shelvectx.p1(),
+                              state.pendingctx, state.nodestoremove,
+                              state.branchtorestore, state.keep,
+                              state.activebookmark,
+                              interactive)
         _restoreactivebookmark(repo, state.activebookmark)
         ui.status(_("unshelve of '%s' complete\n") % state.name)
 
@@ -812,6 +821,12 @@
     bool to know whether the shelve is partly done or completely done.
     """
     opts['message'] = shelvectx.description()
+    if not opts['message']:
+        # On doing a parial unshelve with --continue interactive, the commit
+        # description is empty. To avoid aborting on that, we set a commit
+        # message.
+        opts['message'] = ('changes to: %s' %
+                           shelvectx.p1().description().split('\n', 1)[0])
     opts['interactive-unshelve'] = True
     pats = []
     if not interactive:



To: navaneeth.suresh, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list