Browse Source

Merge pull request #2649 from zczapran/bugfix/git_exclude_filter_rules_too_broad

[Archiver] Rules in GitExcludeFilter are too broad
Jordi Boggiano 11 years ago
parent
commit
f72066de90

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

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

+ 36 - 0
tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php

@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Package\Archiver;
+
+use Composer\Package\Archiver\GitExcludeFilter;
+
+class GitExcludeFilterTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider patterns
+     */
+    public function testPatternEscape($ignore, $expected)
+    {
+        $filter = new GitExcludeFilter('/');
+
+        $this->assertEquals($expected, $filter->parseGitIgnoreLine($ignore));
+    }
+
+    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)),
+        );
+    }
+}