ソースを参照

switched to use the ProcessExecutor utility class

Johannes M. Schmitt 12 年 前
コミット
e3a93d5c84
1 ファイル変更15 行追加3 行削除
  1. 15 3
      src/Composer/Util/Filesystem.php

+ 15 - 3
src/Composer/Util/Filesystem.php

@@ -18,6 +18,13 @@ namespace Composer\Util;
  */
 class Filesystem
 {
+    private $processExecutor;
+
+    public function __construct(ProcessExecutor $executor = null)
+    {
+        $this->processExecutor = $executor ?: new ProcessExecutor();
+    }
+
     public function removeDirectory($directory)
     {
         if (!is_dir($directory)) {
@@ -62,9 +69,14 @@ class Filesystem
             return;
         }
 
-        exec('mv '.escapeshellarg($source).' '.escapeshellarg($target), $output, $returnCode);
-        if (0 !== $returnCode) {
-            throw new \RuntimeException(sprintf('Could not rename "%s" to "%s".', $source, $target));
+        // We do not use PHP's "rename" function here since it does not support
+        // the case where $source, and $target are located on different partitions.
+        if (0 !== $this->processExecutor->execute('mv '.escapeshellarg($source).' '.escapeshellarg($target))) {
+            if (true === @rename($source, $target)) {
+                return;
+            }
+
+            throw new \RuntimeException(sprintf('Could not rename "%s" to "%s".', $source, $target));
         }
     }