Jelajahi Sumber

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"
            }
        }
    }
}
Jordi Boggiano 13 tahun lalu
induk
melakukan
aeab3c16fd
2 mengubah file dengan 57 tambahan dan 0 penghapusan
  1. 1 0
      bin/composer
  2. 56 0
      src/Composer/Repository/PackageRepository.php

+ 1 - 0
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);

+ 56 - 0
src/Composer/Repository/PackageRepository.php

@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * 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 <j.boggiano@seld.be>
+ */
+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);
+        }
+    }
+}