Browse Source

Merge pull request #4193 from alcohol/fix-gitignore-parsing

Fix #4183 - exclude pattern containing delimiter used throws error
Jordi Boggiano 9 years ago
parent
commit
05c4911f6c

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

@@ -123,7 +123,7 @@ abstract class BaseExcludeFilter
     protected function generatePattern($rule)
     {
         $negate = false;
-        $pattern = '#';
+        $pattern = '{';
 
         if (strlen($rule) && $rule[0] === '!') {
             $negate = true;
@@ -143,6 +143,6 @@ abstract class BaseExcludeFilter
         // 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);
+        return array($pattern . '}', $negate, false);
     }
 }

+ 7 - 4
tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php

@@ -75,7 +75,8 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             'parameters.yml',
             'parameters.yml.dist',
             '!important!.txt',
-            '!important_too!.txt'
+            '!important_too!.txt',
+            '#weirdfile',
         );
 
         foreach ($fileTree as $relativePath) {
@@ -98,7 +99,7 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             '!/prefixB.foo',
             '/prefixA.foo',
             'prefixC.*',
-            '!*/*/*/prefixC.foo'
+            '!*/*/*/prefixC.foo',
         );
 
         $this->finder = new ArchivableFilesFinder($this->sources, $excludes);
@@ -106,6 +107,7 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
         $this->assertArchivableFiles(array(
             '/!important!.txt',
             '/!important_too!.txt',
+            '/#weirdfile',
             '/A/prefixA.foo',
             '/A/prefixD.foo',
             '/A/prefixE.foo',
@@ -170,7 +172,8 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             'H/**',
             'J/',
             'parameters.yml',
-            '\!important!.txt'
+            '\!important!.txt',
+            '\#*',
         )));
 
         // git does not currently support negative git attributes
@@ -181,7 +184,7 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             //'!/prefixB.foo export-ignore',
             '/prefixA.foo export-ignore',
             'prefixC.* export-ignore',
-            //'!/*/*/prefixC.foo export-ignore'
+            //'!/*/*/prefixC.foo export-ignore',
         )));
 
         $this->finder = new ArchivableFilesFinder($this->sources, array());

+ 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)),
         );
     }
 }