From 4b176f11f2e4532bca937aca9a85705446b5da91 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Sun, 24 Mar 2013 20:27:50 +0100 Subject: [PATCH 01/13] added artifact repository initial functionality --- src/Composer/Factory.php | 1 + .../Repository/ArtifactRepository.php | 78 ++++++++++++++++++ .../Repository/ArtifactRepositoryTest.php | 36 ++++++++ .../Fixtures/artifacts/package0.zip | Bin 0 -> 234 bytes .../Fixtures/artifacts/package2.zip | Bin 0 -> 234 bytes 5 files changed, 115 insertions(+) create mode 100644 src/Composer/Repository/ArtifactRepository.php create mode 100644 tests/Composer/Test/Repository/ArtifactRepositoryTest.php create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/package0.zip create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/package2.zip diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index 9234f46f8..72a4699a1 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -281,6 +281,7 @@ class Factory $rm->setRepositoryClass('git', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('svn', 'Composer\Repository\VcsRepository'); $rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository'); + $rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository'); return $rm; } diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php new file mode 100644 index 000000000..4cf2b4b52 --- /dev/null +++ b/src/Composer/Repository/ArtifactRepository.php @@ -0,0 +1,78 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Repository; + +/** + * @author Serge Smertin + */ +use Composer\IO\IOInterface; +use Composer\Config; +use Composer\Json\JsonFile; +use Composer\Package\Loader\LoaderInterface; +use Composer\Package\Version\VersionParser; +use Composer\Package\Loader\ArrayLoader; + +class ArtifactRepository extends ArrayRepository +{ + protected $path; + + /** @var LoaderInterface */ + protected $loader; + + public function __construct(array $repoConfig, IOInterface $io, Config $config, array $drivers = null) + { + $this->path = $repoConfig['url']; + } + + protected function initialize() + { + parent::initialize(); + $this->versionParser = new VersionParser; + if (!$this->loader) { + $this->loader = new ArrayLoader($this->versionParser); + } + + $this->getDirectoryPackages($this->path); + } + + private function getDirectoryPackages($path) + { + foreach(new \RecursiveDirectoryIterator($path) as $file) { + /* @var $file \SplFileInfo */ + if(!$file->isFile()) { + continue; + } + + $package = $this->getComposerInformation($file); + if(!$package) { + // @todo add log + continue; + } + + $package = $this->loader->load($package); + + $this->addPackage($package); + } + } + + private function getComposerInformation(\SplFileInfo $file) + { + $config = "zip://{$file->getPathname()}#composer.json"; + $json = @file_get_contents($config); + if(!$json) { + return false; + } + + return JsonFile::parseJson($json, $config); + } +} diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php new file mode 100644 index 000000000..af412420e --- /dev/null +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.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\Repository; + +use Composer\Test\TestCase; +use Composer\IO\NullIO; +use Composer\Config; +use Composer\Package\Package; + +class ArtifactRepositoryTest extends TestCase +{ + public function testExtractsConfigsFromZipArchives() { + $expectedPackages = array( + 'vendor0/package0-0.0.1', + 'vendor1/package2-4.3.2', + ); + + $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts'); + $repo = new ArtifactRepository($coordinates, new NullIO(), new Config()); + + $foundPackages = array_map(function(Package $package) { + return "{$package->getPrettyName()}-{$package->getPrettyVersion()}"; + }, $repo->getPackages()); + + $this->assertEquals($expectedPackages, $foundPackages); + } +} diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/package0.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/package0.zip new file mode 100644 index 0000000000000000000000000000000000000000..855c6a64d211e845addf9bd7d9c02c913968b2c5 GIT binary patch literal 234 zcmWIWW@Zs#-~hs3b1R$}kN_`(07G(qZb5!=YLQ-6aeiKC1P=qhzkgtamw(__MiGY9 z&w?13mhL%nCqz}7b?K%nd#3zRV*cB7OUqYBwWjks-QyC-d)QwkaY+NCv7Bej> zWX{a_?2`;H7+)|Bd9;d^A;6oRBU7R13&`F;AP(?mWD;dYI0spdmw^Z7IEN*TASRmQ XIN**8@MdKLDPRObcOcyh;xGUJG2lL3 literal 0 HcmV?d00001 diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/package2.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/package2.zip new file mode 100644 index 0000000000000000000000000000000000000000..6710580594d5faece782963255765fb4ee74bc1e GIT binary patch literal 234 zcmWIWW@Zs#-~d9|g%wT=NPw3?fFU_Qw;;bbwMZ|kI6p5mf``G=-#-w9zcPw2tbP{6 zz_fJFkvk!(+N?`AUD-3`kCOA>rXx?@9QhKWtSZ}4>So}jwOQZ4Fuu6jW`uK)<#-u*V2*QG(g Date: Mon, 25 Mar 2013 00:04:34 +0100 Subject: [PATCH 02/13] added logging for wrong files --- src/Composer/Repository/ArtifactRepository.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 4cf2b4b52..7ddac5ed3 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -32,6 +32,7 @@ class ArtifactRepository extends ArrayRepository public function __construct(array $repoConfig, IOInterface $io, Config $config, array $drivers = null) { $this->path = $repoConfig['url']; + $this->io = $io; } protected function initialize() @@ -55,7 +56,7 @@ class ArtifactRepository extends ArrayRepository $package = $this->getComposerInformation($file); if(!$package) { - // @todo add log + $this->io->write("File {$file->getBasename()} doesn't seem to hold a package"); continue; } From 586911f7a1a8825aab6c22a6206c2cc57c918aed Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Mon, 25 Mar 2013 00:41:10 +0100 Subject: [PATCH 03/13] added verbose logging for artifact directory scan --- .../Repository/ArtifactRepository.php | 63 +++++++++++-------- .../Repository/ArtifactRepositoryTest.php | 4 +- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 7ddac5ed3..2da787738 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -12,55 +12,56 @@ namespace Composer\Repository; -/** - * @author Serge Smertin - */ use Composer\IO\IOInterface; -use Composer\Config; use Composer\Json\JsonFile; -use Composer\Package\Loader\LoaderInterface; -use Composer\Package\Version\VersionParser; use Composer\Package\Loader\ArrayLoader; +/** + * @author Serge Smertin + */ class ArtifactRepository extends ArrayRepository { - protected $path; - /** @var LoaderInterface */ protected $loader; - public function __construct(array $repoConfig, IOInterface $io, Config $config, array $drivers = null) + protected $lookup; + + public function __construct(array $repoConfig, IOInterface $io) { - $this->path = $repoConfig['url']; + $this->loader = new ArrayLoader(); + $this->lookup = $repoConfig['url']; $this->io = $io; } protected function initialize() { parent::initialize(); - $this->versionParser = new VersionParser; - if (!$this->loader) { - $this->loader = new ArrayLoader($this->versionParser); - } - - $this->getDirectoryPackages($this->path); + $this->scanDirectory($this->lookup); } - private function getDirectoryPackages($path) + private function scanDirectory($path) { - foreach(new \RecursiveDirectoryIterator($path) as $file) { + $io = $this->io; + foreach (new \RecursiveDirectoryIterator($path) as $file) { /* @var $file \SplFileInfo */ - if(!$file->isFile()) { + if (!$file->isFile()) { continue; } $package = $this->getComposerInformation($file); - if(!$package) { - $this->io->write("File {$file->getBasename()} doesn't seem to hold a package"); + if (!$package) { + if ($io->isVerbose()) { + $msg = "File {$file->getBasename()} doesn't seem to hold a package"; + $io->write($msg); + } continue; } - $package = $this->loader->load($package); + if ($io->isVerbose()) { + $template = 'Found package %s (%s) in file %s'; + $msg = sprintf($template, $package->getName(), $package->getPrettyVersion(), $file->getBasename()); + $io->write($msg); + } $this->addPackage($package); } @@ -68,12 +69,22 @@ class ArtifactRepository extends ArrayRepository private function getComposerInformation(\SplFileInfo $file) { - $config = "zip://{$file->getPathname()}#composer.json"; - $json = @file_get_contents($config); - if(!$json) { + $composerFile = "zip://{$file->getPathname()}#composer.json"; + $json = @file_get_contents($composerFile); + if (!$json) { return false; } - return JsonFile::parseJson($json, $config); + $package = JsonFile::parseJson($json, $composerFile); + $package['dist'] = array( + 'type' => 'zip', + 'url' => $file->getRealPath(), + 'reference' => $file->getBasename(), + 'shasum' => sha1_file($file->getRealPath()) + ); + + $package = $this->loader->load($package); + + return $package; } } diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index af412420e..7ee7a1595 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -1,4 +1,5 @@ Date: Mon, 25 Mar 2013 01:00:12 +0100 Subject: [PATCH 04/13] added documentation entry about artifact usage --- doc/05-repositories.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/doc/05-repositories.md b/doc/05-repositories.md index efdd3872f..c6dc4d70e 100644 --- a/doc/05-repositories.md +++ b/doc/05-repositories.md @@ -478,6 +478,40 @@ Check [the satis GitHub repository](https://github.com/composer/satis) and the [Satis article](articles/handling-private-packages-with-satis.md) for more information. +### Artifact + +There are some cases, when there is no ability to have one of the previously +mentioned repository types online, even the VCS one. Typical example could be +cross-organisation library exchange though built artifacts. Of course, most +of the times they are private. To simplify maintainance, one can simply specify +repository of type `artifact` with a folder containing ZIP archives of those +private packages: + + { + "repositories": [ + { + "type": "artifact", + "url": "path/to/directory/with/zips/" + } + ], + "require": { + "private-vendor-one/core": "15.6.2", + "private-vendor-two/connectivity": "*", + "acme-corp/parser": "10.3.5" + } + } + +Each zip artifact is just a ZIP archive with `composer.json` in root folder: + + $ tar -tf acme-corp-parser-10.3.5.zip + composer.json + ... + +If there is two archives with different versions of a package, they would be +imported both. If archive with newer version would be put to artifact folder and +`update` command would be triggered, that version would replace previous, at it + logically seems. + ## Disabling Packagist You can disable the default Packagist repository by adding this to your From f25bfe09c545e62f687a0794080bf5f592fcb909 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Sun, 31 Mar 2013 20:51:37 +0200 Subject: [PATCH 05/13] added support for nested location of composer.json files within artifacts --- src/Composer/Repository/ArtifactRepository.php | 17 ++++++++++++++--- .../Test/Repository/ArtifactRepositoryTest.php | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 2da787738..8442ce9ba 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -69,12 +69,23 @@ class ArtifactRepository extends ArrayRepository private function getComposerInformation(\SplFileInfo $file) { - $composerFile = "zip://{$file->getPathname()}#composer.json"; - $json = @file_get_contents($composerFile); - if (!$json) { + $zip = new \ZipArchive(); + $zip->open($file->getPathname()); + + if (0 == $zip->numFiles) { + return false; + } + + $foundFileIndex = $zip->locateName('composer.json', \ZipArchive::FL_NODIR); + if (false === $foundFileIndex) { return false; } + $configurationFileName = $zip->getNameIndex($foundFileIndex); + + $composerFile = "zip://{$file->getPathname()}#$configurationFileName"; + $json = file_get_contents($composerFile); + $package = JsonFile::parseJson($json, $composerFile); $package['dist'] = array( 'type' => 'zip', diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index 7ee7a1595..abf3eefd3 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -22,6 +22,7 @@ class ArtifactRepositoryTest extends TestCase public function testExtractsConfigsFromZipArchives() { $expectedPackages = array( + 'composer/composer-1.0.0-alpha6', 'vendor0/package0-0.0.1', 'vendor1/package2-4.3.2', ); From d45844fb6368781b62dc44033274b2ab5ae41672 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Sun, 31 Mar 2013 21:03:35 +0200 Subject: [PATCH 06/13] added fixture dummy artifacts --- .../Fixtures/artifacts/composer-1.0.0-alpha6.zip | Bin 0 -> 5227 bytes .../Fixtures/artifacts/not-an-artifact.zip | Bin 0 -> 4140 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/composer-1.0.0-alpha6.zip create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/not-an-artifact.zip diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/composer-1.0.0-alpha6.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/composer-1.0.0-alpha6.zip new file mode 100644 index 0000000000000000000000000000000000000000..e94843eb614f84703773840a0b898a10ee8e1874 GIT binary patch literal 5227 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 Date: Sun, 31 Mar 2013 21:44:48 +0200 Subject: [PATCH 07/13] set version to dev-master to artifacts without version --- src/Composer/Repository/ArtifactRepository.php | 4 ++++ .../Test/Repository/ArtifactRepositoryTest.php | 6 ++++-- .../Fixtures/artifacts/artifact-no-version.zip | Bin 0 -> 5134 bytes 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/artifact-no-version.zip diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 8442ce9ba..72ef46041 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -94,6 +94,10 @@ class ArtifactRepository extends ArrayRepository 'shasum' => sha1_file($file->getRealPath()) ); + if(empty($package['version'])) { + $package['version'] = 'dev-master'; + } + $package = $this->loader->load($package); return $package; diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index abf3eefd3..8c0cf0dbd 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -15,13 +15,15 @@ namespace Composer\Repository; use Composer\Test\TestCase; use Composer\IO\NullIO; use Composer\Config; -use Composer\Package\Package; +use Composer\Package\BasePackage; class ArtifactRepositoryTest extends TestCase { public function testExtractsConfigsFromZipArchives() { $expectedPackages = array( + 'composer/composer-dev-master', + 'composer/composer-1.0.x-dev', 'composer/composer-1.0.0-alpha6', 'vendor0/package0-0.0.1', 'vendor1/package2-4.3.2', @@ -30,7 +32,7 @@ class ArtifactRepositoryTest extends TestCase $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts'); $repo = new ArtifactRepository($coordinates, new NullIO(), new Config()); - $foundPackages = array_map(function(Package $package) { + $foundPackages = array_map(function(BasePackage $package) { return "{$package->getPrettyName()}-{$package->getPrettyVersion()}"; }, $repo->getPackages()); diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/artifact-no-version.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/artifact-no-version.zip new file mode 100644 index 0000000000000000000000000000000000000000..a60ba1fa92debd4df6471250da69e9e4a879882a GIT binary patch literal 5134 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 literal 0 HcmV?d00001 From ac75a9e6d8b997ba050e68efd0d170ab4f07a6a5 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Sun, 31 Mar 2013 21:53:34 +0200 Subject: [PATCH 08/13] travis locale version order fixed --- tests/Composer/Test/Repository/ArtifactRepositoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index 8c0cf0dbd..5d74e089f 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -22,9 +22,9 @@ class ArtifactRepositoryTest extends TestCase public function testExtractsConfigsFromZipArchives() { $expectedPackages = array( + 'composer/composer-1.0.0-alpha6', 'composer/composer-dev-master', 'composer/composer-1.0.x-dev', - 'composer/composer-1.0.0-alpha6', 'vendor0/package0-0.0.1', 'vendor1/package2-4.3.2', ); From b0aa98f287db60b223a31d216a9f9b55d7e0b3d8 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Sun, 31 Mar 2013 22:01:55 +0200 Subject: [PATCH 09/13] modified test in order not to depend on sorting order --- tests/Composer/Test/Repository/ArtifactRepositoryTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index 5d74e089f..1351f75e8 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -22,10 +22,10 @@ class ArtifactRepositoryTest extends TestCase public function testExtractsConfigsFromZipArchives() { $expectedPackages = array( + 'vendor0/package0-0.0.1', 'composer/composer-1.0.0-alpha6', 'composer/composer-dev-master', 'composer/composer-1.0.x-dev', - 'vendor0/package0-0.0.1', 'vendor1/package2-4.3.2', ); @@ -36,6 +36,9 @@ class ArtifactRepositoryTest extends TestCase return "{$package->getPrettyName()}-{$package->getPrettyVersion()}"; }, $repo->getPackages()); - $this->assertEquals($expectedPackages, $foundPackages); + sort($expectedPackages); + sort($foundPackages); + + $this->assertSame($expectedPackages, $foundPackages); } } From 5c46affdd5858810ffc7eac141d43a60664bd9a6 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Wed, 3 Apr 2013 23:45:31 +0200 Subject: [PATCH 10/13] changed documentation typo --- doc/05-repositories.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/05-repositories.md b/doc/05-repositories.md index c6dc4d70e..baabe0600 100644 --- a/doc/05-repositories.md +++ b/doc/05-repositories.md @@ -482,7 +482,7 @@ information. There are some cases, when there is no ability to have one of the previously mentioned repository types online, even the VCS one. Typical example could be -cross-organisation library exchange though built artifacts. Of course, most +cross-organisation library exchange through built artifacts. Of course, most of the times they are private. To simplify maintainance, one can simply specify repository of type `artifact` with a folder containing ZIP archives of those private packages: From 07920c48a692114f3a4eb8784ad696b063ddb9d0 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Wed, 3 Apr 2013 23:49:32 +0200 Subject: [PATCH 11/13] Removed dev-master as default version for versionless artifact --- src/Composer/Repository/ArtifactRepository.php | 4 ---- .../Test/Repository/ArtifactRepositoryTest.php | 2 -- .../Fixtures/artifacts/artifact-no-version.zip | Bin 5134 -> 0 bytes 3 files changed, 6 deletions(-) delete mode 100644 tests/Composer/Test/Repository/Fixtures/artifacts/artifact-no-version.zip diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 72ef46041..8442ce9ba 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -94,10 +94,6 @@ class ArtifactRepository extends ArrayRepository 'shasum' => sha1_file($file->getRealPath()) ); - if(empty($package['version'])) { - $package['version'] = 'dev-master'; - } - $package = $this->loader->load($package); return $package; diff --git a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php index 1351f75e8..ac1bcbbe4 100644 --- a/tests/Composer/Test/Repository/ArtifactRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArtifactRepositoryTest.php @@ -24,8 +24,6 @@ class ArtifactRepositoryTest extends TestCase $expectedPackages = array( 'vendor0/package0-0.0.1', 'composer/composer-1.0.0-alpha6', - 'composer/composer-dev-master', - 'composer/composer-1.0.x-dev', 'vendor1/package2-4.3.2', ); diff --git a/tests/Composer/Test/Repository/Fixtures/artifacts/artifact-no-version.zip b/tests/Composer/Test/Repository/Fixtures/artifacts/artifact-no-version.zip deleted file mode 100644 index a60ba1fa92debd4df6471250da69e9e4a879882a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5134 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 From 6cec5b0399b96c93fad478719c1cb6bb36a41919 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Thu, 4 Apr 2013 00:00:02 +0200 Subject: [PATCH 12/13] Added notice about need of zip extension --- src/Composer/Repository/ArtifactRepository.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index 8442ce9ba..0175c85f3 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -36,6 +36,14 @@ class ArtifactRepository extends ArrayRepository protected function initialize() { parent::initialize(); + + if (!extension_loaded('zip')) { + $msg = 'In order to use artifact repository, ' . + 'you need to have zip extension enabled'; + $this->io->write($msg); + return; + } + $this->scanDirectory($this->lookup); } From be0c1b0c2ed5eba01cddc5b1edee51a811de1327 Mon Sep 17 00:00:00 2001 From: Serge Smertin Date: Sat, 20 Apr 2013 13:36:45 +0200 Subject: [PATCH 13/13] fixed typo in doc --- doc/05-repositories.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/05-repositories.md b/doc/05-repositories.md index baabe0600..11913f9e0 100644 --- a/doc/05-repositories.md +++ b/doc/05-repositories.md @@ -483,7 +483,7 @@ information. There are some cases, when there is no ability to have one of the previously mentioned repository types online, even the VCS one. Typical example could be cross-organisation library exchange through built artifacts. Of course, most -of the times they are private. To simplify maintainance, one can simply specify +of the times they are private. To simplify maintenance, one can simply specify repository of type `artifact` with a folder containing ZIP archives of those private packages: