diff --git a/src/Composer/Command/BumpCommand.php b/src/Composer/Command/BumpCommand.php index d7ae33488..b36908983 100644 --- a/src/Composer/Command/BumpCommand.php +++ b/src/Composer/Command/BumpCommand.php @@ -13,8 +13,10 @@ namespace Composer\Command; use Composer\Package\AliasPackage; +use Composer\Package\BasePackage; use Composer\Package\Locker; use Composer\Package\Version\VersionBumper; +use Composer\Pcre\Preg; use Composer\Util\Filesystem; use Symfony\Component\Console\Input\InputInterface; use Composer\Console\Input\InputArgument; @@ -129,6 +131,18 @@ EOT $tasks['require'] = $composer->getPackage()->getRequires(); } + $packagesFilter = $input->getArgument('packages'); + if (count($packagesFilter) > 0) { + $pattern = BasePackage::packageNamesToRegexp(array_unique(array_map('strtolower', $packagesFilter))); + foreach ($tasks as $key => $reqs) { + foreach ($reqs as $pkgName => $link) { + if (!Preg::isMatch($pattern, $pkgName)) { + unset($tasks[$key][$pkgName]); + } + } + } + } + $updates = []; foreach ($tasks as $key => $reqs) { foreach ($reqs as $pkgName => $link) { diff --git a/tests/Composer/Test/Command/BumpCommandTest.php b/tests/Composer/Test/Command/BumpCommandTest.php index 63e7cf30f..cf0dc3723 100644 --- a/tests/Composer/Test/Command/BumpCommandTest.php +++ b/tests/Composer/Test/Command/BumpCommandTest.php @@ -115,6 +115,28 @@ class BumpCommandTest extends TestCase ], ]; + yield 'bump only listed with packages arg' => [ + [ + 'require' => [ + 'first/pkg' => '^2.0', + 'second/pkg' => '3.*', + ], + 'require-dev' => [ + 'dev/pkg' => '~2.0', + ], + ], + ['packages' => ['first/pkg', 'dev/*']], + [ + 'require' => [ + 'first/pkg' => '^2.3.4', + 'second/pkg' => '3.*', + ], + 'require-dev' => [ + 'dev/pkg' => '^2.3.4.5', + ], + ], + ]; + yield 'bump works from installed repo without lock file' => [ [ 'require' => [