puli /
cli
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /* |
||
| 4 | * This file is part of the puli/cli package. |
||
| 5 | * |
||
| 6 | * (c) Bernhard Schussek <[email protected]> |
||
| 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 Puli\Cli; |
||
| 13 | |||
| 14 | use Puli\Cli\Handler\BindCommandHandler; |
||
| 15 | use Puli\Cli\Handler\BuildCommandHandler; |
||
| 16 | use Puli\Cli\Handler\CatCommandHandler; |
||
| 17 | use Puli\Cli\Handler\ConfigCommandHandler; |
||
| 18 | use Puli\Cli\Handler\FindCommandHandler; |
||
| 19 | use Puli\Cli\Handler\InstallerCommandHandler; |
||
| 20 | use Puli\Cli\Handler\LsCommandHandler; |
||
| 21 | use Puli\Cli\Handler\MapCommandHandler; |
||
| 22 | use Puli\Cli\Handler\ModuleCommandHandler; |
||
| 23 | use Puli\Cli\Handler\PluginCommandHandler; |
||
| 24 | use Puli\Cli\Handler\PublishCommandHandler; |
||
| 25 | use Puli\Cli\Handler\SelfUpdateCommandHandler; |
||
| 26 | use Puli\Cli\Handler\ServerCommandHandler; |
||
| 27 | use Puli\Cli\Handler\TreeCommandHandler; |
||
| 28 | use Puli\Cli\Handler\TypeCommandHandler; |
||
| 29 | use Puli\Cli\Handler\UpgradeCommandHandler; |
||
| 30 | use Puli\Cli\Handler\UrlCommandHandler; |
||
| 31 | use Puli\Cli\Proxy\DiscoveryManagerProxy; |
||
| 32 | use Puli\Cli\Proxy\RepositoryManagerProxy; |
||
| 33 | use Puli\Manager\Api\Container; |
||
| 34 | use Puli\Manager\Api\Context\ProjectContext; |
||
| 35 | use Puli\Manager\Api\Module\InstallInfo; |
||
| 36 | use Puli\Manager\Api\Server\Server; |
||
| 37 | use Puli\Manager\Module\ModuleFileConverter; |
||
| 38 | use Webmozart\Console\Api\Args\Format\Argument; |
||
| 39 | use Webmozart\Console\Api\Args\Format\Option; |
||
| 40 | use Webmozart\Console\Api\Event\ConsoleEvents; |
||
| 41 | use Webmozart\Console\Api\Event\PreHandleEvent; |
||
| 42 | use Webmozart\Console\Api\Formatter\Style; |
||
| 43 | use Webmozart\Console\Config\DefaultApplicationConfig; |
||
| 44 | |||
| 45 | /** |
||
| 46 | * The configuration of the Puli CLI. |
||
| 47 | * |
||
| 48 | * @since 1.0 |
||
| 49 | * |
||
| 50 | * @author Bernhard Schussek <[email protected]> |
||
| 51 | * @author Stephan Wentz <[email protected]> |
||
| 52 | */ |
||
| 53 | class PuliApplicationConfig extends DefaultApplicationConfig |
||
| 54 | { |
||
| 55 | /** |
||
| 56 | * The version of the Puli CLI. |
||
| 57 | */ |
||
| 58 | const VERSION = '@package_version@'; |
||
| 59 | |||
| 60 | /** |
||
| 61 | * @var Container |
||
| 62 | */ |
||
| 63 | private $puli; |
||
| 64 | |||
| 65 | /** |
||
| 66 | * Creates the configuration. |
||
| 67 | * |
||
| 68 | * @param Container $puli The Puli service container |
||
| 69 | */ |
||
| 70 | public function __construct(Container $puli = null) |
||
| 71 | { |
||
| 72 | // Start Puli already so that plugins can change the CLI configuration |
||
| 73 | $this->puli = $puli ?: new Container(getcwd()); |
||
| 74 | |||
| 75 | if (!$this->puli->isStarted()) { |
||
| 76 | $this->puli->start(); |
||
| 77 | } |
||
| 78 | |||
| 79 | parent::__construct(); |
||
| 80 | } |
||
| 81 | |||
| 82 | /** |
||
| 83 | * {@inheritdoc} |
||
| 84 | */ |
||
| 85 | protected function configure() |
||
| 86 | { |
||
| 87 | // Make sure the console and Puli use the same event dispatcher so that |
||
| 88 | // Puli plugins can listen to the console events. |
||
| 89 | // Add the dispatcher before parent::configure() so that the parent |
||
| 90 | // listeners don't get overwritten. |
||
| 91 | $this->setEventDispatcher($this->puli->getEventDispatcher()); |
||
| 92 | |||
| 93 | parent::configure(); |
||
| 94 | |||
| 95 | $puli = $this->puli; |
||
| 96 | $context = $this->puli->getContext(); |
||
| 97 | |||
| 98 | $this |
||
| 99 | ->setName('puli') |
||
| 100 | ->setDisplayName('Puli') |
||
| 101 | ->setVersion(self::VERSION) |
||
| 102 | |||
| 103 | // Enable debug for unreleased versions only. Split the string to |
||
| 104 | // prevent its replacement during release |
||
| 105 | ->setDebug('@pack'.'age_version@' === self::VERSION) |
||
| 106 | |||
| 107 | ->addStyle(Style::tag('good')->fgGreen()) |
||
| 108 | ->addStyle(Style::tag('bad')->fgRed()) |
||
| 109 | ; |
||
| 110 | |||
| 111 | if ($context instanceof ProjectContext) { |
||
| 112 | // Don't do a version check in the global context (if not in a project) |
||
| 113 | $this->addEventListener( |
||
| 114 | ConsoleEvents::PRE_HANDLE, |
||
| 115 | function (PreHandleEvent $event) use ($context) { |
||
| 116 | $io = $event->getIO(); |
||
| 117 | $moduleFile = $context->getRootModuleFile(); |
||
| 118 | |||
| 119 | // Don't show warning for "upgrade" command |
||
| 120 | if ('upgrade' === $event->getCommand()->getName()) { |
||
| 121 | return; |
||
| 122 | } |
||
| 123 | |||
| 124 | if (version_compare($moduleFile->getVersion(), ModuleFileConverter::VERSION, '<')) { |
||
| 125 | $io->errorLine(sprintf( |
||
| 126 | '<warn>Warning: Your puli.json file has version %s, '. |
||
| 127 | 'but the latest version is %s. Run "puli upgrade" to '. |
||
| 128 | 'upgrade to %s.</warn>', |
||
| 129 | $moduleFile->getVersion(), |
||
| 130 | ModuleFileConverter::VERSION, |
||
| 131 | ModuleFileConverter::VERSION |
||
| 132 | )); |
||
| 133 | } |
||
| 134 | } |
||
| 135 | ); |
||
| 136 | } |
||
| 137 | |||
| 138 | $this |
||
|
0 ignored issues
–
show
|
|||
| 139 | ->beginCommand('bind') |
||
| 140 | ->setDescription('Bind resources to binding types') |
||
| 141 | ->setHandler(function () use ($puli) { |
||
| 142 | return new BindCommandHandler( |
||
| 143 | $puli->getDiscoveryManager(), |
||
| 144 | $puli->getModuleManager()->getModules() |
||
| 145 | ); |
||
| 146 | }) |
||
| 147 | |||
| 148 | ->beginOptionCommand('add') |
||
| 149 | ->markAnonymous() |
||
| 150 | ->addArgument('artifact', Argument::REQUIRED, 'A class name or a query for resources') |
||
| 151 | ->addArgument('type', Argument::REQUIRED, 'The name of the binding type') |
||
| 152 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the resource query', 'glob', 'language') |
||
| 153 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A binding parameter in the form <key>=<value>', null, 'key=value') |
||
| 154 | ->addOption('class', null, Option::NO_VALUE, 'Force adding of a class binding') |
||
| 155 | ->addOption('force', 'f', Option::NO_VALUE, 'Add binding even if the binding type does not exist') |
||
| 156 | ->setHandlerMethod('handleAdd') |
||
| 157 | ->end() |
||
| 158 | |||
| 159 | ->beginOptionCommand('list') |
||
| 160 | ->markDefault() |
||
| 161 | ->addOption('root', null, Option::NO_VALUE, 'Show bindings of the root module') |
||
| 162 | ->addOption('module', 'm', Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Show bindings of a module', null, 'module') |
||
| 163 | ->addOption('all', 'a', Option::NO_VALUE, 'Show bindings of all modules') |
||
| 164 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled bindings') |
||
| 165 | ->addOption('disabled', null, Option::NO_VALUE, 'Show disabled bindings') |
||
| 166 | ->addOption('type-not-found', null, Option::NO_VALUE, 'Show bindings whose type is not found') |
||
| 167 | ->addOption('type-not-enabled', null, Option::NO_VALUE, 'Show bindings whose type is not enabled') |
||
| 168 | ->addOption('ignored', null, Option::NO_VALUE, 'Show bindings whose type is disabled') |
||
| 169 | ->addOption('invalid', null, Option::NO_VALUE, 'Show bindings with invalid parameters') |
||
| 170 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the resource query', 'glob', 'language') |
||
| 171 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A binding parameter in the form <key>=<value>', null, 'key=value') |
||
| 172 | ->setHandlerMethod('handleList') |
||
| 173 | ->end() |
||
| 174 | |||
| 175 | ->beginOptionCommand('update', 'u') |
||
| 176 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the updated binding') |
||
| 177 | ->addOption('query', null, Option::REQUIRED_VALUE, 'A query for resources') |
||
| 178 | ->addOption('class', null, Option::REQUIRED_VALUE, 'A class name') |
||
| 179 | ->addOption('type', null, Option::REQUIRED_VALUE, 'The name of the binding type') |
||
| 180 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the resource query', null, 'language') |
||
| 181 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A binding parameter in the form <key>=<value>', null, 'key=value') |
||
| 182 | ->addOption('unset-param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Unset a binding parameter', null, 'key') |
||
| 183 | ->addOption('force', 'f', Option::NO_VALUE, 'Update binding even if the binding type does not exist') |
||
| 184 | ->setHandlerMethod('handleUpdate') |
||
| 185 | ->end() |
||
| 186 | |||
| 187 | ->beginOptionCommand('delete', 'd') |
||
| 188 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the removed binding') |
||
| 189 | ->setHandlerMethod('handleDelete') |
||
| 190 | ->end() |
||
| 191 | |||
| 192 | ->beginOptionCommand('enable') |
||
| 193 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the enabled binding') |
||
| 194 | ->setHandlerMethod('handleEnable') |
||
| 195 | ->end() |
||
| 196 | |||
| 197 | ->beginOptionCommand('disable') |
||
| 198 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the disabled binding') |
||
| 199 | ->setHandlerMethod('handleDisable') |
||
| 200 | ->end() |
||
| 201 | ->end() |
||
| 202 | ; |
||
| 203 | |||
| 204 | $this |
||
| 205 | ->beginCommand('build') |
||
| 206 | ->setDescription('Build the resource repository/discovery') |
||
| 207 | ->addArgument('target', Argument::OPTIONAL, 'The build target. One of "repository", "discovery", "factory" and "all"', 'all') |
||
| 208 | ->setHandler(function () use ($puli) { |
||
| 209 | return new BuildCommandHandler( |
||
| 210 | // Use proxies to make sure this command runs even if |
||
| 211 | // the factory file is corrupt. If the file is corrupt, |
||
| 212 | // we get an error when loading the actual managers. |
||
| 213 | new RepositoryManagerProxy($puli), |
||
| 214 | new DiscoveryManagerProxy($puli), |
||
| 215 | $puli->getFactoryManager() |
||
| 216 | ); |
||
| 217 | }) |
||
| 218 | ->end() |
||
| 219 | ; |
||
| 220 | |||
| 221 | $this |
||
| 222 | ->beginCommand('cat') |
||
| 223 | ->setDescription('Concatenate a file resource in the repository') |
||
| 224 | ->addArgument('path', Argument::REQUIRED, 'The path of a resource') |
||
| 225 | ->setHandler(function () use ($puli) { |
||
| 226 | return new CatCommandHandler( |
||
| 227 | $puli->getRepository() |
||
| 228 | ); |
||
| 229 | }) |
||
| 230 | ->end() |
||
| 231 | ; |
||
| 232 | |||
| 233 | $this |
||
|
0 ignored issues
–
show
The method
beginSubCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 234 | ->beginCommand('config') |
||
| 235 | ->setDescription('Display and modify configuration values') |
||
| 236 | ->setHandler(function () use ($puli) { |
||
| 237 | return new ConfigCommandHandler($puli->getRootModuleFileManager()); |
||
| 238 | }) |
||
| 239 | |||
| 240 | ->beginSubCommand('list') |
||
| 241 | ->markDefault() |
||
| 242 | ->addOption('parsed', null, Option::NO_VALUE, 'Replace placeholders by their values in the output') |
||
| 243 | ->setHandlerMethod('handleList') |
||
| 244 | ->end() |
||
| 245 | |||
| 246 | ->beginSubCommand('show') |
||
| 247 | ->markAnonymous() |
||
| 248 | ->addArgument('key', Argument::REQUIRED, 'The configuration key to show. May contain wildcards ("*")') |
||
| 249 | ->addOption('parsed', null, Option::NO_VALUE, 'Replace placeholders by their values in the output') |
||
| 250 | ->setHandlerMethod('handleShow') |
||
| 251 | ->end() |
||
| 252 | |||
| 253 | ->beginSubCommand('set') |
||
| 254 | ->markAnonymous() |
||
| 255 | ->addArgument('key', Argument::REQUIRED, 'The modified configuration key') |
||
| 256 | ->addArgument('value', Argument::REQUIRED, 'The value to set for the configuration key') |
||
| 257 | ->setHandlerMethod('handleSet') |
||
| 258 | ->end() |
||
| 259 | |||
| 260 | ->beginOptionCommand('reset', 'r') |
||
| 261 | ->addArgument('key', Argument::REQUIRED, 'The configuration key(s) to reset. May contain wildcards ("*")') |
||
| 262 | ->setHandlerMethod('handleReset') |
||
| 263 | ->end() |
||
| 264 | ->end() |
||
| 265 | ; |
||
| 266 | |||
| 267 | $this |
||
| 268 | ->beginCommand('find') |
||
| 269 | ->setDescription('Find resources by different criteria') |
||
| 270 | ->addOption('path', null, Option::REQUIRED_VALUE, 'The resource path. May contain the wildcard "*"') |
||
| 271 | ->addOption('name', null, Option::REQUIRED_VALUE, 'The resource filename. May contain the wildcard "*"') |
||
| 272 | ->addOption('class', null, Option::REQUIRED_VALUE, 'The short name of a resource class') |
||
| 273 | ->addOption('type', null, Option::REQUIRED_VALUE, 'The name of a binding type') |
||
| 274 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the query passed with --path', 'glob') |
||
| 275 | ->setHandler(function () use ($puli) { |
||
| 276 | return new FindCommandHandler( |
||
| 277 | $puli->getRepository(), |
||
| 278 | $puli->getDiscovery() |
||
| 279 | ); |
||
| 280 | }) |
||
| 281 | ->end() |
||
| 282 | ; |
||
| 283 | |||
| 284 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 285 | ->beginCommand('installer') |
||
| 286 | ->setDescription('Manage the installers used to install web resources') |
||
| 287 | ->setHandler(function () use ($puli) { |
||
| 288 | return new InstallerCommandHandler($puli->getInstallerManager()); |
||
| 289 | }) |
||
| 290 | |||
| 291 | ->beginOptionCommand('list') |
||
| 292 | ->markDefault() |
||
| 293 | ->addOption('long', 'l', Option::NO_VALUE, 'Print the fully-qualified class name') |
||
| 294 | ->setHandlerMethod('handleList') |
||
| 295 | ->end() |
||
| 296 | |||
| 297 | ->beginOptionCommand('add', 'a') |
||
| 298 | ->addArgument('name', Argument::REQUIRED, 'The name of the installer') |
||
| 299 | ->addArgument('class', Argument::REQUIRED, 'The fully-qualified class name of the installer') |
||
| 300 | ->addOption('description', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'The description of the installer') |
||
| 301 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Additional installer parameters') |
||
| 302 | ->setHandlerMethod('handleAdd') |
||
| 303 | ->end() |
||
| 304 | |||
| 305 | ->beginOptionCommand('delete', 'd') |
||
| 306 | ->addArgument('name', Argument::REQUIRED, 'The name of the installer to remove') |
||
| 307 | ->setHandlerMethod('handleDelete') |
||
| 308 | ->end() |
||
| 309 | ->end() |
||
| 310 | ; |
||
| 311 | |||
| 312 | $this |
||
| 313 | ->beginCommand('ls') |
||
| 314 | ->setDescription('List the children of a resource in the repository') |
||
| 315 | ->addArgument('path', Argument::OPTIONAL, 'The path of a resource', '/') |
||
| 316 | ->addOption('long', 'l', Option::NO_VALUE, 'Print more information about each child') |
||
| 317 | ->setHandler(function () use ($puli) { |
||
| 318 | return new LsCommandHandler( |
||
| 319 | $puli->getRepository() |
||
| 320 | ); |
||
| 321 | }) |
||
| 322 | ->end() |
||
| 323 | ; |
||
| 324 | |||
| 325 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 326 | ->beginCommand('map') |
||
| 327 | ->setDescription('Display and change path mappings') |
||
| 328 | ->setHandler(function () use ($puli) { |
||
| 329 | return new MapCommandHandler( |
||
| 330 | $puli->getRepositoryManager(), |
||
| 331 | $puli->getModuleManager()->getModules() |
||
| 332 | ); |
||
| 333 | }) |
||
| 334 | |||
| 335 | ->beginOptionCommand('add') |
||
| 336 | ->markAnonymous() |
||
| 337 | ->addArgument('path', Argument::REQUIRED) |
||
| 338 | ->addArgument('file', Argument::REQUIRED | Argument::MULTI_VALUED) |
||
| 339 | ->addOption('force', 'f', Option::NO_VALUE, 'Map even if the target path does not exist') |
||
| 340 | ->setHandlerMethod('handleAdd') |
||
| 341 | ->end() |
||
| 342 | |||
| 343 | ->beginOptionCommand('list') |
||
| 344 | ->markDefault() |
||
| 345 | ->addOption('root', null, Option::NO_VALUE, 'Show mappings of the root module') |
||
| 346 | ->addOption('module', 'm', Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Show mappings of a module', null, 'module') |
||
| 347 | ->addOption('all', 'a', Option::NO_VALUE, 'Show mappings of all modules') |
||
| 348 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled mappings') |
||
| 349 | ->addOption('not-found', null, Option::NO_VALUE, 'Show mappings whose referenced paths do not exist') |
||
| 350 | ->addOption('conflict', null, Option::NO_VALUE, 'Show conflicting mappings') |
||
| 351 | ->setHandlerMethod('handleList') |
||
| 352 | ->end() |
||
| 353 | |||
| 354 | ->beginOptionCommand('update', 'u') |
||
| 355 | ->addArgument('path', Argument::REQUIRED) |
||
| 356 | ->addOption('add', 'a', Option::REQUIRED_VALUE | Option::MULTI_VALUED | Option::PREFER_LONG_NAME, 'Add a file to the path mapping', null, 'file') |
||
| 357 | ->addOption('remove', 'r', Option::REQUIRED_VALUE | Option::MULTI_VALUED | Option::PREFER_LONG_NAME, 'Remove a file from the path mapping', null, 'file') |
||
| 358 | ->addOption('force', 'f', Option::NO_VALUE, 'Map even if the target path does not exist') |
||
| 359 | ->setHandlerMethod('handleUpdate') |
||
| 360 | ->end() |
||
| 361 | |||
| 362 | ->beginOptionCommand('delete', 'd') |
||
| 363 | ->addArgument('path', Argument::REQUIRED) |
||
| 364 | ->addArgument('file', Argument::OPTIONAL) |
||
| 365 | ->setHandlerMethod('handleDelete') |
||
| 366 | ->end() |
||
| 367 | ->end() |
||
| 368 | ; |
||
| 369 | |||
| 370 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 371 | ->beginCommand('module') |
||
| 372 | ->setDescription('Display the installed modules') |
||
| 373 | ->setHandler(function () use ($puli) { |
||
| 374 | return new ModuleCommandHandler($puli->getModuleManager()); |
||
| 375 | }) |
||
| 376 | |||
| 377 | ->beginOptionCommand('install', 'i') |
||
| 378 | ->addArgument('path', Argument::REQUIRED, 'The path to the module') |
||
| 379 | ->addArgument('name', Argument::OPTIONAL, 'The name of the module. Taken from puli.json if not passed.') |
||
| 380 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'The name of the installer', InstallInfo::DEFAULT_INSTALLER_NAME) |
||
| 381 | ->addOption('dev', null, Option::NO_VALUE, 'Install the module in the development environment') |
||
| 382 | ->setHandlerMethod('handleInstall') |
||
| 383 | ->end() |
||
| 384 | |||
| 385 | ->beginOptionCommand('list') |
||
| 386 | ->markDefault() |
||
| 387 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'Show modules installed by a specific installer') |
||
| 388 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled modules') |
||
| 389 | ->addOption('not-found', null, Option::NO_VALUE, 'Show modules that could not be found') |
||
| 390 | ->addOption('not-loadable', null, Option::NO_VALUE, 'Show modules that could not be loaded') |
||
| 391 | ->addOption('dev', null, Option::NO_VALUE, 'Show modules of the development environment') |
||
| 392 | ->addOption('prod', null, Option::NO_VALUE, 'Show modules of the production environment') |
||
| 393 | ->addOption('format', null, Option::REQUIRED_VALUE, 'The format of the output. You can use the variables %name%, %install_path%, %installer% and %state% in the format string', null, 'format') |
||
| 394 | ->setHandlerMethod('handleList') |
||
| 395 | ->end() |
||
| 396 | |||
| 397 | ->beginOptionCommand('rename') |
||
| 398 | ->addArgument('name', Argument::REQUIRED, 'The name of the module') |
||
| 399 | ->addArgument('new-name', Argument::REQUIRED, 'The new name of the module') |
||
| 400 | ->setHandlerMethod('handleRename') |
||
| 401 | ->end() |
||
| 402 | |||
| 403 | ->beginOptionCommand('delete', 'd') |
||
| 404 | ->addArgument('name', Argument::REQUIRED, 'The name of the module') |
||
| 405 | ->setHandlerMethod('handleDelete') |
||
| 406 | ->end() |
||
| 407 | |||
| 408 | ->beginOptionCommand('clean') |
||
| 409 | ->setHandlerMethod('handleClean') |
||
| 410 | ->end() |
||
| 411 | ->end() |
||
| 412 | ; |
||
| 413 | |||
| 414 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 415 | ->beginCommand('plugin') |
||
| 416 | ->setDescription('Manage the installed Puli plugins') |
||
| 417 | ->setHandler(function () use ($puli) { |
||
| 418 | return new PluginCommandHandler($puli->getRootModuleFileManager()); |
||
| 419 | }) |
||
| 420 | |||
| 421 | ->beginOptionCommand('install', 'i') |
||
| 422 | ->addArgument('class', Argument::REQUIRED, 'The fully-qualified plugin class name') |
||
| 423 | ->setHandlerMethod('handleInstall') |
||
| 424 | ->end() |
||
| 425 | |||
| 426 | ->beginOptionCommand('list') |
||
| 427 | ->markDefault() |
||
| 428 | ->setHandlerMethod('handleList') |
||
| 429 | ->end() |
||
| 430 | |||
| 431 | ->beginOptionCommand('delete', 'd') |
||
| 432 | ->addArgument('class', Argument::REQUIRED, 'The fully-qualified plugin class name') |
||
| 433 | ->setHandlerMethod('handleDelete') |
||
| 434 | ->end() |
||
| 435 | ->end() |
||
| 436 | ; |
||
| 437 | |||
| 438 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 439 | ->beginCommand('publish') |
||
| 440 | ->setDescription('Manage public resources') |
||
| 441 | ->setHandler(function () use ($puli) { |
||
| 442 | return new PublishCommandHandler( |
||
| 443 | $puli->getAssetManager(), |
||
| 444 | $puli->getInstallationManager(), |
||
| 445 | $puli->getServerManager() |
||
| 446 | ); |
||
| 447 | }) |
||
| 448 | |||
| 449 | ->beginOptionCommand('add') |
||
| 450 | ->markAnonymous() |
||
| 451 | ->addArgument('path', Argument::REQUIRED, 'The resource path') |
||
| 452 | ->addArgument('server', Argument::REQUIRED, 'The resource path') |
||
| 453 | ->addArgument('server-path', Argument::OPTIONAL, 'The path in the document root of the server', '/') |
||
| 454 | ->addOption('force', 'f', Option::NO_VALUE, 'Map even if the server does not exist') |
||
| 455 | ->setHandlerMethod('handleAdd') |
||
| 456 | ->end() |
||
| 457 | |||
| 458 | ->beginOptionCommand('update', 'u') |
||
| 459 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the mapping') |
||
| 460 | ->addOption('path', null, Option::REQUIRED_VALUE, 'The resource path') |
||
| 461 | ->addOption('server', 's', Option::REQUIRED_VALUE | Option::PREFER_LONG_NAME, 'The name of the target server') |
||
| 462 | ->addOption('server-path', null, Option::REQUIRED_VALUE, 'The path in the document root') |
||
| 463 | ->addOption('force', 'f', Option::NO_VALUE, 'Update even if the server does not exist') |
||
| 464 | ->setHandlerMethod('handleUpdate') |
||
| 465 | ->end() |
||
| 466 | |||
| 467 | ->beginOptionCommand('delete', 'd') |
||
| 468 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the mapping') |
||
| 469 | ->setHandlerMethod('handleDelete') |
||
| 470 | ->end() |
||
| 471 | |||
| 472 | ->beginOptionCommand('list', 'l') |
||
| 473 | ->markDefault() |
||
| 474 | ->setHandlerMethod('handleList') |
||
| 475 | ->end() |
||
| 476 | |||
| 477 | ->beginOptionCommand('install') |
||
| 478 | ->addArgument('server', Argument::OPTIONAL, 'The server to install. By default, all servers are installed') |
||
| 479 | ->setHandlerMethod('handleInstall') |
||
| 480 | ->end() |
||
| 481 | ->end() |
||
| 482 | ; |
||
| 483 | |||
| 484 | $this |
||
| 485 | ->beginCommand('self-update') |
||
| 486 | ->setDescription('Update Puli to the latest version.') |
||
| 487 | ->addOption('stable', null, Option::NO_VALUE, 'Update to the latest stable version') |
||
| 488 | ->addOption('unstable', null, Option::NO_VALUE, 'Update to the latest unstable version') |
||
| 489 | ->setHandler(function () { |
||
| 490 | return new SelfUpdateCommandHandler(); |
||
| 491 | }) |
||
| 492 | ->enableIf('phar://' === substr(__DIR__, 0, 7)) |
||
| 493 | ->end() |
||
| 494 | ; |
||
| 495 | |||
| 496 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 497 | ->beginCommand('server') |
||
| 498 | ->setDescription('Manage your asset servers') |
||
| 499 | ->setHandler(function () use ($puli) { |
||
| 500 | return new ServerCommandHandler($puli->getServerManager()); |
||
| 501 | }) |
||
| 502 | |||
| 503 | ->beginOptionCommand('list') |
||
| 504 | ->markDefault() |
||
| 505 | ->setHandlerMethod('handleList') |
||
| 506 | ->end() |
||
| 507 | |||
| 508 | ->beginOptionCommand('add', 'a') |
||
| 509 | ->addArgument('name', Argument::REQUIRED, 'The name of the added server') |
||
| 510 | ->addArgument('document-root', Argument::REQUIRED, 'The document root of the server') |
||
| 511 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'The name of the used installer', 'symlink') |
||
| 512 | ->addOption('url-format', null, Option::REQUIRED_VALUE, 'The format of the generated resource URLs', Server::DEFAULT_URL_FORMAT) |
||
| 513 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Additional parameters required by the resource installer') |
||
| 514 | ->setHandlerMethod('handleAdd') |
||
| 515 | ->end() |
||
| 516 | |||
| 517 | ->beginOptionCommand('update', 'u') |
||
| 518 | ->addArgument('name', Argument::REQUIRED, 'The name of the updated server') |
||
| 519 | ->addOption('document-root', null, Option::REQUIRED_VALUE, 'The document root of the server') |
||
| 520 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'The name of the used installer', 'symlink') |
||
| 521 | ->addOption('url-format', null, Option::REQUIRED_VALUE, 'The format of the generated resource URLs', Server::DEFAULT_URL_FORMAT) |
||
| 522 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Additional parameters required by the resource installer') |
||
| 523 | ->addOption('unset-param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Parameters to remove from the server') |
||
| 524 | ->setHandlerMethod('handleUpdate') |
||
| 525 | ->end() |
||
| 526 | |||
| 527 | ->beginOptionCommand('delete', 'd') |
||
| 528 | ->addArgument('name', Argument::REQUIRED, 'The name of the server to remove') |
||
| 529 | ->setHandlerMethod('handleDelete') |
||
| 530 | ->end() |
||
| 531 | ->end() |
||
| 532 | ; |
||
| 533 | |||
| 534 | $this |
||
| 535 | ->beginCommand('tree') |
||
| 536 | ->setDescription('Print the contents of a resource as tree') |
||
| 537 | ->addArgument('path', Argument::OPTIONAL, 'The path of a resource', '/') |
||
| 538 | ->setHandler(function () use ($puli) { |
||
| 539 | return new TreeCommandHandler($puli->getRepository()); |
||
| 540 | }) |
||
| 541 | ->end() |
||
| 542 | ; |
||
| 543 | |||
| 544 | $this |
||
|
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig, but not in Webmozart\Console\Api\Config\ApplicationConfig.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 545 | ->beginCommand('type') |
||
| 546 | ->setDescription('Display and change binding types') |
||
| 547 | ->setHandler(function () use ($puli) { |
||
| 548 | return new TypeCommandHandler( |
||
| 549 | $puli->getDiscoveryManager(), |
||
| 550 | $puli->getModuleManager()->getModules() |
||
| 551 | ); |
||
| 552 | }) |
||
| 553 | |||
| 554 | ->beginOptionCommand('define') |
||
| 555 | ->addArgument('name', Argument::REQUIRED, 'The name of the binding type') |
||
| 556 | ->addOption('description', null, Option::REQUIRED_VALUE, 'A human-readable description of the type') |
||
| 557 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A type parameter in the form <key> or <key>=<value>', null, 'key=value') |
||
| 558 | ->addOption('param-description', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A human-readable parameter description in the form <key>=<description>', null, 'key=description') |
||
| 559 | ->addOption('force', 'f', Option::NO_VALUE, 'Add type even if another type exists with the same name') |
||
| 560 | ->setHandlerMethod('handleDefine') |
||
| 561 | ->end() |
||
| 562 | |||
| 563 | ->beginSubCommand('list') |
||
| 564 | ->markDefault() |
||
| 565 | ->addOption('root', null, Option::NO_VALUE, 'Show types of the root module') |
||
| 566 | ->addOption('module', 'm', Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Show types of a module', null, 'module') |
||
| 567 | ->addOption('all', 'a', Option::NO_VALUE, 'Show types of all modules') |
||
| 568 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled types') |
||
| 569 | ->addOption('duplicate', null, Option::NO_VALUE, 'Show duplicate types') |
||
| 570 | ->setHandlerMethod('handleList') |
||
| 571 | ->end() |
||
| 572 | |||
| 573 | ->beginOptionCommand('update', 'u') |
||
| 574 | ->addArgument('name', Argument::REQUIRED, 'The name of the binding type') |
||
| 575 | ->addOption('description', null, Option::REQUIRED_VALUE, 'A human-readable description of the type') |
||
| 576 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A type parameter in the form <key> or <key>=<value>', null, 'key=value') |
||
| 577 | ->addOption('param-description', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A human-readable parameter description in the form <key>=<description>', null, 'key=description') |
||
| 578 | ->addOption('unset-param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Unset a type parameter', null, 'key') |
||
| 579 | ->setHandlerMethod('handleUpdate') |
||
| 580 | ->end() |
||
| 581 | |||
| 582 | ->beginOptionCommand('delete', 'd') |
||
| 583 | ->addArgument('name', Argument::REQUIRED, 'The name of the binding type') |
||
| 584 | ->setHandlerMethod('handleDelete') |
||
| 585 | ->end() |
||
| 586 | ->end() |
||
| 587 | ; |
||
| 588 | |||
| 589 | $this |
||
| 590 | ->beginCommand('upgrade') |
||
| 591 | ->setDescription('Upgrades puli.json to the newest version') |
||
| 592 | ->addArgument('version', Argument::OPTIONAL, 'The version to upgrade/downgrade to', ModuleFileConverter::VERSION) |
||
| 593 | ->setHandler(function () use ($puli) { |
||
| 594 | return new UpgradeCommandHandler($puli->getRootModuleFileManager()); |
||
| 595 | }) |
||
| 596 | ->end() |
||
| 597 | ; |
||
| 598 | |||
| 599 | $this |
||
| 600 | ->beginCommand('url') |
||
| 601 | ->setDescription('Generate the URL of a public resource') |
||
| 602 | ->addArgument('path', Argument::REQUIRED | Argument::MULTI_VALUED, 'The path of a resource') |
||
| 603 | ->setHandler(function () use ($puli) { |
||
| 604 | return new UrlCommandHandler( |
||
| 605 | $puli->getUrlGenerator(), |
||
| 606 | $puli->getRepository() |
||
| 607 | ); |
||
| 608 | }) |
||
| 609 | ->end() |
||
| 610 | ; |
||
| 611 | } |
||
| 612 | } |
||
| 613 |
It seems like the method you are trying to call exists only in some of the possible types.
Let’s take a look at an example:
Available Fixes
Add an additional type-check:
Only allow a single type to be passed if the variable comes from a parameter: