Browse Source

Merge remote-tracking branch 'dmanners/remove-all-from-one-vendor'

Jordi Boggiano 6 years ago
parent
commit
dc6027a0ad
1 changed files with 15 additions and 2 deletions
  1. 15 2
      src/Composer/Command/RemoveCommand.php

+ 15 - 2
src/Composer/Command/RemoveCommand.php

@@ -94,12 +94,25 @@ EOT
             if (isset($composer[$type][$package])) {
                 $json->removeLink($type, $composer[$type][$package]);
             } elseif (isset($composer[$altType][$package])) {
-                $io->writeError('<warning>'.$composer[$altType][$package].' could not be found in '.$type.' but it is present in '.$altType.'</warning>');
+                $io->writeError('<warning>' . $composer[$altType][$package] . ' could not be found in ' . $type . ' but it is present in ' . $altType . '</warning>');
                 if ($io->isInteractive()) {
-                    if ($io->askConfirmation('Do you want to remove it from '.$altType.' [<comment>yes</comment>]? ', true)) {
+                    if ($io->askConfirmation('Do you want to remove it from ' . $altType . ' [<comment>yes</comment>]? ', true)) {
                         $json->removeLink($altType, $composer[$altType][$package]);
                     }
                 }
+            } elseif (isset($composer[$type]) && $matches = preg_grep('#^'.$package.'#', array_keys($composer[$type]))) {
+                foreach ($matches as $matchedPackage) {
+                    $json->removeLink($type, $matchedPackage);
+                }
+            } elseif (isset($composer[$altType]) && $matches = preg_grep('#^'.$package.'#', array_keys($composer[$altType]))) {
+                foreach ($matches as $matchedPackage) {
+                    $io->writeError('<warning>' . $matchedPackage . ' could not be found in ' . $type . ' but it is present in ' . $altType . '</warning>');
+                    if ($io->isInteractive()) {
+                        if ($io->askConfirmation('Do you want to remove it from ' . $altType . ' [<comment>yes</comment>]? ', true)) {
+                            $json->removeLink($altType, $matchedPackage);
+                        }
+                    }
+                }
             } else {
                 $io->writeError('<warning>'.$package.' is not required in your composer.json and has not been removed</warning>');
             }