Przeglądaj źródła

Introduce InstallerBinaryInterface

This is an interface for Installer which should support installing binary.
ATM there is only the `LibraryInstaller`.

It eases the check for supported method when installing binaries for all packages
Jeremy Benoist 9 lat temu
rodzic
commit
4f7fbbc879

+ 1 - 1
src/Composer/Installer.php

@@ -340,7 +340,7 @@ class Installer
             // force binaries re-generation
             $this->io->writeError('<info>Installing binaries files</info>');
             foreach ($localRepo->getPackages() as $package) {
-               $this->installationManager->installBinary($package);
+                $this->installationManager->installBinary($package);
             }
 
             $vendorDir = $this->config->get('vendor-dir');

+ 7 - 2
src/Composer/Installer/InstallationManager.php

@@ -137,9 +137,14 @@ class InstallationManager
     {
         try {
             $installer = $this->getInstaller($package->getType());
-            $installer->installBinary($package);
         } catch (\InvalidArgumentException $e) {
-            // the given installer doesn't support installing binaries
+            // no installer found for the current package type (@see `getInstaller()`)
+            return;
+        }
+
+        // if the given installer support installing binaries
+        if ($installer instanceof InstallerBinaryInterface) {
+            $installer->installBinary($package);
         }
     }
 

+ 31 - 0
src/Composer/Installer/InstallerBinaryInterface.php

@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Installer;
+
+use Composer\Package\PackageInterface;
+
+/**
+ * Interface for the package installation manager that handle binary installation.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+interface InstallerBinaryInterface
+{
+    /**
+     * Installs binary file for a specific package.
+     *
+     * @param PackageInterface $package package instance
+     */
+    public function installBinary(PackageInterface $package);
+}

+ 1 - 1
src/Composer/Installer/LibraryInstaller.php

@@ -25,7 +25,7 @@ use Composer\Util\Silencer;
  * @author Jordi Boggiano <j.boggiano@seld.be>
  * @author Konstantin Kudryashov <ever.zet@gmail.com>
  */
-class LibraryInstaller implements InstallerInterface
+class LibraryInstaller implements InstallerInterface, InstallerBinaryInterface
 {
     protected $composer;
     protected $vendorDir;