瀏覽代碼

Do not chdir unless necessary

Jordi Boggiano 12 年之前
父節點
當前提交
979db8539d
共有 1 個文件被更改,包括 12 次插入7 次删除
  1. 12 7
      src/Composer/Console/Application.php

+ 12 - 7
src/Composer/Console/Application.php

@@ -105,12 +105,16 @@ class Application extends BaseApplication
             $this->io->enableDebugging($startTime);
         }
 
-        $oldWorkingDir = getcwd();
-        $this->switchWorkingDir($input);
+        if ($newWorkDir = $this->getNewWorkingDir($input)) {
+            $oldWorkingDir = getcwd();
+            chdir($newWorkDir);
+        }
 
         $result = parent::doRun($input, $output);
 
-        chdir($oldWorkingDir);
+        if (isset($oldWorkingDir)) {
+            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');
@@ -123,13 +127,14 @@ class Application extends BaseApplication
      * @param  InputInterface    $input
      * @throws \RuntimeException
      */
-    private function switchWorkingDir(InputInterface $input)
+    private function getNewWorkingDir(InputInterface $input)
     {
-        $workingDir = $input->getParameterOption(array('--working-dir', '-d'), getcwd());
-        if (!is_dir($workingDir)) {
+        $workingDir = $input->getParameterOption(array('--working-dir', '-d'));
+        if (false !== $workingDir && !is_dir($workingDir)) {
             throw new \RuntimeException('Invalid working directory specified.');
         }
-        chdir($workingDir);
+
+        return $workingDir;
     }
 
     /**