summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-10-24 20:32:49 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-10-24 20:32:49 +0000
commita3f85d206a4b9f717d4dd9b53cdc280e9105c70f (patch)
treef0365592481c9a542ca05e124a741ff2d969d8c6 /utils
parentd1478006d219624075d15212cc9b5d30f796164a (diff)
downloadllvm-a3f85d206a4b9f717d4dd9b53cdc280e9105c70f.tar.gz
llvm-a3f85d206a4b9f717d4dd9b53cdc280e9105c70f.tar.bz2
llvm-a3f85d206a4b9f717d4dd9b53cdc280e9105c70f.tar.xz
lit: Support '>>' redirections when executing scripts internally.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85014 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/lit/TestRunner.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/utils/lit/TestRunner.py b/utils/lit/TestRunner.py
index 34e828bf96..356632e92f 100644
--- a/utils/lit/TestRunner.py
+++ b/utils/lit/TestRunner.py
@@ -63,21 +63,30 @@ def executeShCmd(cmd, cfg, cwd, results):
# output. This is null until we have seen some output using
# stderr.
for i,j in enumerate(cmd.commands):
+ # Apply the redirections, we use (N,) as a sentinal to indicate stdin,
+ # stdout, stderr for N equal to 0, 1, or 2 respectively. Redirects to or
+ # from a file are represented with a list [file, mode, file-object]
+ # where file-object is initially None.
redirects = [(0,), (1,), (2,)]
for r in j.redirects:
if r[0] == ('>',2):
redirects[2] = [r[1], 'w', None]
+ elif r[0] == ('>>',2):
+ redirects[2] = [r[1], 'a', None]
elif r[0] == ('>&',2) and r[1] in '012':
redirects[2] = redirects[int(r[1])]
elif r[0] == ('>&',) or r[0] == ('&>',):
redirects[1] = redirects[2] = [r[1], 'w', None]
elif r[0] == ('>',):
redirects[1] = [r[1], 'w', None]
+ elif r[0] == ('>>',):
+ redirects[1] = [r[1], 'a', None]
elif r[0] == ('<',):
redirects[0] = [r[1], 'r', None]
else:
raise NotImplementedError,"Unsupported redirect: %r" % (r,)
+ # Map from the final redirections to something subprocess can handle.
final_redirects = []
for index,r in enumerate(redirects):
if r == (0,):