Prechádzať zdrojové kódy

Split force into two options using bit flags

Jordi Boggiano 13 rokov pred
rodič
commit
4b070e84d3

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

@@ -36,7 +36,8 @@ class UpdatePackagesCommand extends ContainerAwareCommand
             ->setName('packagist:update')
             ->setDefinition(array(
                 new InputOption('force', null, InputOption::VALUE_NONE, 'Force a re-crawl of all packages'),
-                new InputArgument('package', InputArgument::OPTIONAL, 'Package name to update (implicitly enables --force)'),
+                new InputOption('delete-before', null, InputOption::VALUE_NONE, 'Force deletion of all versions before an update'),
+                new InputArgument('package', InputArgument::OPTIONAL, 'Package name to update'),
             ))
             ->setDescription('Updates packages')
         ;
@@ -53,15 +54,22 @@ class UpdatePackagesCommand extends ContainerAwareCommand
 
         $doctrine = $this->getContainer()->get('doctrine');
 
+        $flags = 0;
+
         if ($package) {
             $packages = array($doctrine->getRepository('PackagistWebBundle:Package')->findOneByName($package));
-            $force = true;
+            $flags = Updater::UPDATE_TAGS;
         } elseif ($force) {
             $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getFullPackages();
+            $flags = Updater::UPDATE_TAGS;
         } else {
             $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getStalePackages();
         }
 
+        if ($input->getOption('delete-before')) {
+            $flags = Updater::DELETE_BEFORE;
+        }
+
         $updater = new Updater($doctrine);
         $start = new \DateTime();
 
@@ -74,7 +82,7 @@ class UpdatePackagesCommand extends ContainerAwareCommand
             }
             try {
                 $repository = new VcsRepository(array('url' => $package->getRepository()), $io);
-                $updater->update($package, $repository, $force, $start);
+                $updater->update($package, $repository, $flags, $start);
             } catch (\Exception $e) {
                 $output->writeln('<error>Exception: '.$e->getMessage().', skipping package '.$package->getName().'.</error>');
             }

+ 1 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -288,7 +288,7 @@ class WebController extends Controller
                 $updater = new Updater($doctrine);
 
                 $repository = new VcsRepository(array('url' => $package->getRepository()), new NullIO);
-                $updater->update($package, $repository);
+                $updater->update($package, $repository, Updater::UPDATE_TAGS);
             }
 
             return new Response('{"status": "success"}', 202);

+ 10 - 6
src/Packagist/WebBundle/Package/Updater.php

@@ -27,6 +27,9 @@ use Symfony\Bridge\Doctrine\RegistryInterface;
  */
 class Updater
 {
+    const UPDATE_TAGS = 1;
+    const DELETE_BEFORE = 2;
+
     /**
      * Doctrine
      * @var RegistryInterface
@@ -62,10 +65,11 @@ class Updater
      * Update a project
      *
      * @param PackageInterface $package
-     * @param boolean $clearExistingVersions
+     * @param RepositoryInterface $repository the repository instance used to update from
+     * @param int $flags a few of the constants of this class
      * @param DateTime $start
      */
-    public function update(Package $package, RepositoryInterface $repository, $clearExistingVersions = false, \DateTime $start = null)
+    public function update(Package $package, RepositoryInterface $repository, $flags = 0, \DateTime $start = null)
     {
         if (null === $start) {
             $start = new \DateTime();
@@ -82,7 +86,7 @@ class Updater
 
         $versionRepository = $this->doctrine->getRepository('PackagistWebBundle:Version');
 
-        if ($clearExistingVersions) {
+        if ($flags & self::DELETE_BEFORE) {
             foreach ($package->getVersions() as $version) {
                 $versionRepository->remove($version);
             }
@@ -95,7 +99,7 @@ class Updater
             if ($version instanceof AliasPackage) {
                 continue;
             }
-            $this->updateInformation($package, $version);
+            $this->updateInformation($package, $version, $flags);
             $em->flush();
         }
 
@@ -111,7 +115,7 @@ class Updater
         $em->flush();
     }
 
-    private function updateInformation(Package $package, PackageInterface $data)
+    private function updateInformation(Package $package, PackageInterface $data, $flags)
     {
         $em = $this->doctrine->getEntityManager();
         $version = new Version();
@@ -126,7 +130,7 @@ class Updater
                 if ($existingVersion->getReleasedAt() > $data->getReleaseDate()) {
                     return;
                 }
-                if ($existingVersion->getDevelopment()) {
+                if ($existingVersion->getDevelopment() || ($flags & self::UPDATE_TAGS)) {
                     $version = $existingVersion;
                     break;
                 }