public function installPackage(PackageInterface $package, InstallerInterface $installer, $isDependency = false)
    {
        if (false !== strpos($package->getName(), 'github')) {
            // install from a github endpoint
            $name = basename($package->getName(), '.git');
            $repoUrl = $package->getName();
            $package = new Package($name, $package->getRequiredVersion());
            $this->repository->setUrl($repoUrl)->setHttpClient($this->githubClient);
            $package->setRepository($this->repository);
            $packageTag = $this->repository->findPackage($package->getRequiredVersion());
            if (is_null($packageTag)) {
                throw new RuntimeException(sprintf('Cannot find package %s version %s.', $package->getName(), $package->getRequiredVersion()));
            }
        } else {
            $packageTag = $this->getPackageTag($package, true);
            $package->setRepository($this->repository);
        }

        $package->setVersion($packageTag);

        $this->updateBowerFile($package, $isDependency);

        // if package is already installed, match current version with latest available version
        if ($this->isPackageInstalled($package)) {
            $this->output->writelnInfoPackage($package, 'validate', sprintf('%s against %s#%s', $packageTag, $package->getName(), $package->getRequiredVersion()));
            $packageBower = $this->config->getPackageBowerFileContent($package);
            if ($packageTag == $packageBower['version']) {
                // if version is fully matching, there's no need to install
                return;
            }
        }

        $this->cachePackage($package);

        $this->output->writelnInstalledPackage($package);
        $installer->install($package);

        $overrides = $this->config->getOverrideFor($package->getName());
        if (array_key_exists('dependencies', $overrides)) {
            $dependencies = $overrides['dependencies'];
        } else {
            $dependencies = $package->getRequires();
        }
        if (!empty($dependencies)) {
            foreach ($dependencies as $name => $version) {
                $depPackage = new Package($name, $version);
                if (!$this->isPackageInstalled($depPackage)) {
                    $this->installPackage($depPackage, $installer, true);
                } elseif ($this->isNeedUpdate($depPackage)) {
                    $this->updatePackage($depPackage, $installer);
                }
            }
        }
    }
public function installPackage(PackageInterface $package, InstallerInterface $installer, $isDependency = false)
    {
        if (false !== strpos($package->getName(), 'github')) {
            // install from a github endpoint
            $name = basename($package->getName(), '.git');
            $repoUrl = $package->getName();
            $package = new Package($name, $package->getRequiredVersion());
            $this->repository->setUrl($repoUrl)->setHttpClient($this->githubClient);
            $package->setRepository($this->repository);
            $packageTag = $this->repository->findPackage($package->getRequiredVersion());
            if (is_null($packageTag)) {
                throw new RuntimeException(sprintf('Cannot find package %s version %s.', $package->getName(), $package->getRequiredVersion()));
            }
        } else {
            $packageTag = $this->getPackageTag($package, true);
            $package->setRepository($this->repository);
        }

        $package->setVersion($packageTag);

        $this->updateBowerFile($package, $isDependency);

        // if package is already installed, match current version with latest available version
        if ($this->isPackageInstalled($package)) {
            $this->output->writelnInfoPackage($package, 'validate', sprintf('%s against %s#%s', $packageTag, $package->getName(), $package->getRequiredVersion()));
            $packageBower = $this->config->getPackageBowerFileContent($package);
            if ($packageTag == $packageBower['version']) {
                // if version is fully matching, there's no need to install
                return;
            }
        }

        $this->cachePackage($package);

        $this->output->writelnInstalledPackage($package);
        $installer->install($package);

        $overrides = $this->config->getOverrideFor($package->getName());
        if (array_key_exists('dependencies', $overrides)) {
            $dependencies = $overrides['dependencies'];
        } else {
            $dependencies = $package->getRequires();
        }
        if (!empty($dependencies)) {
            foreach ($dependencies as $name => $version) {
                $depPackage = new Package($name, $version);
                if (!$this->isPackageInstalled($depPackage)) {
                    $this->installPackage($depPackage, $installer, true);
                } elseif ($this->isNeedUpdate($depPackage)) {
                    $this->updatePackage($depPackage, $installer);
                }
            }
        }
    }
public function installPackage ( PackageInterface $ package , InstallerInterface $ installer , $ isDependency = false ) { if ( false !== strpos ( $ package -> getName ( ) , 'github' ) ) { // install from a github endpoint $ name = basename ( $ package -> getName ( ) , '.git' ) ; $ repoUrl = $ package -> getName ( ) ; $ package = new Package ( $ name , $ package -> getRequiredVersion ( ) ) ; $ this -> repository -> setUrl ( $ repoUrl ) -> setHttpClient ( $ this -> githubClient ) ; $ package -> setRepository ( $ this -> repository ) ; $ packageTag = $ this -> repository -> findPackage ( $ package -> getRequiredVersion ( ) ) ; if ( is_null ( $ packageTag ) ) { throw new RuntimeException ( sprintf ( 'Cannot find package %s version %s.' , $ package -> getName ( ) , $ package -> getRequiredVersion ( ) ) ) ; } } else { $ packageTag = $ this -> getPackageTag ( $ package , true ) ; $ package -> setRepository ( $ this -> repository ) ; } $ package -> setVersion ( $ packageTag ) ; $ this -> updateBowerFile ( $ package , $ isDependency ) ; // if package is already installed, match current version with latest available version if ( $ this -> isPackageInstalled ( $ package ) ) { $ this -> output -> writelnInfoPackage ( $ package , 'validate' , sprintf ( '%s against %s#%s' , $ packageTag , $ package -> getName ( ) , $ package -> getRequiredVersion ( ) ) ) ; $ packageBower = $ this -> config -> getPackageBowerFileContent ( $ package ) ; if ( $ packageTag == $ packageBower [ 'version' ] ) { // if version is fully matching, there's no need to install return ; } } $ this -> cachePackage ( $ package ) ; $ this -> output -> writelnInstalledPackage ( $ package ) ; $ installer -> install ( $ package ) ; $ overrides = $ this -> config -> getOverrideFor ( $ package -> getName ( ) ) ; if ( array_key_exists ( 'dependencies' , $ overrides ) ) { $ dependencies = $ overrides [ 'dependencies' ] ; } else { $ dependencies = $ package -> getRequires ( ) ; } if ( ! empty ( $ dependencies ) ) { foreach ( $ dependencies as $ name => $ version ) { $ depPackage = new Package ( $ name , $ version ) ; if ( ! $ this -> isPackageInstalled ( $ depPackage ) ) { $ this -> installPackage ( $ depPackage , $ installer , true ) ; } elseif ( $ this -> isNeedUpdate ( $ depPackage ) ) { $ this -> updatePackage ( $ depPackage , $ installer ) ; } } } }
Install a single package

@param PackageInterface   $package
@param InstallerInterface $installer
@param bool               $isDependency
Install a single package