Browse Source

Disallow overriding commands with scripts

Jordi Boggiano 10 years ago
parent
commit
a8adbfeb9f
2 changed files with 8 additions and 4 deletions
  1. 3 3
      src/Composer/Command/RunScriptCommand.php
  2. 5 1
      src/Composer/Console/Application.php

+ 3 - 3
src/Composer/Command/RunScriptCommand.php

@@ -89,12 +89,12 @@ EOT
             putenv('PATH='.realpath($binDir).PATH_SEPARATOR.getenv('PATH'));
         }
 
-        $args = $input->getArguments();
+        $args = $input->getArgument('args');
 
         if (in_array($script, $this->commandEvents)) {
-            return $composer->getEventDispatcher()->dispatchCommandEvent($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args['args']);
+            return $composer->getEventDispatcher()->dispatchCommandEvent($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args);
         }
 
-        return $composer->getEventDispatcher()->dispatchScript($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args['args']);
+        return $composer->getEventDispatcher()->dispatchScript($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args);
     }
 }

+ 5 - 1
src/Composer/Console/Application.php

@@ -117,7 +117,11 @@ class Application extends BaseApplication
             if (isset($composer['scripts']) && is_array($composer['scripts'])) {
                 foreach ($composer['scripts'] as $script => $dummy) {
                     if (!defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) {
-                        $this->add(new Command\ScriptAliasCommand($script));
+                        if ($this->has($script)) {
+                            $output->writeln('<warning>A script named '.$script.' would override a native Composer function and has been skipped</warning>');
+                        } else {
+                            $this->add(new Command\ScriptAliasCommand($script));
+                        }
                     }
                 }
             }