Преглед изворни кода

Add ability to use a Regexp when updating packages

Aurélien Thieriot пре 12 година
родитељ
комит
159badb06b

+ 4 - 0
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.

+ 7 - 1
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;
     }
 
     /**

+ 45 - 0
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)