diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/lit/lit/ShUtil.py | 5 | ||||
-rw-r--r-- | utils/lit/lit/TestRunner.py | 5 | ||||
-rw-r--r-- | utils/lit/lit/TestingConfig.py | 1 |
3 files changed, 8 insertions, 3 deletions
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? |