浏览代码

Remove extra '/' when findShortestPath $from is a directory

gmsantosxl 10 年之前
父节点
当前提交
84c9c30b63
共有 2 个文件被更改,包括 13 次插入1 次删除
  1. 12 1
      src/Composer/Util/Filesystem.php
  2. 1 0
      tests/Composer/Test/Util/FilesystemTest.php

+ 12 - 1
src/Composer/Util/Filesystem.php

@@ -316,7 +316,7 @@ class Filesystem
         $to = lcfirst($this->normalizePath($to));
 
         if ($directories) {
-            $from .= '/dummy_file';
+            $from .= $this->isDirectory($from) ? 'dummy_file' : '/dummy_file';
         }
 
         if (dirname($from) === dirname($to)) {
@@ -460,6 +460,17 @@ class Filesystem
     {
         return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/]|\.\.[\\\\/]|[a-z0-9_.-]+[\\\\/])}i', $path);
     }
+    
+    /**
+     * Return if the given path is a directory
+     *
+     * @param  string $path
+     * @return bool
+     */
+    public static function isDirectory($path)
+    {
+        return substr($path, -1) === '/';
+    }
 
     public static function getPlatformPath($path)
     {

+ 1 - 0
tests/Composer/Test/Util/FilesystemTest.php

@@ -112,6 +112,7 @@ class FilesystemTest extends TestCase
             array('/foo/bar_vendor', '/foo/bar', '../bar', true),
             array('/foo/bar_vendor', '/foo/bar/src', '../bar/src', true),
             array('/foo/bar_vendor/src2', '/foo/bar/src/lib', '../../bar/src/lib', true),
+            array('C:/', 'C:/foo/bar/', "foo/bar", true),
         );
     }