]> git.proxmox.com Git - rustc.git/blob - src/llvm/utils/lit/lit/ShCommands.py
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / utils / lit / lit / ShCommands.py
1 class Command:
2 def __init__(self, args, redirects):
3 self.args = list(args)
4 self.redirects = list(redirects)
5
6 def __repr__(self):
7 return 'Command(%r, %r)' % (self.args, self.redirects)
8
9 def __eq__(self, other):
10 if not isinstance(other, Command):
11 return False
12
13 return ((self.args, self.redirects) ==
14 (other.args, other.redirects))
15
16 def toShell(self, file):
17 for arg in self.args:
18 if "'" not in arg:
19 quoted = "'%s'" % arg
20 elif '"' not in arg and '$' not in arg:
21 quoted = '"%s"' % arg
22 else:
23 raise NotImplementedError('Unable to quote %r' % arg)
24 file.write(quoted)
25
26 # For debugging / validation.
27 import ShUtil
28 dequoted = list(ShUtil.ShLexer(quoted).lex())
29 if dequoted != [arg]:
30 raise NotImplementedError('Unable to quote %r' % arg)
31
32 for r in self.redirects:
33 if len(r[0]) == 1:
34 file.write("%s '%s'" % (r[0][0], r[1]))
35 else:
36 file.write("%s%s '%s'" % (r[0][1], r[0][0], r[1]))
37
38 class Pipeline:
39 def __init__(self, commands, negate=False, pipe_err=False):
40 self.commands = commands
41 self.negate = negate
42 self.pipe_err = pipe_err
43
44 def __repr__(self):
45 return 'Pipeline(%r, %r, %r)' % (self.commands, self.negate,
46 self.pipe_err)
47
48 def __eq__(self, other):
49 if not isinstance(other, Pipeline):
50 return False
51
52 return ((self.commands, self.negate, self.pipe_err) ==
53 (other.commands, other.negate, self.pipe_err))
54
55 def toShell(self, file, pipefail=False):
56 if pipefail != self.pipe_err:
57 raise ValueError('Inconsistent "pipefail" attribute!')
58 if self.negate:
59 file.write('! ')
60 for cmd in self.commands:
61 cmd.toShell(file)
62 if cmd is not self.commands[-1]:
63 file.write('|\n ')
64
65 class Seq:
66 def __init__(self, lhs, op, rhs):
67 assert op in (';', '&', '||', '&&')
68 self.op = op
69 self.lhs = lhs
70 self.rhs = rhs
71
72 def __repr__(self):
73 return 'Seq(%r, %r, %r)' % (self.lhs, self.op, self.rhs)
74
75 def __eq__(self, other):
76 if not isinstance(other, Seq):
77 return False
78
79 return ((self.lhs, self.op, self.rhs) ==
80 (other.lhs, other.op, other.rhs))
81
82 def toShell(self, file, pipefail=False):
83 self.lhs.toShell(file, pipefail)
84 file.write(' %s\n' % self.op)
85 self.rhs.toShell(file, pipefail)