diff --git a/doc/03-cli.md b/doc/03-cli.md index 39634e06c..2a69d7540 100644 --- a/doc/03-cli.md +++ b/doc/03-cli.md @@ -96,6 +96,10 @@ If you just want to update a few packages and not all, you can list them as such $ php composer.phar update vendor/package vendor/package2 +You can also use a Regular expression pattern to update a bunch of packages at once: + + $ php composer.phar update vendor.* + ### Options * **--prefer-source:** Install packages from `source` when available. diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 88d4ff65f..dea566eca 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -624,7 +624,13 @@ class Installer throw new \LogicException('isUpdateable should only be called when a whitelist is present'); } - return isset($this->updateWhitelist[$package->getName()]); + foreach($this->updateWhitelist as $whiteListedPattern => $void) { + if(preg_match("#^".$whiteListedPattern."$#i", $package->getName())) { + return true; + } + } + + return false; } /** diff --git a/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test b/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test new file mode 100644 index 000000000..ff959dd3e --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test @@ -0,0 +1,45 @@ +--TEST-- +Update with a package whitelist only updates those corresponding to the pattern +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { "name": "vendor/Test-Package", "version": "2.0" }, + { "name": "vendor/NotMe", "version": "2.0" }, + { "name": "exact/Test-Package", "version": "2.0" }, + { "name": "notexact/TestPackage", "version": "2.0" }, + { "name": "all/Package1", "version": "2.0" }, + { "name": "all/Package2", "version": "2.0" }, + { "name": "another/another", "version": "2.0" } + ] + } + ], + "require": { + "vendor/Test-Package": "*.*", + "vendor/NotMe": "*.*", + "exact/Test-Package": "*.*", + "notexact/TestPackage": "*.*", + "all/Package1": "*.*", + "all/Package2": "*.*", + "another/another": "*.*" + } +} +--INSTALLED-- +[ + { "name": "vendor/Test-Package", "version": "1.0" }, + { "name": "vendor/NotMe", "version": "1.0" }, + { "name": "exact/Test-Package", "version": "1.0" }, + { "name": "notexact/TestPackage", "version": "1.0" }, + { "name": "all/Package1", "version": "1.0" }, + { "name": "all/Package2", "version": "1.0" }, + { "name": "another/another", "version": "1.0" } +] +--RUN-- +update vendor/Test.* exact/Test-Package notexact/Test all.* +--EXPECT-- +Updating vendor/Test-Package (1.0) to vendor/Test-Package (2.0) +Updating exact/Test-Package (1.0) to exact/Test-Package (2.0) +Updating all/Package1 (1.0) to all/Package1 (2.0) +Updating all/Package2 (1.0) to all/Package2 (2.0) \ No newline at end of file