コード例 #1
0
 /**
  * Merge extra config into a RootPackage
  *
  * @param RootPackage $root
  * @param PluginState $state
  */
 public function mergeExtra(RootPackage $root, PluginState $state)
 {
     $extra = $this->package->getExtra();
     unset($extra['merge-plugin']);
     if (!$state->shouldMergeExtra() || empty($extra)) {
         return;
     }
     $rootExtra = $root->getExtra();
     if ($state->replaceDuplicateLinks()) {
         $root->setExtra(array_merge($rootExtra, $extra));
     } else {
         foreach ($extra as $key => $value) {
             if (isset($rootExtra[$key])) {
                 $this->logger->debug("Ignoring duplicate <comment>{$key}</comment> in " . "<comment>{$this->path}</comment> extra config.");
             }
         }
         $root->setExtra(array_merge($extra, $rootExtra));
     }
 }
コード例 #2
0
ファイル: MergePlugin.php プロジェクト: papillon-cendre/d8
 /**
  * Read a JSON file and merge its contents
  *
  * @param RootPackageInterface $root
  * @param string $path
  */
 protected function mergeFile(RootPackageInterface $root, $path)
 {
     if (isset($this->loadedFiles[$path])) {
         $this->logger->debug("Already merged <comment>{$path}</comment>");
         return;
     } else {
         $this->loadedFiles[$path] = true;
     }
     $this->logger->info("Loading <comment>{$path}</comment>...");
     $package = new ExtraPackage($path, $this->composer, $this->logger);
     $package->mergeInto($root, $this->state);
     if ($this->state->recurseIncludes()) {
         $this->mergeFiles($package->getIncludes(), false);
         $this->mergeFiles($package->getRequires(), true);
     }
 }
コード例 #3
0
ファイル: MergePlugin.php プロジェクト: dmyerson/d8ecs
 /**
  * Handle an event callback following an install or update command. If our
  * plugin was installed during the run then trigger an update command to
  * process any merge-patterns in the current config.
  *
  * @param Event $event
  */
 public function onPostInstallOrUpdate(Event $event)
 {
     // @codeCoverageIgnoreStart
     if ($this->state->isFirstInstall()) {
         $this->state->setFirstInstall(false);
         $this->logger->debug('<comment>' . 'Running additional update to apply merge settings' . '</comment>');
         $config = $this->composer->getConfig();
         $preferSource = $config->get('preferred-install') == 'source';
         $preferDist = $config->get('preferred-install') == 'dist';
         $installer = Installer::create($event->getIO(), Factory::create($event->getIO(), null, false));
         $installer->setPreferSource($preferSource);
         $installer->setPreferDist($preferDist);
         $installer->setDevMode($event->isDevMode());
         $installer->setDumpAutoloader($this->state->shouldDumpAutoloader());
         $installer->setOptimizeAutoloader($this->state->shouldOptimizeAutoloader());
         if ($this->state->forceUpdate()) {
             // Force update mode so that new packages are processed rather
             // than just telling the user that composer.json and
             // composer.lock don't match.
             $installer->setUpdate(true);
         }
         $installer->run();
     }
     // @codeCoverageIgnoreEnd
 }