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

navaneeth.suresh (Navaneeth Suresh) phabricator at mercurial-scm.org
Fri Jul 26 07:50:09 EDT 2019


navaneeth.suresh updated this revision to Diff 16071.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6694?vs=16066&id=16071

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6694/new/

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
@@ -1419,3 +1419,21 @@
      summary:     add A to bars
   
 #endif
+
+  $ 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 @@
         if not ispartialunshelve:
             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, [nodemod.nullid],
+                              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