diff --git a/src/Composer/Package/Archiver/BaseExcludeFilter.php b/src/Composer/Package/Archiver/BaseExcludeFilter.php index bba2003a8..3c89919d2 100644 --- a/src/Composer/Package/Archiver/BaseExcludeFilter.php +++ b/src/Composer/Package/Archiver/BaseExcludeFilter.php @@ -140,7 +140,7 @@ abstract class BaseExcludeFilter $pattern .= '/'; } - $pattern .= substr(Finder\Glob::toRegex($rule), 2, -2); + $pattern .= substr(Finder\Glob::toRegex($rule), 2, -1); return array($pattern . '#', $negate, false); } diff --git a/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php b/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php new file mode 100644 index 000000000..a6d473a1e --- /dev/null +++ b/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php @@ -0,0 +1,36 @@ + + * Jordi Boggiano + * + * 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)), + ); + } +}