# HG changeset patch # User Yuya Nishihara # Date 1490430323 -32400 # Node ID 1ed57a7dd904f8b79f79ecb4ea6fe1871e7af740 # Parent 58d4622bc1ef1f7dfc413308ace29f110bb211e0 statfs: make getfstype() raise OSError It's better for getfstype() function to not suppress an error. Callers can handle it as necessary. Now "hg debugfsinfo" will report OSError. diff -r 58d4622bc1ef -r 1ed57a7dd904 mercurial/osutil.c --- a/mercurial/osutil.c Sat Mar 25 17:24:11 2017 +0900 +++ b/mercurial/osutil.c Sat Mar 25 17:25:23 2017 +0900 @@ -1106,7 +1106,7 @@ memset(&buf, 0, sizeof(buf)); r = statfs(path, &buf); if (r != 0) - Py_RETURN_NONE; + return PyErr_SetFromErrno(PyExc_OSError); return Py_BuildValue("s", describefstype(&buf)); } #endif /* defined(HAVE_LINUX_STATFS) || defined(HAVE_BSD_STATFS) */ diff -r 58d4622bc1ef -r 1ed57a7dd904 mercurial/util.py --- a/mercurial/util.py Sat Mar 25 17:24:11 2017 +0900 +++ b/mercurial/util.py Sat Mar 25 17:25:23 2017 +0900 @@ -1089,7 +1089,10 @@ if hardlink: # Hardlinks are problematic on CIFS (issue4546), do not allow hardlinks # unless we are confident that dest is on a whitelisted filesystem. - fstype = getfstype(os.path.dirname(dest)) + try: + fstype = getfstype(os.path.dirname(dest)) + except OSError: + fstype = None if fstype not in _hardlinkfswhitelist: hardlink = False if hardlink: @@ -1372,7 +1375,7 @@ def getfstype(dirpath): '''Get the filesystem type name from a directory (best-effort) - Returns None if we are unsure, or errors like ENOENT, EPERM happen. + Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc. ''' return getattr(osutil, 'getfstype', lambda x: None)(dirpath) diff -r 58d4622bc1ef -r 1ed57a7dd904 tests/hghave.py --- a/tests/hghave.py Sat Mar 25 17:24:11 2017 +0900 +++ b/tests/hghave.py Sat Mar 25 17:25:23 2017 +0900 @@ -349,7 +349,10 @@ @check("hardlink-whitelisted", "hardlinks on whitelisted filesystems") def has_hardlink_whitelisted(): from mercurial import util - fstype = util.getfstype('.') + try: + fstype = util.getfstype('.') + except OSError: + return False return fstype in util._hardlinkfswhitelist @check("rmcwd", "can remove current working directory")