mercurial/posix.py
changeset 32432 38a2b9d90131
parent 32331 bd872f64a8ba
child 32741 c2cb0de25120
--- a/mercurial/posix.py	Fri May 19 20:14:31 2017 -0700
+++ b/mercurial/posix.py	Sun May 21 18:36:28 2017 -0400
@@ -244,7 +244,17 @@
                 # create a fixed file to link to; doesn't matter if it
                 # already exists.
                 target = 'checklink-target'
-                open(os.path.join(cachedir, target), 'w').close()
+                try:
+                    open(os.path.join(cachedir, target), 'w').close()
+                except IOError as inst:
+                    if inst[0] == errno.EACCES:
+                        # If we can't write to cachedir, just pretend
+                        # that the fs is readonly and by association
+                        # that the fs won't support symlinks. This
+                        # seems like the least dangerous way to avoid
+                        # data loss.
+                        return False
+                    raise
             try:
                 os.symlink(target, name)
                 if cachedir is None: