Mercurial > hg
changeset 32394:38a2b9d90131
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.
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 21 May 2017 18:36:28 -0400 |
parents | d47b62368f3a |
children | 24245b54aa8a |
files | mercurial/posix.py |
diffstat | 1 files changed, 11 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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: