From fec6afc1e4536ca5f61bd0f49be167cbc9b93490 Mon Sep 17 00:00:00 2001 From: Claudiu Cristea Date: Fri, 1 Dec 2023 16:42:08 +0200 Subject: [PATCH] Allow composer require --no-update (#1150) * Allow --no-update * Docs * Unused param * Pass the package to 'composer remove' --- docs/tasks/Composer.md | 1 + src/Task/Composer/Remove.php | 14 ++++++++++++++ src/Task/Composer/RequireDependency.php | 11 +++++++++++ tests/unit/Task/ComposerTest.php | 20 +++++++++++++++++--- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/docs/tasks/Composer.md b/docs/tasks/Composer.md index e6fb1369f..1cd80123e 100644 --- a/docs/tasks/Composer.md +++ b/docs/tasks/Composer.md @@ -702,6 +702,7 @@ $this->taskComposerRequire()->dependency('foo/bar', '^.2.4.8')->run(); * `noSuggest($noSuggest = null)` * `param bool` $noSuggest +* `noUpdate()` * `preferDist($preferDist = null)` * `param bool` $preferDist diff --git a/src/Task/Composer/Remove.php b/src/Task/Composer/Remove.php index 29f5c19c1..f4406089b 100644 --- a/src/Task/Composer/Remove.php +++ b/src/Task/Composer/Remove.php @@ -19,6 +19,20 @@ class Remove extends Base */ protected $action = 'remove'; + /** + * 'remove' is a keyword, so it cannot be a method name. + * + * @param array|string $project + * + * @return $this + */ + public function dependency(array|string $project): self + { + $project = (array)$project; + $this->args($project); + return $this; + } + /** * @param bool $dev * diff --git a/src/Task/Composer/RequireDependency.php b/src/Task/Composer/RequireDependency.php index 3828d638b..2c10cb67e 100644 --- a/src/Task/Composer/RequireDependency.php +++ b/src/Task/Composer/RequireDependency.php @@ -56,6 +56,17 @@ public function noSuggest($noSuggest = true) return $this; } + /** + * adds `no-update` option to composer + * + * @return $this + */ + public function noUpdate(): self + { + $this->option('--no-update'); + return $this; + } + /** * {@inheritdoc} */ diff --git a/tests/unit/Task/ComposerTest.php b/tests/unit/Task/ComposerTest.php index 48f33764a..a57381cd9 100644 --- a/tests/unit/Task/ComposerTest.php +++ b/tests/unit/Task/ComposerTest.php @@ -212,13 +212,17 @@ public function testComposerDumpAutoloadCommand() public function testComposerRemove() { $this->assertEquals( - 'composer remove --no-interaction', - (new \Robo\Task\Composer\Remove('composer'))->setConfig(new \Robo\Config())->getCommand() + $this->adjustQuotes("composer remove 'foo/bar' 'baz/qux' --no-interaction"), + (new \Robo\Task\Composer\Remove('composer')) + ->setConfig(new \Robo\Config()) + ->dependency(['foo/bar', 'baz/qux']) + ->getCommand() ); $this->assertEquals( - 'composer remove --dev --no-progress --no-update --no-interaction', + $this->adjustQuotes("composer remove 'foo/bar' --dev --no-progress --no-update --no-interaction"), (new \Robo\Task\Composer\Remove('composer')) ->setConfig(new \Robo\Config()) + ->dependency('foo/bar') ->dev() ->noProgress() ->noUpdate() @@ -355,6 +359,16 @@ public function testComposerRequireCommand() ->dependency(['a/b', 'x/y:^1']) ->getCommand() ); + + $this->assertEquals( + $this->adjustQuotes("composer require a/b 'x/y:^1' --no-interaction --no-suggest --no-update"), + (new \Robo\Task\Composer\RequireDependency('composer')) + ->setConfig(new \Robo\Config()) + ->dependency(['a/b', 'x/y:^1']) + ->noSuggest() + ->noUpdate() + ->getCommand() + ); } public function testComposerCreateProjectCommand()