From 21109ada221ffe993c1ce294bdf1c858f76a983d Mon Sep 17 00:00:00 2001 From: Sandy Pleyte Date: Thu, 27 Feb 2014 15:17:15 +0100 Subject: [PATCH] Fix for #2739 (and #1755), added support for directory excludes in the .gitignore file like /directory or directory/ --- .../Package/Archiver/BaseExcludeFilter.php | 4 +-- .../Archiver/ArchivableFilesFinderTest.php | 35 +++++++++++++++++++ .../Package/Archiver/GitExcludeFilterTest.php | 4 +-- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/Composer/Package/Archiver/BaseExcludeFilter.php b/src/Composer/Package/Archiver/BaseExcludeFilter.php index f8c390e41..032a32d35 100644 --- a/src/Composer/Package/Archiver/BaseExcludeFilter.php +++ b/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); } diff --git a/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php b/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php index 536f2128c..7200a699f 100644 --- a/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php +++ b/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 diff --git a/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php b/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php index a6d473a1e..e2eef1722 100644 --- a/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php +++ b/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)), ); } }