[llvm] r355122 - Add Support for Creating and Deleting Unicode Files and Directories in Lit
Serge Guelton via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 28 11:16:17 PST 2019
Author: serge_sans_paille
Date: Thu Feb 28 11:16:17 2019
New Revision: 355122
URL: http://llvm.org/viewvc/llvm-project?rev=355122&view=rev
Log:
Add Support for Creating and Deleting Unicode Files and Directories in Lit
This enables lit to work with unicode file names via mkdir, rm, and redirection.
Lit still uses utf-8 internally, but converts to utf-16 on Windows, or just utf-8
bytes on everything else.
Committed on behalf of Jason Mittertreiner
Differential Revision: https://reviews.llvm.org/D56754
Added:
llvm/trunk/utils/lit/tests/Inputs/shtest-shell/rm-unicode-0.txt
Modified:
llvm/trunk/utils/lit/lit/TestRunner.py
llvm/trunk/utils/lit/lit/util.py
llvm/trunk/utils/lit/tests/shtest-shell.py
Modified: llvm/trunk/utils/lit/lit/TestRunner.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/TestRunner.py?rev=355122&r1=355121&r2=355122&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/TestRunner.py (original)
+++ llvm/trunk/utils/lit/lit/TestRunner.py Thu Feb 28 11:16:17 2019
@@ -23,7 +23,7 @@ from lit.ShCommands import GlobItem
import lit.ShUtil as ShUtil
import lit.Test as Test
import lit.util
-from lit.util import to_bytes, to_string
+from lit.util import to_bytes, to_string, to_unicode
from lit.BooleanExpression import BooleanExpression
class InternalShellError(Exception):
@@ -344,8 +344,11 @@ def executeBuiltinMkdir(cmd, cmd_shenv):
stderr = StringIO()
exitCode = 0
for dir in args:
+ cwd = cmd_shenv.cwd
+ dir = to_unicode(dir) if kIsWindows else to_bytes(dir)
+ cwd = to_unicode(cwd) if kIsWindows else to_bytes(cwd)
if not os.path.isabs(dir):
- dir = os.path.realpath(os.path.join(cmd_shenv.cwd, dir))
+ dir = os.path.realpath(os.path.join(cwd, dir))
if parent:
lit.util.mkdir_p(dir)
else:
@@ -598,8 +601,11 @@ def executeBuiltinRm(cmd, cmd_shenv):
stderr = StringIO()
exitCode = 0
for path in args:
+ cwd = cmd_shenv.cwd
+ path = to_unicode(path) if kIsWindows else to_bytes(path)
+ cwd = to_unicode(cwd) if kIsWindows else to_bytes(cwd)
if not os.path.isabs(path):
- path = os.path.realpath(os.path.join(cmd_shenv.cwd, path))
+ path = os.path.realpath(os.path.join(cwd, path))
if force and not os.path.exists(path):
continue
try:
@@ -695,6 +701,8 @@ def processRedirects(cmd, stdin_source,
else:
# Make sure relative paths are relative to the cwd.
redir_filename = os.path.join(cmd_shenv.cwd, name)
+ redir_filename = to_unicode(redir_filename) \
+ if kIsWindows else to_bytes(redir_filename)
fd = open(redir_filename, mode)
# Workaround a Win32 and/or subprocess bug when appending.
#
@@ -1096,11 +1104,14 @@ def executeScript(test, litConfig, tmpBa
for i, ln in enumerate(commands):
commands[i] = re.sub(kPdbgRegex, ": '\\1'; ", ln)
if test.config.pipefail:
- f.write('set -o pipefail;')
+ f.write(b'set -o pipefail;' if mode == 'wb' else 'set -o pipefail;')
if litConfig.echo_all_commands:
- f.write('set -x;')
- f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
- f.write('\n')
+ f.write(b'set -x;' if mode == 'wb' else 'set -x;')
+ if sys.version_info > (3,0) and mode == 'wb':
+ f.write(bytes('{ ' + '; } &&\n{ '.join(commands) + '; }', 'utf-8'))
+ else:
+ f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
+ f.write(b'\n' if mode == 'wb' else '\n')
f.close()
if isWin32CMDEXE:
Modified: llvm/trunk/utils/lit/lit/util.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/util.py?rev=355122&r1=355121&r2=355122&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/util.py (original)
+++ llvm/trunk/utils/lit/lit/util.py Thu Feb 28 11:16:17 2019
@@ -102,6 +102,20 @@ def to_string(b):
raise TypeError('not sure how to convert %s to %s' % (type(b), str))
+def to_unicode(s):
+ """Return the parameter as type which supports unicode, possibly decoding
+ it.
+
+ In Python2, this is the unicode type. In Python3 it's the str type.
+
+ """
+ if isinstance(s, bytes):
+ # In Python2, this branch is taken for both 'str' and 'bytes'.
+ # In Python3, this branch is taken only for 'bytes'.
+ return s.decode('utf-8')
+ return s
+
+
def detectCPUs():
"""Detects the number of CPUs on a system.
Added: llvm/trunk/utils/lit/tests/Inputs/shtest-shell/rm-unicode-0.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-shell/rm-unicode-0.txt?rev=355122&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/shtest-shell/rm-unicode-0.txt (added)
+++ llvm/trunk/utils/lit/tests/Inputs/shtest-shell/rm-unicode-0.txt Thu Feb 28 11:16:17 2019
@@ -0,0 +1,7 @@
+# Check removing unicode
+#
+# RUN: mkdir -p Output/ä¸æ
+# RUN: echo "" > Output/ä¸æ/ä½ å¥½.txt
+# RUN: rm Output/ä¸æ/ä½ å¥½.txt
+# RUN: echo "" > Output/ä¸æ/ä½ å¥½.txt
+# RUN: rm -r Output/ä¸æ
Modified: llvm/trunk/utils/lit/tests/shtest-shell.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/shtest-shell.py?rev=355122&r1=355121&r2=355122&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/shtest-shell.py (original)
+++ llvm/trunk/utils/lit/tests/shtest-shell.py Thu Feb 28 11:16:17 2019
@@ -224,6 +224,7 @@
# CHECK: Exit Code: 1
# CHECK: ***
+# CHECK: PASS: shtest-shell :: rm-unicode-0.txt
# CHECK: PASS: shtest-shell :: sequencing-0.txt
# CHECK: XFAIL: shtest-shell :: sequencing-1.txt
# CHECK: PASS: shtest-shell :: valid-shell.txt
More information about the llvm-commits
mailing list