Ver código fonte

Added functions.

xaav 13 anos atrás
pai
commit
1d524fd26f

+ 3 - 1
app/config/config.yml

@@ -59,4 +59,6 @@ fos_user:
     db_driver:     orm
     firewall_name: main
     user_class:  Packagist\WebBundle\Entity\User
-    #from_email:     { webmaster@example.com: Admin }
+    #from_email:     { webmaster@example.com: Admin }
+    
+packagist_web: ~

+ 11 - 4
src/Packagist/WebBundle/Command/UpdatePackagesCommand.php

@@ -39,6 +39,7 @@ class UpdatePackagesCommand extends ContainerAwareCommand
             ))
             ->setDescription('Updates packages')
             ->setHelp(<<<EOF
+
 EOF
             )
         ;
@@ -51,6 +52,7 @@ EOF
     {
         $em = $this->getContainer()->get('doctrine')->getEntityManager();
         $logger = $this->getContainer()->get('logger');
+        $provider = $this->getContainer()->get('git_repository_provider');
 
         $qb = $em->createQueryBuilder();
         $qb->select('p, v')
@@ -63,21 +65,26 @@ EOF
             $repo = $package->getRepository();
 
             // Process GitHub via API
-            if (preg_match('#^(?:https?|git)://github\.com/([^/]+)/(.+?)(?:\.git)?$#', $repo, $match)) {
+            if ($provider->supports($repo)) {
+
+                $gitRepo = $provider->getRepository($repo);
+
+
+
                 $owner = $match[1];
                 $repository = $match[2];
                 $output->writeln('Importing '.$owner.'/'.$repository);
 
-                $repoData = json_decode(file_get_contents('http://github.com/api/v2/json/repos/show/'.$owner.'/'.$repository), true);
+                $repoData = $gitRepo->getRepoData();
                 if (!$repoData) {
                     $output->writeln('Err: Could not fetch data from: '.$repo.', skipping.');
                     continue;
                 }
 
-                $tagsData = json_decode(file_get_contents('http://github.com/api/v2/json/repos/show/'.$owner.'/'.$repository.'/tags'), true);
+                $tagsData = $gitRepo->getTagsData();
 
                 foreach ($tagsData['tags'] as $tag => $hash) {
-                    $data = json_decode(file_get_contents('https://raw.github.com/'.$owner.'/'.$repository.'/'.$hash.'/composer.json'), true);
+                    $data = $gitRepo->getComposerFile($hash);
 
                     // silently skip tags without composer.json, this is expected.
                     if (!$data) {

+ 18 - 0
src/Packagist/WebBundle/DependencyInjection/PackagistWebExtension.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Packagist\WebBundle\DependencyInjection;
+
+use Symfony\Component\Config\FileLocator;
+
+use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\HttpKernel\DependencyInjection\Extension;
+
+class PackagistWebExtension extends Extension
+{
+    public function load(array $configs, ContainerBuilder $container)
+    {
+        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+        $loader->load('services.yml');
+    }
+}

+ 8 - 1
src/Packagist/WebBundle/Repository/Provider/GitRepositoryProvider.php

@@ -2,10 +2,17 @@
 
 namespace Packagist\WebBundle\Repository\Provider;
 
+use Packagist\WebBundle\Repository\Repository\GitRepository;
+
 class GitRepositoryProvider implements RepositoryProviderInterface
 {
     public function getRepository($url)
     {
-        //
+        return new GitRepository($url);
+    }
+
+    public function supports($url)
+    {
+        return preg_match('#^(?:https?|git)://github\.com/([^/]+)/(.+?)(?:\.git)?$#', $repo, $match);
     }
 }

+ 22 - 2
src/Packagist/WebBundle/Repository/Repository/GitRepository.php

@@ -4,8 +4,28 @@ namespace Packagist\WebBundle\Repository\Repository;
 
 class GitRepository implements RepositoryInterface
 {
-    public function getComposerFile()
+    protected $owner;
+    protected $repository;
+
+    public function __construct($url)
+    {
+        preg_match('#^(?:https?|git)://github\.com/([^/]+)/(.+?)(?:\.git)?$#', $repo, $match);
+        $this->owner = $match[1];
+        $this->repository = $match[2];
+    }
+
+    public function getComposerFile($hash)
+    {
+        return json_decode(file_get_contents('https://raw.github.com/'.$this->owner.'/'.$this->repository.'/'.$hash.'/composer.json'), true);
+    }
+
+    public function getRepoData()
+    {
+        return json_decode(file_get_contents('http://github.com/api/v2/json/repos/show/'.$this->owner.'/'.$this->repository), true);
+    }
+
+    public function getTagsData()
     {
-        //
+        return json_decode(file_get_contents('http://github.com/api/v2/json/repos/show/'.$this->owner.'/'.$this->repository.'/tags'), true);
     }
 }

+ 3 - 0
src/Packagist/WebBundle/Resources/config/services.yml

@@ -0,0 +1,3 @@
+services:
+    git_repository_provider:
+        class: Packagist\WebBundle\Repository\Provider\GitRepositoryProvider