123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
-
- /*
- * This file is part of the Assetic package, an OpenSky project.
- *
- * (c) 2010-2012 OpenSky Project Inc
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
- namespace Assetic\Util;
-
- /**
- * Process builder.
- *
- * @author Kris Wallsmith <kris.wallsmith@gmail.com>
- */
- class ProcessBuilder
- {
- private $arguments;
- private $cwd;
- private $env;
- private $stdin;
- private $timeout = 60;
- private $options = array();
- private $inheritEnv = false;
-
- public function __construct(array $arguments = array())
- {
- $this->arguments = $arguments;
- }
-
- /**
- * Adds an unescaped argument to the command string.
- *
- * @param string $argument A command argument
- */
- public function add($argument)
- {
- $this->arguments[] = $argument;
-
- return $this;
- }
-
- public function setWorkingDirectory($cwd)
- {
- $this->cwd = $cwd;
-
- return $this;
- }
-
- public function inheritEnvironmentVariables($inheritEnv = true)
- {
- $this->inheritEnv = $inheritEnv;
-
- return $this;
- }
-
- public function setEnv($name, $value)
- {
- if (null === $this->env) {
- $this->env = array();
- }
-
- $this->env[$name] = $value;
-
- return $this;
- }
-
- public function setInput($stdin)
- {
- $this->stdin = $stdin;
-
- return $this;
- }
-
- public function setTimeout($timeout)
- {
- $this->timeout = $timeout;
-
- return $this;
- }
-
- public function setOption($name, $value)
- {
- $this->options[$name] = $value;
-
- return $this;
- }
-
- public function getProcess()
- {
- if (!count($this->arguments)) {
- throw new \LogicException('You must add() command arguments before calling getProcess().');
- }
-
- $options = $this->options;
-
- if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
- $options += array('bypass_shell' => true);
-
- $args = $this->arguments;
- $cmd = array_shift($args);
-
- $script = '"'.$cmd.'"';
- if ($args) {
- $script .= ' '.implode(' ', array_map('escapeshellarg', $args));
- }
- } else {
- $script = implode(' ', array_map('escapeshellarg', $this->arguments));
- }
- $env = $this->inheritEnv && $_ENV ? ($this->env ?: array()) + $_ENV : $this->env;
-
- return new Process($script, $this->cwd, $env, $this->stdin, $this->timeout, $options);
- }
- }
|