瀏覽代碼

Log Swift Mailer errors instead of failing hard

Jordi Boggiano 12 年之前
父節點
當前提交
48df833dcb

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

@@ -108,10 +108,12 @@ class UpdatePackagesCommand extends ContainerAwareCommand
                     $repository->setLoader($loader);
                     $updater->update($package, $repository, $flags, $start);
                 } catch (InvalidRepositoryException $e) {
+                    $output->writeln('<error>Broken repository in '.$router->generate('view_package', array('name' => $package->getName()), true).': '.$e->getMessage().'</error>');
                     if ($input->getOption('notify-failures')) {
-                        $this->getContainer()->get('packagist.package_manager')->notifyUpdateFailure($package, $e, $io->getOutput());
+                        if (!$this->getContainer()->get('packagist.package_manager')->notifyUpdateFailure($package, $e, $io->getOutput())) {
+                            $output->writeln('<error>Failed to notify maintainers</error>');
+                        }
                     }
-                    $output->writeln('<error>Broken repository in '.$router->generate('view_package', array('name' => $package->getName()), true).': '.$e->getMessage().'</error>');
                 } catch (\Exception $e) {
                     $output->writeln('<error>Error updating '.$router->generate('view_package', array('name' => $package->getName()), true).' ['.get_class($e).']: '.$e->getMessage().' at '.$e->getFile().':'.$e->getLine().'</error>');
                 }

+ 13 - 2
src/Packagist/WebBundle/Model/PackageManager.php

@@ -16,6 +16,7 @@ use Swift_Mailer;
 use Twig_Environment;
 use Doctrine\ORM\EntityManager;
 use Packagist\WebBundle\Entity\Package;
+use Symfony\Component\HttpKernel\Log\LoggerInterface;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
@@ -25,13 +26,15 @@ class PackageManager
     protected $em;
     protected $mailer;
     protected $twig;
+    protected $logger;
     protected $options;
 
-    public function __construct(EntityManager $em, Swift_Mailer $mailer, Twig_Environment $twig, array $options)
+    public function __construct(EntityManager $em, Swift_Mailer $mailer, Twig_Environment $twig, LoggerInterface $logger, array $options)
     {
         $this->em = $em;
         $this->mailer = $mailer;
         $this->twig = $twig;
+        $this->logger = $logger;
         $this->options = $options;
     }
 
@@ -60,11 +63,19 @@ class PackageManager
                     ->setBody($body)
                 ;
 
-                $this->mailer->send($message);
+                try {
+                    $this->mailer->send($message);
+                } catch (\Swift_TransportException $e) {
+                    $this->logger->err('['.get_class($e).'] '.$e->getMessage());
+
+                    return false;
+                }
             }
 
             $package->setUpdateFailureNotified(true);
             $this->em->flush();
         }
+
+        return true;
     }
 }

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

@@ -68,6 +68,7 @@ services:
             - @doctrine.orm.entity_manager
             - @mailer
             - @twig
+            - @logger
             - { from: %mailer_from_email%, fromName: %mailer_from_name% }
 
     packagist.profile.form.type: