From c1bb2d432501dabdfcb1e78eccfb7377664c4d14 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 26 Jul 2013 22:32:58 +0000 Subject: 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 --- utils/lit/lit/ShUtil.py | 5 +++-- utils/lit/lit/TestRunner.py | 5 ++++- utils/lit/lit/TestingConfig.py | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) (limited to 'utils') diff --git a/utils/lit/lit/ShUtil.py b/utils/lit/lit/ShUtil.py index 50f7910319..00bb40255c 100644 --- a/utils/lit/lit/ShUtil.py +++ b/utils/lit/lit/ShUtil.py @@ -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() diff --git a/utils/lit/lit/TestRunner.py b/utils/lit/lit/TestRunner.py index 84176996a8..daa9b7dfbb 100644 --- a/utils/lit/lit/TestRunner.py +++ b/utils/lit/lit/TestRunner.py @@ -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() diff --git a/utils/lit/lit/TestingConfig.py b/utils/lit/lit/TestingConfig.py index a1f79a3bfc..5d5832e9bb 100644 --- a/utils/lit/lit/TestingConfig.py +++ b/utils/lit/lit/TestingConfig.py @@ -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? -- cgit v1.2.3