Ver Fonte

Fix for #2739 (and #1755), added support for directory excludes in the .gitignore file like /directory or directory/

Sandy Pleyte há 11 anos atrás
pai
commit
21109ada22

+ 2 - 2
src/Composer/Package/Archiver/BaseExcludeFilter.php

@@ -140,8 +140,8 @@ abstract class BaseExcludeFilter
             $pattern .= '/';
         }
 
-        // remove delimiters as well as caret (^) from the regex
-        $pattern .= substr(Finder\Glob::toRegex($rule), 2, -1);
+        // remove delimiters as well as caret (^) and dollar sign ($) from the regex
+        $pattern .= substr(Finder\Glob::toRegex($rule), 2, -2) . '/*.*$';
 
         return array($pattern . '#', $negate, false);
     }

+ 35 - 0
tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php

@@ -46,6 +46,24 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             'B/sub/prefixD.foo',
             'B/sub/prefixE.foo',
             'B/sub/prefixF.foo',
+            'C/prefixA.foo',
+            'C/prefixB.foo',
+            'C/prefixC.foo',
+            'C/prefixD.foo',
+            'C/prefixE.foo',
+            'C/prefixF.foo',
+            'D/prefixA',
+            'D/prefixB',
+            'D/prefixC',
+            'D/prefixD',
+            'D/prefixE',
+            'D/prefixF',
+            'E/prefixA.foo',
+            'E/prefixB.foo',
+            'E/prefixC.foo',
+            'E/prefixD.foo',
+            'E/prefixE.foo',
+            'E/prefixF.foo',
             'toplevelA.foo',
             'toplevelB.foo',
             'prefixA.foo',
@@ -91,6 +109,20 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             '/B/sub/prefixD.foo',
             '/B/sub/prefixE.foo',
             '/B/sub/prefixF.foo',
+            '/C/prefixA.foo',
+            '/C/prefixD.foo',
+            '/C/prefixE.foo',
+            '/C/prefixF.foo',
+            '/D/prefixA',
+            '/D/prefixB',
+            '/D/prefixC',
+            '/D/prefixD',
+            '/D/prefixE',
+            '/D/prefixF',
+            '/E/prefixA.foo',
+            '/E/prefixD.foo',
+            '/E/prefixE.foo',
+            '/E/prefixF.foo',
             '/prefixB.foo',
             '/prefixD.foo',
             '/prefixE.foo',
@@ -120,6 +152,9 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             '!/*/*/prefixF.foo',
             '',
             'refixD.foo',
+            '/C',
+            'D/prefixA',
+            'E/'
         )));
 
         // git does not currently support negative git attributes

+ 2 - 2
tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php

@@ -29,8 +29,8 @@ class GitExcludeFilterTest extends \PHPUnit_Framework_TestCase
     public function patterns()
     {
         return array(
-            array('app/config/parameters.yml', array('#(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml$#', false, false)),
-            array('!app/config/parameters.yml', array('#(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml$#', true, false)),
+            array('app/config/parameters.yml', array('#(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml/*.*$#', false, false)),
+            array('!app/config/parameters.yml', array('#(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml/*.*$#', true, false)),
         );
     }
 }