diff --git a/src/Composer/Command/GlobalCommand.php b/src/Composer/Command/GlobalCommand.php new file mode 100644 index 000000000..d37958939 --- /dev/null +++ b/src/Composer/Command/GlobalCommand.php @@ -0,0 +1,79 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Command; + +use Composer\Installer; +use Composer\Factory; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\StringInput; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * @author Jordi Boggiano + */ +class GlobalCommand extends Command +{ + protected function configure() + { + $this + ->setName('global') + ->setDescription('Allows running commands in the global composer dir ($COMPOSER_HOME).') + ->setDefinition(array( + new InputArgument('command-name', InputArgument::REQUIRED, ''), + new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), + )) + ->setHelp(<<\AppData\Roaming\Composer on Windows +and /home//.composer on unix systems. + +EOT + ) + ; + } + + public function run(InputInterface $input, OutputInterface $output) + { + // extract real command name + $tokens = preg_split('{\s+}', $input->__toString()); + $args = array(); + foreach ($tokens as $token) { + if ($token && $token[0] !== '-') { + $args[] = $token; + if (count($args) >= 2) { + break; + } + } + } + + // show help for this command if no command was found + if (count($args) < 2) { + return parent::run($input, $output); + } + + // change to global dir + $config = Factory::createConfig(); + chdir($config->get('home')); + + // create new input without "global" command prefix + $input = new StringInput(preg_replace('{\bg(?:l(?:o(?:b(?:a(?:l)?)?)?)?)?\b}', '', $input->__toString(), 1)); + + return $this->getApplication()->get($args[1])->run($input, $output); + } +} diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index f4021c958..0d1e45500 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -225,6 +225,7 @@ class Application extends BaseApplication $commands[] = new Command\DiagnoseCommand(); $commands[] = new Command\RunScriptCommand(); $commands[] = new Command\LicensesCommand(); + $commands[] = new Command\GlobalCommand(); if ('phar:' === substr(__FILE__, 0, 5)) { $commands[] = new Command\SelfUpdateCommand();