hgext/shelve.py
branchstable
changeset 30846 dfc6663f97ca
parent 30823 806a830e6612
child 31021 4189d790e8a4
--- a/hgext/shelve.py	Wed Jan 18 22:45:07 2017 -0800
+++ b/hgext/shelve.py	Thu Jan 19 09:48:40 2017 -0800
@@ -650,7 +650,7 @@
     # contains unknown files that are part of the pending change
     s = repo.status()
     addedbefore = frozenset(s.added)
-    if not (s.modified or s.added or s.removed or s.deleted):
+    if not (s.modified or s.added or s.removed):
         return tmpwctx, addedbefore
     ui.status(_("temporarily committing pending changes "
                 "(restore with 'hg unshelve --abort')\n"))
@@ -729,6 +729,17 @@
     repo.unfiltered().changelog.strip(oldtiprev, tr)
     _aborttransaction(repo)
 
+def _checkunshelveuntrackedproblems(ui, repo, shelvectx):
+    """Check potential problems which may result from working
+    copy having untracked changes."""
+    wcdeleted = set(repo.status().deleted)
+    shelvetouched = set(shelvectx.files())
+    intersection = wcdeleted.intersection(shelvetouched)
+    if intersection:
+        m = _("shelved change touches missing files")
+        hint = _("run hg status to see which files are missing")
+        raise error.Abort(m, hint=hint)
+
 @command('unshelve',
          [('a', 'abort', None,
            _('abort an incomplete unshelve operation')),
@@ -857,7 +868,7 @@
                                                          tmpwctx)
 
         repo, shelvectx = _unshelverestorecommit(ui, repo, basename, oldquiet)
-
+        _checkunshelveuntrackedproblems(ui, repo, shelvectx)
         branchtorestore = ''
         if shelvectx.branch() != shelvectx.p1().branch():
             branchtorestore = shelvectx.branch()