Exemplo n.º 1
0
 /**
  * Add a package to the list of packages to be downloaded
  *
  * This function checks to see if an identical package is already being downloaded,
  * and manages removing duplicates or erroring out on a conflict
  * @param \PEAR2\Pyrus\Package $package
  */
 static function prepare(PackageInterface $package)
 {
     $fullPackageName = $package->channel . '/' . $package->name;
     if ($package->isPlugin()) {
         if (!isset(Main::$options['install-plugins'])) {
             // Check the plugin registry so we can provide more info
             $command = 'install';
             if (Config::current()->pluginregistry->exists($package->name, $package->channel)) {
                 $command = 'upgrade';
             }
             Logger::log(0, 'Skipping plugin ' . $fullPackageName . PHP_EOL . 'Plugins modify the installer and cannot be installed at the same time as regular packages.' . PHP_EOL . 'Add the -p option to manage plugins, for example:' . PHP_EOL . ' php pyrus.phar ' . $command . ' -p ' . $fullPackageName);
             return;
         }
     }
     if (!isset(static::$installPackages[$fullPackageName])) {
         // checking of validity for upgrade is done by \PEAR2\Pyrus\Package\Dependency::retrieve(),
         // so all deps that make it this far can be added
         if (Config::current()->registry->exists($package->name, $package->channel)) {
             if (!$package->isUpgradeable() && !isset(Main::$options['force'])) {
                 // installed package is the same or newer version than this one
                 Logger::log(1, 'Skipping installed package ' . $fullPackageName);
                 return;
             }
         }
         static::$installPackages[$fullPackageName] = $package;
         return;
     }
     $clone = static::$installPackages[$fullPackageName];
     if (!$package->isStatic() && $clone->isStatic()) {
         // always prefer explicitly versioned over abstract
         return;
     }
     if ($package->isStatic() && !$clone->isStatic()) {
         // always prefer explicitly versioned over abstract
         static::$installPackages[$fullPackageName] = $package;
         return;
     }
     if (!$package->isStatic() && !$clone->isStatic()) {
         // identical, ignore this package
         return;
     }
     // compare version
     if ($package->isStatic() && $clone->isStatic() && $package->version['release'] === $clone->version['release']) {
         // identical, ignore this package
         return;
     }
     static::rollback();
     throw new Installer\Exception('Cannot install ' . $fullPackageName . ', two conflicting' . ' versions were requested (' . $package->version['release'] . ' and ' . $clone->version['release'] . ')');
 }