Browse Source

Enable validating loader to drop invalid data

Jordi Boggiano 12 years ago
parent
commit
4ce0e28d7b

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

@@ -20,6 +20,8 @@ use Symfony\Component\Console\Output\OutputInterface;
 use Packagist\WebBundle\Package\Updater;
 use Composer\Repository\VcsRepository;
 use Composer\Factory;
+use Composer\Package\Loader\ValidatingArrayLoader;
+use Composer\Package\Loader\ArrayLoader;
 use Composer\IO\NullIO;
 use Composer\IO\ConsoleIO;
 
@@ -82,6 +84,7 @@ class UpdatePackagesCommand extends ContainerAwareCommand
         $input->setInteractive(false);
         $io = $verbose ? new ConsoleIO($input, $output, $this->getApplication()->getHelperSet()) : new NullIO;
         $config = Factory::createConfig();
+        $loader = new ValidatingArrayLoader(new ArrayLoader());
 
         while ($ids) {
             $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getFullPackages(array_splice($ids, 0, 50));
@@ -92,6 +95,7 @@ class UpdatePackagesCommand extends ContainerAwareCommand
                 }
                 try {
                     $repository = new VcsRepository(array('url' => $package->getRepository()), $io, $config);
+                    $repository->setLoader($loader);
                     $updater->update($package, $repository, $flags, $start);
                 } catch (\Exception $e) {
                     $output->writeln('<error>Exception: '.$e->getMessage().' at '.$e->getFile().':'.$e->getLine().', skipping package '.$package->getName().'.</error>');

+ 4 - 0
src/Packagist/WebBundle/Controller/ApiController.php

@@ -15,6 +15,8 @@ namespace Packagist\WebBundle\Controller;
 use Composer\IO\NullIO;
 use Composer\Factory;
 use Composer\Repository\VcsRepository;
+use Composer\Package\Loader\ValidatingArrayLoader;
+use Composer\Package\Loader\ArrayLoader;
 use Packagist\WebBundle\Package\Updater;
 use Packagist\WebBundle\Entity\Package;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
@@ -110,12 +112,14 @@ class ApiController extends Controller
 
         $updated = false;
         $config = Factory::createConfig();
+        $loader = new ValidatingArrayLoader(new ArrayLoader());
         foreach ($user->getPackages() as $package) {
             if (preg_match('{'.preg_quote($payloadRepositoryChunk).'(\.git)?$}', $package->getRepository())) {
                 set_time_limit(3600);
                 $updated = true;
 
                 $repository = new VcsRepository(array('url' => $package->getRepository()), new NullIO, $config);
+                $repository->setLoader($loader);
                 $package->setAutoUpdated(true);
                 $em->flush();
                 $updater->update($package, $repository);

+ 4 - 0
src/Packagist/WebBundle/Controller/WebController.php

@@ -15,6 +15,8 @@ namespace Packagist\WebBundle\Controller;
 use Composer\IO\NullIO;
 use Composer\Factory;
 use Composer\Repository\VcsRepository;
+use Composer\Package\Loader\ValidatingArrayLoader;
+use Composer\Package\Loader\ArrayLoader;
 use Doctrine\ORM\NoResultException;
 use Packagist\WebBundle\Form\Type\AddMaintainerRequestType;
 use Packagist\WebBundle\Form\Model\AddMaintainerRequest;
@@ -373,6 +375,8 @@ class WebController extends Controller
 
                 $config = Factory::createConfig();
                 $repository = new VcsRepository(array('url' => $package->getRepository()), new NullIO, $config);
+                $loader = new ValidatingArrayLoader(new ArrayLoader());
+                $repository->setLoader($loader);
                 $updater->update($package, $repository, Updater::UPDATE_TAGS);
             }