Security update for Core, with self-updated composer
[yaffs-website] / vendor / symfony / process / ProcessBuilder.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Process;
13
14 use Symfony\Component\Process\Exception\InvalidArgumentException;
15 use Symfony\Component\Process\Exception\LogicException;
16
17 /**
18  * Process builder.
19  *
20  * @author Kris Wallsmith <kris@symfony.com>
21  */
22 class ProcessBuilder
23 {
24     private $arguments;
25     private $cwd;
26     private $env = array();
27     private $input;
28     private $timeout = 60;
29     private $options = array();
30     private $inheritEnv = true;
31     private $prefix = array();
32     private $outputDisabled = false;
33
34     /**
35      * Constructor.
36      *
37      * @param string[] $arguments An array of arguments
38      */
39     public function __construct(array $arguments = array())
40     {
41         $this->arguments = $arguments;
42     }
43
44     /**
45      * Creates a process builder instance.
46      *
47      * @param string[] $arguments An array of arguments
48      *
49      * @return static
50      */
51     public static function create(array $arguments = array())
52     {
53         return new static($arguments);
54     }
55
56     /**
57      * Adds an unescaped argument to the command string.
58      *
59      * @param string $argument A command argument
60      *
61      * @return $this
62      */
63     public function add($argument)
64     {
65         $this->arguments[] = $argument;
66
67         return $this;
68     }
69
70     /**
71      * Adds a prefix to the command string.
72      *
73      * The prefix is preserved when resetting arguments.
74      *
75      * @param string|array $prefix A command prefix or an array of command prefixes
76      *
77      * @return $this
78      */
79     public function setPrefix($prefix)
80     {
81         $this->prefix = is_array($prefix) ? $prefix : array($prefix);
82
83         return $this;
84     }
85
86     /**
87      * Sets the arguments of the process.
88      *
89      * Arguments must not be escaped.
90      * Previous arguments are removed.
91      *
92      * @param string[] $arguments
93      *
94      * @return $this
95      */
96     public function setArguments(array $arguments)
97     {
98         $this->arguments = $arguments;
99
100         return $this;
101     }
102
103     /**
104      * Sets the working directory.
105      *
106      * @param null|string $cwd The working directory
107      *
108      * @return $this
109      */
110     public function setWorkingDirectory($cwd)
111     {
112         $this->cwd = $cwd;
113
114         return $this;
115     }
116
117     /**
118      * Sets whether environment variables will be inherited or not.
119      *
120      * @param bool $inheritEnv
121      *
122      * @return $this
123      */
124     public function inheritEnvironmentVariables($inheritEnv = true)
125     {
126         $this->inheritEnv = $inheritEnv;
127
128         return $this;
129     }
130
131     /**
132      * Sets an environment variable.
133      *
134      * Setting a variable overrides its previous value. Use `null` to unset a
135      * defined environment variable.
136      *
137      * @param string      $name  The variable name
138      * @param null|string $value The variable value
139      *
140      * @return $this
141      */
142     public function setEnv($name, $value)
143     {
144         $this->env[$name] = $value;
145
146         return $this;
147     }
148
149     /**
150      * Adds a set of environment variables.
151      *
152      * Already existing environment variables with the same name will be
153      * overridden by the new values passed to this method. Pass `null` to unset
154      * a variable.
155      *
156      * @param array $variables The variables
157      *
158      * @return $this
159      */
160     public function addEnvironmentVariables(array $variables)
161     {
162         $this->env = array_replace($this->env, $variables);
163
164         return $this;
165     }
166
167     /**
168      * Sets the input of the process.
169      *
170      * @param resource|scalar|\Traversable|null $input The input content
171      *
172      * @return $this
173      *
174      * @throws InvalidArgumentException In case the argument is invalid
175      */
176     public function setInput($input)
177     {
178         $this->input = ProcessUtils::validateInput(__METHOD__, $input);
179
180         return $this;
181     }
182
183     /**
184      * Sets the process timeout.
185      *
186      * To disable the timeout, set this value to null.
187      *
188      * @param float|null $timeout
189      *
190      * @return $this
191      *
192      * @throws InvalidArgumentException
193      */
194     public function setTimeout($timeout)
195     {
196         if (null === $timeout) {
197             $this->timeout = null;
198
199             return $this;
200         }
201
202         $timeout = (float) $timeout;
203
204         if ($timeout < 0) {
205             throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.');
206         }
207
208         $this->timeout = $timeout;
209
210         return $this;
211     }
212
213     /**
214      * Adds a proc_open option.
215      *
216      * @param string $name  The option name
217      * @param string $value The option value
218      *
219      * @return $this
220      */
221     public function setOption($name, $value)
222     {
223         $this->options[$name] = $value;
224
225         return $this;
226     }
227
228     /**
229      * Disables fetching output and error output from the underlying process.
230      *
231      * @return $this
232      */
233     public function disableOutput()
234     {
235         $this->outputDisabled = true;
236
237         return $this;
238     }
239
240     /**
241      * Enables fetching output and error output from the underlying process.
242      *
243      * @return $this
244      */
245     public function enableOutput()
246     {
247         $this->outputDisabled = false;
248
249         return $this;
250     }
251
252     /**
253      * Creates a Process instance and returns it.
254      *
255      * @return Process
256      *
257      * @throws LogicException In case no arguments have been provided
258      */
259     public function getProcess()
260     {
261         if (0 === count($this->prefix) && 0 === count($this->arguments)) {
262             throw new LogicException('You must add() command arguments before calling getProcess().');
263         }
264
265         $options = $this->options;
266
267         $arguments = array_merge($this->prefix, $this->arguments);
268         $script = implode(' ', array_map(array(__NAMESPACE__.'\\ProcessUtils', 'escapeArgument'), $arguments));
269
270         $process = new Process($script, $this->cwd, $this->env, $this->input, $this->timeout, $options);
271
272         if ($this->inheritEnv) {
273             $process->inheritEnvironmentVariables();
274         }
275         if ($this->outputDisabled) {
276             $process->disableOutput();
277         }
278
279         return $process;
280     }
281 }