From aeab3c16fde91cb556f0b7d2b832cffce3ca416f Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sat, 22 Oct 2011 22:22:11 +0200 Subject: [PATCH] Add PackageRepository to define inline packages Example: { "repositories": { "Monolog": { "package": { "source": { "url": "git://github.com/Seldaek/monolog.git", "type": "git", "reference": "1.0.1" }, "version": "1.0.1", "name": "monolog/monolog" } } } } --- bin/composer | 1 + src/Composer/Repository/PackageRepository.php | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/Composer/Repository/PackageRepository.php diff --git a/bin/composer b/bin/composer index 89bcdbfb5..2907c19de 100755 --- a/bin/composer +++ b/bin/composer @@ -17,6 +17,7 @@ $rm->setLocalRepository(new Repository\FilesystemRepository(new JsonFile('.compo $rm->addRepository(new Repository\ComposerRepository('http://packagist.org')); $rm->setRepositoryClass('composer', 'Composer\Repository\ComposerRepository'); $rm->setRepositoryClass('pear', 'Composer\Repository\PearRepository'); +$rm->setRepositoryClass('package', 'Composer\Repository\PackageRepository'); // initialize download manager $dm = new Downloader\DownloadManager($preferSource = false); diff --git a/src/Composer/Repository/PackageRepository.php b/src/Composer/Repository/PackageRepository.php new file mode 100644 index 000000000..5def69030 --- /dev/null +++ b/src/Composer/Repository/PackageRepository.php @@ -0,0 +1,56 @@ + + * 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\Json\JsonFile; +use Composer\Package\PackageInterface; +use Composer\Package\Loader\ArrayLoader; +use Composer\Package\Dumper\ArrayDumper; + +/** + * Package repository. + * + * @author Jordi Boggiano + */ +class PackageRepository extends ArrayRepository +{ + private $config; + + /** + * Initializes filesystem repository. + * + * @param array $config package definition + */ + public function __construct(array $config) + { + $this->config = $config; + } + + /** + * Initializes repository (reads file, or remote address). + */ + protected function initialize() + { + parent::initialize(); + + if (!is_numeric(key($this->config))) { + $this->config = array($this->config); + } + + foreach ($this->config as $package) { + $loader = new ArrayLoader($this->repositoryManager); + $package = $loader->load($package); + $this->addPackage($package); + } + } +}