diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-10-24 20:32:49 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-10-24 20:32:49 +0000 |
commit | a3f85d206a4b9f717d4dd9b53cdc280e9105c70f (patch) | |
tree | f0365592481c9a542ca05e124a741ff2d969d8c6 | |
parent | d1478006d219624075d15212cc9b5d30f796164a (diff) |
lit: Support '>>' redirections when executing scripts internally.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85014 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | utils/lit/TestRunner.py | 9 |
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,): |