changeset 31634:35738db2037a

debugfsinfo: improve case-sensitive testing Previously the case-sensitive test was for the current directory, and is fragile with errors, and could remove a real file called ".debugfsinfo". This patch improves the case-sensitive testing so it test the given path using a unique temporary file, and does not crash on errors.
author Jun Wu <quark@fb.com>
date Sun, 26 Mar 2017 17:59:33 -0700
parents 5b3d55a6821f
children 632e07e72a22
files mercurial/debugcommands.py
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/debugcommands.py	Sun Mar 26 17:29:37 2017 -0700
+++ b/mercurial/debugcommands.py	Sun Mar 26 17:59:33 2017 -0700
@@ -788,14 +788,17 @@
 @command('debugfsinfo', [], _('[PATH]'), norepo=True)
 def debugfsinfo(ui, path="."):
     """show information detected about current filesystem"""
-    util.writefile('.debugfsinfo', '')
     ui.write(('exec: %s\n') % (util.checkexec(path) and 'yes' or 'no'))
     ui.write(('fstype: %s\n') % (util.getfstype(path) or '(unknown)'))
     ui.write(('symlink: %s\n') % (util.checklink(path) and 'yes' or 'no'))
     ui.write(('hardlink: %s\n') % (util.checknlink(path) and 'yes' or 'no'))
-    ui.write(('case-sensitive: %s\n') % (util.fscasesensitive('.debugfsinfo')
-                                and 'yes' or 'no'))
-    util.tryunlink('.debugfsinfo')
+    casesensitive = '(unknown)'
+    try:
+        with tempfile.NamedTemporaryFile(prefix='.debugfsinfo', dir=path) as f:
+            casesensitive = util.fscasesensitive(f.name) and 'yes' or 'no'
+    except OSError:
+        pass
+    ui.write(('case-sensitive: %s\n') % casesensitive)
 
 @command('debuggetbundle',
     [('H', 'head', [], _('id of head node'), _('ID')),