From a3f85d206a4b9f717d4dd9b53cdc280e9105c70f Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 24 Oct 2009 20:32:49 +0000 Subject: [PATCH] lit: Support '>>' redirections when executing scripts internally. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85014 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/lit/TestRunner.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/utils/lit/TestRunner.py b/utils/lit/TestRunner.py index 34e828bf960..356632e92f3 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,): -- 2.34.1