# HG changeset patch
# User Boris Feld <boris.f...@octobus.net>
# Date 1528239442 -7200
#      Wed Jun 06 00:57:22 2018 +0200
# Node ID d5637aa69a9f7ce23cf89e4790b6a988725219c3
# Parent  f36b6c860bb59c43de8ee80a9dbe6abadef21fe9
# EXP-Topic internal-phase
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 
d5637aa69a9f
shelve: look for shelved not in the repository before unbundling

This prepare version of shelve that would not strip the shelved node from the
repository. If we have the node information, search for it in the repository and
only fallback on unbundling if it is missing.

To be able to find such node, we operate on an unfiltered repository.

diff --git a/hgext/shelve.py b/hgext/shelve.py
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -755,9 +755,15 @@ def _commitworkingcopychanges(ui, repo, 
 def _unshelverestorecommit(ui, repo, basename):
     """Recreate commit in the repository during the unshelve"""
     repo = repo.unfiltered()
-    with ui.configoverride({('ui', 'quiet'): True}):
-        shelvedfile(repo, basename, 'hg').applybundle()
+    if shelvedfile(repo, basename, 'shelve').exists():
+        node = shelvedfile(repo, basename, 'shelve').readinfo()['node']
+    if node is None or node not in repo:
+        with ui.configoverride({('ui', 'quiet'): True}):
+            shelvedfile(repo, basename, 'hg').applybundle()
         shelvectx = repo['tip']
+    else:
+        shelvectx = repo[node]
+
     return repo, shelvectx
 
 def _rebaserestoredcommit(ui, repo, opts, tr, oldtiprev, basename, pctx,
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to