Przeglądaj źródła

Add RepositoryPass, fixes #10

Jordi Boggiano 13 lat temu
rodzic
commit
2b007e1d00

+ 1 - 1
src/Packagist/WebBundle/Command/UpdatePackagesCommand.php

@@ -53,7 +53,7 @@ EOF
         $doctrine = $this->getContainer()->get('doctrine');
 
         $logger = $this->getContainer()->get('logger');
-        $provider = $this->getContainer()->get('repository_provider');
+        $provider = $this->getContainer()->get('packagist.repository_provider');
 
         $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getStalePackages();
 

+ 45 - 0
src/Packagist/WebBundle/DependencyInjection/Compiler/RepositoryPass.php

@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of Packagist.
+ *
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
+ *     Nils Adermann <naderman@naderman.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Packagist\WebBundle\DependencyInjection\Compiler;
+
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+
+/**
+ * Adds VCS repository providers to the main repository_provider service
+ *
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class RepositoryPass implements CompilerPassInterface
+{
+    public function process(ContainerBuilder $container)
+    {
+        if (!$container->hasDefinition('packagist.repository_provider')) {
+            return;
+        }
+
+        $provider = $container->getDefinition('packagist.repository_provider');
+        $providers = array();
+
+        foreach ($container->findTaggedServiceIds('packagist.repository_provider') as $id => $tags) {
+            $providers[$id] = isset($tags[0]['priority']) ? (int) $tags[0]['priority'] : 0;
+        }
+
+        arsort($providers);
+
+        foreach ($providers as $id => $priority) {
+            $provider->addMethodCall('addProvider', array(new Reference($id)));
+        }
+    }
+}

+ 8 - 0
src/Packagist/WebBundle/PackagistWebBundle.php

@@ -13,10 +13,18 @@
 namespace Packagist\WebBundle;
 
 use Symfony\Component\HttpKernel\Bundle\Bundle;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Packagist\WebBundle\DependencyInjection\Compiler\RepositoryPass;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class PackagistWebBundle extends Bundle
 {
+    public function build(ContainerBuilder $container)
+    {
+        parent::build($container);
+
+        $container->addCompilerPass(new RepositoryPass());
+    }
 }

+ 4 - 4
src/Packagist/WebBundle/Resources/config/services.yml

@@ -1,8 +1,8 @@
 services:
-    git_repository_provider:
+    packagist.repository_provider.github:
         class: Packagist\WebBundle\Repository\Provider\GitHubProvider
+        tags:
+            - { name: packagist.repository_provider, priority: 100 }
 
-    repository_provider:
+    packagist.repository_provider:
         class: Packagist\WebBundle\Repository\RepositoryProvider
-        calls:
-            - [ addProvider, [ @git_repository_provider ] ]