[PATCH] checklink: degrade gracefully on posix when fs is readonly (issue5511)
Augie Fackler
raf at durin42.com
Sun May 21 22:39:41 UTC 2017
# HG changeset patch
# User Augie Fackler <augie at google.com>
# Date 1495406188 14400
# Sun May 21 18:36:28 2017 -0400
# Branch stable
# Node ID 3bb12473b0f69a5f23c384ef45b6d995d6a1c662
# Parent 99515353c72a4c54e4aac1a2ad4f8f724c7fdc9c
checklink: degrade gracefully on posix when fs is readonly (issue5511)
In the unlucky case, checklink tries to make a new file for the
symlink test to target. If the filesystem is readonly (perhaps due to
permissions in a repo owned by someone else) we just report the
filesystem as not supporting symlinks, since the user probably can't
write anyway.
diff --git a/mercurial/posix.py b/mercurial/posix.py
--- a/mercurial/posix.py
+++ b/mercurial/posix.py
@@ -244,7 +244,17 @@ def checklink(path):
# 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:
More information about the Mercurial-devel
mailing list