[PATCH V3] update: warn if cwd was deleted

Stanislau Hlebik stash at fb.com
Mon Sep 5 10:32:09 UTC 2016


# HG changeset patch
# User Stanislau Hlebik <stash at fb.com>
# Date 1473071480 25200
#      Mon Sep 05 03:31:20 2016 -0700
# Node ID b43aa94306b8f50852a8176afec3839aa3826467
# Parent  f148bfa40489269be2e48046734f81065129847a
update: warn if cwd was deleted

During update directories are deleted as soon as they have no entries.
But if current working directory is deleted then it cause problems
in complex commands like 'hg split'. This commit adds a warning
that will help users figure the problem faster.

diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -1043,7 +1043,20 @@
             repo.ui.note(_("removing %s\n") % f)
         audit(f)
         try:
-            unlink(wjoin(f), ignoremissing=True)
+            try:
+                cwd = os.getcwd()
+            except OSError:
+                cwd = None
+            path = wjoin(f)
+            unlink(path, ignoremissing=True)
+            try:
+                os.getcwd()
+            except OSError:
+                # Print a warning if cwd was deleted
+                if cwd and path.startswith(cwd):
+                    repo.ui.warn(_("cwd was deleted - consider "
+                                   "changing cwd to repo root %s\n") %
+                                 repo.root)
         except OSError as inst:
             repo.ui.warn(_("update failed to remove %s: %s!\n") %
                          (f, inst.strerror))
diff --git a/tests/test-rebase-scenario-global.t b/tests/test-rebase-scenario-global.t
--- a/tests/test-rebase-scenario-global.t
+++ b/tests/test-rebase-scenario-global.t
@@ -758,6 +758,7 @@
   $ hg commit -m 'second source with subdir'
   $ hg rebase -b . -d 1 --traceback
   rebasing 2:779a07b1b7a0 "first source commit"
+  cwd was deleted - consider changing cwd to repo root * (glob)
   rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
   saved backup bundle to $TESTTMP/cwd-vanish/.hg/strip-backup/779a07b1b7a0-853e0073-backup.hg (glob)
 
diff --git a/tests/test-update-names.t b/tests/test-update-names.t
--- a/tests/test-update-names.t
+++ b/tests/test-update-names.t
@@ -72,3 +72,14 @@
   $ cd ..
 
 #endif
+
+Test that warning is printed if cwd is deleted during update
+  $ hg init r4 && cd r4
+  $ mkdir dir
+  $ cd dir
+  $ echo a > a
+  $ echo b > b
+  $ hg add a b
+  $ hg ci -m "file and dir"
+  $ hg up -q null
+  cwd was deleted - consider changing cwd to repo root * (glob)


More information about the Mercurial-devel mailing list