Browse Source

Merge remote-tracking branch 'davidolrik/master'

Jordi Boggiano 8 years ago
parent
commit
f63f1ff95f

+ 2 - 1
src/Composer/Command/ExecCommand.php

@@ -45,9 +45,10 @@ class ExecCommand extends BaseCommand
         $binDir = $composer->getConfig()->get('bin-dir');
         if ($input->getOption('list') || !$input->getArgument('binary')) {
             $bins = glob($binDir . '/*');
+            $bins = array_merge($bins, array_map(function($e) { return "$e (local)"; }, $composer->getPackage()->getBinaries()));
 
             if (!$bins) {
-                throw new \RuntimeException("No binaries found in bin-dir ($binDir)");
+                throw new \RuntimeException("No binaries found in composer.json or in bin-dir ($binDir)");
             }
 
             $this->getIO()->write(<<<EOT

+ 11 - 0
src/Composer/EventDispatcher/EventDispatcher.php

@@ -220,6 +220,17 @@ class EventDispatcher
                 } else {
                     $this->io->writeError(sprintf('> %s', $exec));
                 }
+
+                $possibleLocalBinaries = $this->composer->getPackage()->getBinaries();
+                if ( $possibleLocalBinaries ) {
+                    foreach ( $possibleLocalBinaries as $localExec ) {
+                        if ( preg_match("/\b${callable}$/", $localExec)) {
+                            $exec = str_replace($callable, $localExec, $exec);
+                            break;
+                        }
+                    }
+                }
+
                 if (0 !== ($exitCode = $this->process->execute($exec))) {
                     $this->io->writeError(sprintf('<error>Script %s handling the %s event returned with error code '.$exitCode.'</error>', $callable, $event->getName()));
 

+ 2 - 0
tests/Composer/Test/EventDispatcher/EventDispatcherTest.php

@@ -351,6 +351,8 @@ class EventDispatcherTest extends TestCase
         $composer = new Composer;
         $config = new Config;
         $composer->setConfig($config);
+        $package = $this->getMock('Composer\Package\RootPackageInterface');
+        $composer->setPackage($package);
 
         return $composer;
     }