[𝘀𝗽𝗿] changes introduced through rebase
Created using spr 1.3.6
[skip ci]
diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py
index 1946243..53eeb2f 100644
--- a/llvm/utils/lit/lit/TestRunner.py
+++ b/llvm/utils/lit/lit/TestRunner.py
@@ -720,7 +720,7 @@
return std_fds
-def _expandLateSubstitutions(arguments, cwd):
+def _expandLateSubstitutions(cmd, arguments, cwd):
for i, arg in enumerate(arguments):
if not isinstance(arg, str):
continue
@@ -729,8 +729,11 @@
filePath = match.group(1)
if not os.path.isabs(filePath):
filePath = os.path.join(cwd, filePath)
- with open(filePath) as fileHandle:
- return fileHandle.read()
+ try:
+ with open(filePath) as fileHandle:
+ return fileHandle.read()
+ except FileNotFoundError:
+ raise InternalShellError(cmd, "File does not exist: %s" % filePath)
arguments[i] = re.sub(r"%{readfile:([^}]*)}", _replaceReadFile, arg)
@@ -852,7 +855,7 @@
args[0] = expand_glob(args[0], cmd_shenv.cwd)[0]
# Expand all late substitutions.
- args = _expandLateSubstitutions(args, cmd_shenv.cwd)
+ args = _expandLateSubstitutions(j, args, cmd_shenv.cwd)
inproc_builtin = inproc_builtins.get(args[0], None)
if inproc_builtin and (args[0] != "echo" or len(cmd.commands) == 1):
@@ -2409,6 +2412,20 @@
status, output, attempts=i + 1, max_allowed_attempts=attempts
)
+def _expandLateSubstitutionsExternal(commandLine):
+ filePaths = []
+ def _replaceReadFile(match):
+ filePath = match.group(1)
+ filePaths.append(filePath)
+ return "$(cat %s)" % filePath
+
+ commandLine = re.sub(r"%{readfile:([^}]*)}", _replaceReadFile, commandLine)
+ # Add test commands before the command to check if the file exists as
+ # cat inside a subshell will never return a non-zero exit code outside
+ # of the subshell.
+ for filePath in filePaths:
+ commandLine = "%s && test -e %s" % (commandLine, filePath)
+ return commandLine
def executeShTest(
test, litConfig, useExternalSh, extra_substitutions=[], preamble_commands=[]
@@ -2440,4 +2457,8 @@
recursion_limit=test.config.recursiveExpansionLimit,
)
+ if useExternalSh:
+ for index, command in enumerate(script):
+ script[index] = _expandLateSubstitutionsExternal(command)
+
return _runShTest(test, litConfig, useExternalSh, script, tmpBase)
diff --git a/llvm/utils/lit/tests/Inputs/shtest-readfile/file-does-not-exist.txt b/llvm/utils/lit/tests/Inputs/shtest-readfile/file-does-not-exist.txt
new file mode 100644
index 0000000..1151b75
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/shtest-readfile/file-does-not-exist.txt
@@ -0,0 +1,4 @@
+## Test that readfile reports information appropriately when the file specified
+## does not exist.
+
+# RUN: echo %{readfile:/file/does/not/exist}
diff --git a/llvm/utils/lit/tests/Inputs/shtest-readfile/lit.cfg b/llvm/utils/lit/tests/Inputs/shtest-readfile/lit.cfg
index cf453e1..ee49667 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-readfile/lit.cfg
+++ b/llvm/utils/lit/tests/Inputs/shtest-readfile/lit.cfg
@@ -1,7 +1,19 @@
+import os
+
import lit.formats
+import lit.util
config.name = "shtest-readfile"
config.suffixes = [".txt"]
-config.test_format = lit.formats.ShTest(execute_external=False)
+lit_shell_env = os.environ.get("LIT_USE_INTERNAL_SHELL")
+use_lit_shell = lit.util.pythonize_bool(lit_shell_env)
+config.test_format = lit.formats.ShTest(execute_external=not use_lit_shell)
config.test_source_root = None
config.test_exec_root = None
+
+# If we are testing with the external shell, remove the fake-externals from
+# PATH so that we use mkdir in the tests.
+if not use_lit_shell:
+ path_parts = config.environment["PATH"].split(os.path.pathsep)
+ path_parts = [path_part for path_part in path_parts if "fake-externals" not in path_part]
+ config.environment["PATH"] = os.path.pathsep.join(path_parts)
diff --git a/llvm/utils/lit/tests/shtest-readfile-external.py b/llvm/utils/lit/tests/shtest-readfile-external.py
new file mode 100644
index 0000000..5825ad6
--- /dev/null
+++ b/llvm/utils/lit/tests/shtest-readfile-external.py
@@ -0,0 +1,21 @@
+## Tests the readfile substitution.
+
+# RUN: env LIT_USE_INTERNAL_SHELL=0 not %{lit} -a -v %{inputs}/shtest-readfile | FileCheck -match-full-lines -DTEMP_PATH=%S/Inputs/shtest-readfile/Output %s
+
+# CHECK: -- Testing: 4 tests{{.*}}
+
+# CHECK-LABEL: FAIL: shtest-readfile :: absolute-paths.txt ({{[^)]*}})
+# CHECK: echo $(cat [[TEMP_PATH]]/absolute-paths.txt.tmp) && test -e /home/gha/llvm-project/build/utils/lit/tests/Inputs/shtest-readfile/Output/absolute-paths.txt.tmp {{.*}}
+# CHECK: + echo hello
+
+# CHECK-LABEL: FAIL: shtest-readfile :: file-does-not-exist.txt ({{[^)]*}})
+# CHECK: echo $(cat /file/does/not/exist) && test -e /file/does/not/exist {{.*}}
+# CHECK: cat: /file/does/not/exist: No such file or directory
+
+# CHECK-LABEL: FAIL: shtest-readfile :: relative-paths.txt ({{[^)]*}})
+# CHECK: echo $(cat rel_path_test_folder/test_file) && test -e rel_path_test_folder/test_file {{.*}}
+# CHECK: + echo hello
+
+# CHECK-LABEL: FAIL: shtest-readfile :: two-same-line.txt ({{[^)]*}})
+# CHECK: echo $(cat /home/gha/llvm-project/build/utils/lit/tests/Inputs/shtest-readfile/Output/two-same-line.txt.tmp.1) $(cat /home/gha/llvm-project/build/utils/lit/tests/Inputs/shtest-readfile/Output/two-same-line.txt.tmp.2) && test -e /home/gha/llvm-project/build/utils/lit/tests/Inputs/shtest-readfile/Output/two-same-line.txt.tmp.1 && test -e /home/gha/llvm-project/build/utils/lit/tests/Inputs/shtest-readfile/Output/two-same-line.txt.tmp.2 {{.*}}
+# CHECK: + echo hello bye
diff --git a/llvm/utils/lit/tests/shtest-readfile.py b/llvm/utils/lit/tests/shtest-readfile.py
index 245ea37..2200576 100644
--- a/llvm/utils/lit/tests/shtest-readfile.py
+++ b/llvm/utils/lit/tests/shtest-readfile.py
@@ -1,13 +1,17 @@
## Tests the readfile substitution.
-# RUN: not %{lit} -a -v %{inputs}/shtest-readfile | FileCheck -match-full-lines -DTEMP_PATH=%S/Inputs/shtest-readfile/Output %s
+# RUN: env LIT_USE_INTERNAL_SHELL=1 not %{lit} -a -v %{inputs}/shtest-readfile | FileCheck -match-full-lines -DTEMP_PATH=%S/Inputs/shtest-readfile/Output %s
-# CHECK: -- Testing: 3 tests{{.*}}
+# CHECK: -- Testing: 4 tests{{.*}}
# CHECK-LABEL: FAIL: shtest-readfile :: absolute-paths.txt ({{[^)]*}})
# CHECK: echo hello
# CHECK: # executed command: echo '%{readfile:[[TEMP_PATH]]/absolute-paths.txt.tmp}'
+# CHECK-LABEL: FAIL: shtest-readfile :: file-does-not-exist.txt ({{[^)]*}})
+# CHECK: # executed command: @echo 'echo %{readfile:/file/does/not/exist}'
+# CHECK: # | File does not exist: /file/does/not/exist
+
# CHECK-LABEL: FAIL: shtest-readfile :: relative-paths.txt ({{[^)]*}})
# CHECK: echo hello
# CHECK: # executed command: echo '%{readfile:rel_path_test_folder/test_file}'