Browse Source

Merge pull request #1110 from derrabus/working-dir-feature

Added global --working-dir option
Nils Adermann 12 năm trước cách đây
mục cha
commit
bcf75024c8
1 tập tin đã thay đổi với 19 bổ sung0 xóa
  1. 19 0
      src/Composer/Console/Application.php

+ 19 - 0
src/Composer/Console/Application.php

@@ -93,8 +93,13 @@ class Application extends BaseApplication
             $startTime = microtime(true);
         }
 
+        $oldWorkingDir = getcwd();
+        $this->switchWorkingDir($input);
+
         $result = parent::doRun($input, $output);
 
+        chdir($oldWorkingDir);
+
         if (isset($startTime)) {
             $output->writeln('<info>Memory usage: '.round(memory_get_usage() / 1024 / 1024, 2).'MB (peak: '.round(memory_get_peak_usage() / 1024 / 1024, 2).'MB), time: '.round(microtime(true) - $startTime, 2).'s');
         }
@@ -102,6 +107,19 @@ class Application extends BaseApplication
         return $result;
     }
 
+    /**
+     * @param InputInterface $input
+     * @throws \RuntimeException
+     */
+    private function switchWorkingDir(InputInterface $input)
+    {
+        $workingDir = $input->getParameterOption(array('--working-dir', '-d'), getcwd());
+        if (!is_dir($workingDir)) {
+            throw new \RuntimeException('Invalid working directoy specified.');
+        }
+        chdir($workingDir);
+    }
+
     /**
      * @param  bool               $required
      * @return \Composer\Composer
@@ -163,6 +181,7 @@ class Application extends BaseApplication
     {
         $definition = parent::getDefaultInputDefinition();
         $definition->addOption(new InputOption('--profile', null, InputOption::VALUE_NONE, 'Display timing and memory usage information'));
+        $definition->addOption(new InputOption('--working-dir', '-d', InputOption::VALUE_REQUIRED, 'If specified, use the given directory as working directory.'));
 
         return $definition;
     }