Mercurial > hg
changeset 5420:6d1bd20ae14d
Execution bit detection fixes for VFAT on Linux
On Linux VFAT execution mode can be modified, but changes don't
persist a filesy stem remount. The current test can be trickled by
this. We can help with the det ection of VFAT checking whether new
files get created with the execution bits on
(as usually these partitions are mounted with the exec option, for
convenience)
.
author | Rafael Villar Burke <pachi@rvburke.com> |
---|---|
date | Fri, 05 Oct 2007 01:52:53 +0200 |
parents | 041bd297f01e |
children | 9b5d626be8ba |
files | mercurial/util.py |
diffstat | 1 files changed, 7 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/util.py Wed Sep 12 12:54:36 2007 +0200 +++ b/mercurial/util.py Fri Oct 05 01:52:53 2007 +0200 @@ -851,16 +851,20 @@ Requires a directory (like /foo/.hg) """ try: + EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH fh, fn = tempfile.mkstemp("", "", path) os.close(fh) m = os.stat(fn).st_mode - os.chmod(fn, m ^ 0111) - r = (os.stat(fn).st_mode != m) + # VFAT on Linux can flip mode but it doesn't persist a FS remount. + # frequently we can detect it if files are created with exec bit on. + new_file_has_exec = m & EXECFLAGS + os.chmod(fn, m ^ EXECFLAGS) + exec_flags_cannot_flip = (os.stat(fn).st_mode == m) os.unlink(fn) except (IOError,OSError): # we don't care, the user probably won't be able to commit anyway return False - return r + return not (new_file_has_exec or exec_flags_cannot_flip) def execfunc(path, fallback): '''return an is_exec() function with default to fallback'''