-
Notifications
You must be signed in to change notification settings - Fork 305
/
Copy pathCommandArguments.php
168 lines (150 loc) · 3.99 KB
/
CommandArguments.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php
namespace Robo\Common;
use Robo\Common\ProcessUtils;
/**
* Use this to add arguments and options to the $arguments property.
*/
trait CommandArguments
{
/**
* @var string
*/
protected $arguments = '';
/**
* @var array
*/
protected $argumentsEnv = [];
/**
* Adds an argument and its placeholder value, to be executed
*
* @param string $argument
* @param string|null $key
* @param string|null $prefix
* @param string|null $separator
* @return void
*/
protected function addArgument($argument, $key = null, $prefix = null, $separator = ' ')
{
if (is_null($key)) {
$key = "arg" . md5($argument);
}
$this->arguments .= null == $prefix ? '' : $separator . $prefix;
if (!is_null($argument)) {
$this->arguments .= ' "${:' . $key . '}"';
$this->argumentsEnv[$key] = $argument;
}
}
/**
* Escape a command line argument.
*
* @param string $argument
* @return string
*
* @deprecated Use \Robo\Common\ProcessUtils::escapeArgument() instead.
*/
public static function escape($argument)
{
if (preg_match('/^[a-zA-Z0-9\/\.@~_-]+$/', $argument)) {
return $argument;
}
return ProcessUtils::escapeArgument($argument);
}
/**
* Pass argument to executable. It will be changed to a placeholder.
*
* @param string $arg
*
* @return $this
*/
public function arg($arg)
{
return $this->args($arg);
}
/**
* Pass methods parameters as arguments to executable. Argument are
* automatically passed as placeholders
*
* @param string|string[] $args
*
* @return $this
*/
public function args($args)
{
$func_args = func_get_args();
if (!is_array($args)) {
$args = $func_args;
}
foreach ($args as $arg) {
$this->addArgument($arg);
}
return $this;
}
/**
* Pass the provided string in its raw (as provided) form as an argument to executable.
*
* @param string $arg
*
* @return $this
*/
public function rawArg($arg)
{
$this->arguments .= " $arg";
return $this;
}
/**
* Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter.
* Option values are automatically passed as placeholders.
*
* @param string $option
* @param string $value
* @param string $separator
*
* @return $this
*/
public function option($option, $value = null, $separator = ' ')
{
if ($option !== null and strpos($option, '-') !== 0) {
$option = "--$option";
}
$this->addArgument($value, null, $option, $separator);
return $this;
}
/**
* Pass multiple options to executable. The associative array contains
* the key:value pairs that become `--key value`, for each item in the array.
* Values are passed as placeholders.
*
* @param array $options
* @param string $separator
*
* @return $this
*/
public function options(array $options, $separator = ' ')
{
foreach ($options as $option => $value) {
$this->option($option, $value, $separator);
}
return $this;
}
/**
* Pass an option with multiple values to executable. Value can be a string or array.
* Option values are automatically escaped.
*
* @param string $option
* @param string|array $value
* @param string $separator
*
* @return $this
*/
public function optionList($option, $value = array(), $separator = ' ')
{
if (is_array($value)) {
foreach ($value as $item) {
$this->optionList($option, $item, $separator);
}
} else {
$this->option($option, $value, $separator);
}
return $this;
}
}