From ba87cfc6d17515b7d81cc8ce10470fb8555c8b59 Mon Sep 17 00:00:00 2001 From: Jan Prieser Date: Thu, 13 Jun 2013 15:52:52 +0200 Subject: [PATCH 1/3] find artifacts recursively in given path uses regex to filter file extension --- src/Composer/Repository/ArtifactRepository.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 7910d62f7..869e4757f 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -47,7 +47,11 @@ class ArtifactRepository extends ArrayRepository private function scanDirectory($path) { $io = $this->io; - foreach (new \RecursiveDirectoryIterator($path) as $file) { + + $directory = new \RecursiveDirectoryIterator($path); + $iterator = new \RecursiveIteratorIterator($directory); + $regex = new \RegexIterator($iterator, '/^.+\.(zip|phar)$/i'); + foreach ($regex as $file) { /* @var $file \SplFileInfo */ if (!$file->isFile()) { continue; From c6b61854bcdae87bed2d53ec202db8645368aae1 Mon Sep 17 00:00:00 2001 From: Jan Prieser Date: Thu, 13 Jun 2013 16:20:52 +0200 Subject: [PATCH 2/3] changed Test to make sure subfolder packages are found correctly --- .../Test/Repository/ArtifactRepositoryTest.php | 1 + .../artifacts/subfolder/not-an-artifact.zip | Bin 0 -> 4140 bytes .../Fixtures/artifacts/subfolder/package1.zip | Bin 0 -> 191 bytes 3 files changed, 1 insertion(+) create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/package1.zip diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index ac1bcbbe4..5ffae515a 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -25,6 +25,7 @@ class ArtifactRepositoryTest extends TestCase 'vendor0/package0-0.0.1', 'composer/composer-1.0.0-alpha6', 'vendor1/package2-4.3.2', + 'vendor3/package1-5.4.3', ); $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts'); diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/subfolder/not-an-artifact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3e788dcc25dee43047431a63c85c3b7217a8fdae GIT binary patch literal 4140 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 literal 0 HcmV?d00001 From 42119dde6b96827aac7a8ef30c179bd7fa39cbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Klein?= Date: Sun, 16 Jun 2013 04:50:16 +0200 Subject: [PATCH 3/3] Use github protocols setting for push urls --- src/Composer/Downloader/GitDownloader.php | 3 ++- .../Test/Downloader/GitDownloaderTest.php | 24 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Composer/Downloader/GitDownloader.php b/src/Composer/Downloader/GitDownloader.php index 590d43068..e90357d04 100644 --- a/src/Composer/Downloader/GitDownloader.php +++ b/src/Composer/Downloader/GitDownloader.php @@ -380,7 +380,8 @@ class GitDownloader extends VcsDownloader { // set push url for github projects if (preg_match('{^(?:https?|git)://github.com/([^/]+)/([^/]+?)(?:\.git)?$}', $package->getSourceUrl(), $match)) { - $pushUrl = 'git@github.com:'.$match[1].'/'.$match[2].'.git'; + $protocols = $this->config->get('github-protocols'); + $pushUrl = $protocols[0] === 'git' ? 'git@github.com:'.$match[1].'/'.$match[2].'.git' : $package->getSourceUrl(); $cmd = sprintf('git remote set-url --push origin %s', escapeshellarg($pushUrl)); $this->process->execute($cmd, $ignoredOutput, $path); } diff --git a/tests/Composer/Test/Downloader/GitDownloaderTest.php b/tests/Composer/Test/Downloader/GitDownloaderTest.php index 842a8d3f0..a01a422dd 100644 --- a/tests/Composer/Test/Downloader/GitDownloaderTest.php +++ b/tests/Composer/Test/Downloader/GitDownloaderTest.php @@ -137,7 +137,19 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase $downloader->download($packageMock, 'composerPath'); } - public function testDownloadUsesCustomVariousProtocolsForGithub() + public function pushUrlProvider() + { + return array( + array('git', 'git@github.com:composer/composer.git'), + array('https', 'https://github.com/composer/composer'), + array('http', 'https://github.com/composer/composer') + ); + } + + /** + * @dataProvider pushUrlProvider + */ + public function testDownloadAndSetPushUrlUseCustomVariousProtocolsForGithub($protocol, $pushUrl) { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) @@ -151,18 +163,24 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue('1.0.0')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); - $expectedGitCommand = $this->winCompat("git clone 'http://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'http://github.com/composer/composer' && git fetch composer"); + $expectedGitCommand = $this->winCompat("git clone '{$protocol}://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer '{$protocol}://github.com/composer/composer' && git fetch composer"); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitCommand)) ->will($this->returnValue(0)); + $expectedGitCommand = $this->winCompat("git remote set-url --push origin '{$pushUrl}'"); + $processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedGitCommand), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath'))) + ->will($this->returnValue(0)); + $processExecutor->expects($this->exactly(4)) ->method('execute') ->will($this->returnValue(0)); $config = new Config(); - $config->merge(array('config' => array('github-protocols' => array('http')))); + $config->merge(array('config' => array('github-protocols' => array($protocol)))); $downloader = $this->getDownloaderMock(null, $config, $processExecutor); $downloader->download($packageMock, 'composerPath');