mercurial/posix.py
branchstable
changeset 40670 bd0874977a5e
parent 39904 5fe0b880200e
child 40792 47e3f554df35
--- a/mercurial/posix.py	Thu Nov 15 22:59:38 2018 +0900
+++ b/mercurial/posix.py	Thu Nov 15 03:09:23 2018 +0100
@@ -181,7 +181,22 @@
 
     try:
         EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
-        cachedir = os.path.join(path, '.hg', 'cache')
+        basedir = os.path.join(path, '.hg')
+        cachedir = os.path.join(basedir, 'cache')
+        storedir = os.path.join(basedir, 'store')
+        if not os.path.exists(cachedir):
+            try:
+                # we want to create the 'cache' directory, not the '.hg' one.
+                # Automatically creating '.hg' directory could silently spawn
+                # invalid Mercurial repositories. That seems like a bad idea.
+                os.mkdir(cachedir)
+                if os.path.exists(storedir):
+                    copymode(storedir, cachedir)
+                else:
+                    copymode(basedir, cachedir)
+            except (IOError, OSError):
+                # we other fallback logic triggers
+                pass
         if os.path.isdir(cachedir):
             checkisexec = os.path.join(cachedir, 'checkisexec')
             checknoexec = os.path.join(cachedir, 'checknoexec')