mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Use pipefail when available.
This change makes test with RUN lines like RUN: opt ... | FileCheck fail if opt fails, even if it prints what FileCheck wants. Enabling this found some interesting cases of broken tests that were not being noticed because opt (or some other tool) was crashing late. Pipefail is used when the shell supports it or when using the internal python based tester. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187261 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -166,8 +166,9 @@ class ShLexer:
|
||||
###
|
||||
|
||||
class ShParser:
|
||||
def __init__(self, data, win32Escapes = False):
|
||||
def __init__(self, data, win32Escapes = False, pipefail = False):
|
||||
self.data = data
|
||||
self.pipefail = pipefail
|
||||
self.tokens = ShLexer(data, win32Escapes = win32Escapes).lex()
|
||||
|
||||
def lex(self):
|
||||
@@ -224,7 +225,7 @@ class ShParser:
|
||||
while self.look() == ('|',):
|
||||
self.lex()
|
||||
commands.append(self.parse_command())
|
||||
return Pipeline(commands, negate)
|
||||
return Pipeline(commands, negate, self.pipefail)
|
||||
|
||||
def parse(self):
|
||||
lhs = self.parse_pipeline()
|
||||
|
@@ -245,7 +245,8 @@ def executeScriptInternal(test, litConfig, tmpBase, commands, cwd):
|
||||
cmds = []
|
||||
for ln in commands:
|
||||
try:
|
||||
cmds.append(ShUtil.ShParser(ln, litConfig.isWindows).parse())
|
||||
cmds.append(ShUtil.ShParser(ln, litConfig.isWindows,
|
||||
test.config.pipefail).parse())
|
||||
except:
|
||||
return (Test.FAIL, "shell parser error on: %r" % ln)
|
||||
|
||||
@@ -284,6 +285,8 @@ def executeScript(test, litConfig, tmpBase, commands, cwd):
|
||||
if isWin32CMDEXE:
|
||||
f.write('\nif %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands))
|
||||
else:
|
||||
if test.config.pipefail:
|
||||
f.write('set -o pipefail;')
|
||||
f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
|
||||
f.write('\n')
|
||||
f.close()
|
||||
|
@@ -92,6 +92,7 @@ class TestingConfig:
|
||||
self.test_source_root = test_source_root
|
||||
self.excludes = set(excludes)
|
||||
self.available_features = set(available_features)
|
||||
self.pipefail = True
|
||||
|
||||
def clone(self, path):
|
||||
# FIXME: Chain implementations?
|
||||
|
Reference in New Issue
Block a user