Esempio n. 1
0
 /**
  * Returns a list of Contao paths.
  * Multiple paths mean there's likely a problem with the installation (e.g. Contao in root and vendor folder).
  *
  * @param RootPackageInterface $package The package to check if a root has been specified in the extra section.
  *
  * @return array
  *
  * @throws RuntimeException When the current working directory could not be determined.
  */
 public static function findContaoRoots(RootPackageInterface $package = null)
 {
     $roots = array();
     $cwd = getcwd();
     if (!$cwd) {
         throw new RuntimeException('Could not determine current working directory.');
     }
     // Check if we have a Contao installation in the current working dir. See #15.
     if (static::isContao($cwd)) {
         $roots['root'] = $cwd;
     }
     if (static::isContao(dirname($cwd))) {
         $roots['parent'] = dirname($cwd);
     }
     if (null !== $package) {
         $extra = $package->getExtra();
         if (!empty($extra['contao']['root']) && static::isContao($cwd . DIRECTORY_SEPARATOR . $extra['contao']['root'])) {
             $roots['extra'] = $cwd . DIRECTORY_SEPARATOR . $extra['contao']['root'];
         }
     }
     // test, do we have the core within vendor/contao/core.
     $vendorRoot = $cwd . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'contao' . DIRECTORY_SEPARATOR . 'core';
     if (static::isContao($vendorRoot)) {
         $roots['vendor'] = $vendorRoot;
     }
     return $roots;
 }
Esempio n. 2
0
 private function getFetchesInExtra(RootPackageInterface $package, $key)
 {
     $extra = $package->getExtra();
     if (empty($extra[$key])) {
         return array();
     }
     return $extra[$key];
 }
Esempio n. 3
0
 /**
  * Check if the filter must be skipped the version by pattern or not.
  *
  * @return string|false Return the pattern or FALSE for disable the feature
  */
 protected function skipByPattern()
 {
     $extra = $this->package->getExtra();
     if (!array_key_exists('asset-pattern-skip-version', $extra)) {
         $extra['asset-pattern-skip-version'] = '(-patch)';
     }
     if (is_string($extra['asset-pattern-skip-version'])) {
         return trim($extra['asset-pattern-skip-version'], '/');
     }
     return false;
 }
Esempio n. 4
0
 /**
  * Get extra config.
  *
  * @param  \Composer\Package\RootPackageInterface    $root
  * @param  \Arcanedev\Composer\Entities\PluginState  $state
  * @param  array                                     $extra
  *
  * @return array
  */
 private function getExtra(RootPackageInterface $root, PluginState $state, $extra)
 {
     $rootExtra = $root->getExtra();
     if ($state->replaceDuplicateLinks()) {
         return self::mergeExtraArray($state->shouldMergeExtraDeep(), $rootExtra, $extra);
     }
     if (!$state->shouldMergeExtraDeep()) {
         foreach (array_intersect(array_keys($extra), array_keys($rootExtra)) as $key) {
             $this->getLogger()->info("Ignoring duplicate <comment>{$key}</comment> in " . "<comment>{$this->getPath()}</comment> extra config.");
         }
     }
     return static::mergeExtraArray($state->shouldMergeExtraDeep(), $extra, $rootExtra);
 }
Esempio n. 5
0
 /**
  * Check if a package is locked.
  *
  * @param string $packageName The name of the package to test.
  *
  * @return bool
  *
  * @see ComposerJson::isLocked()
  */
 private function isLocked($packageName)
 {
     $extra = $this->rootPackage->getExtra();
     return isset($extra['tenside']['version-locks'][$packageName]);
 }
 /**
  * Merge extra config into a RootPackageInterface
  *
  * @param RootPackageInterface $root
  * @param PluginState $state
  */
 public function mergeExtra(RootPackageInterface $root, PluginState $state)
 {
     $extra = $this->package->getExtra();
     unset($extra['merge-plugin']);
     if (!$state->shouldMergeExtra() || empty($extra)) {
         return;
     }
     $rootExtra = $root->getExtra();
     $unwrapped = self::unwrapIfNeeded($root, 'setExtra');
     if ($state->replaceDuplicateLinks()) {
         $unwrapped->setExtra(self::mergeExtraArray($state->shouldMergeExtraDeep(), $rootExtra, $extra));
     } else {
         if (!$state->shouldMergeExtraDeep()) {
             foreach (array_intersect(array_keys($extra), array_keys($rootExtra)) as $key) {
                 $this->logger->info("Ignoring duplicate <comment>{$key}</comment> in " . "<comment>{$this->path}</comment> extra config.");
             }
         }
         $unwrapped->setExtra(self::mergeExtraArray($state->shouldMergeExtraDeep(), $extra, $rootExtra));
     }
 }
 /**
  * Check the extra option.
  *
  * @param RootPackageInterface $package The root package
  * @param string               $name    The extra option name
  *
  * @return bool
  */
 public static function checkExtraOption(RootPackageInterface $package, $name)
 {
     $extra = $package->getExtra();
     return !array_key_exists($name, $extra) || true === $extra[$name];
 }
Esempio n. 8
0
 /**
  * @param RootPackageInterface $package
  * @return array
  */
 protected function readConfig(RootPackageInterface $package)
 {
     $config = array('include' => array());
     $extra = $package->getExtra();
     if (isset($extra['merge-plugin'])) {
         $config = array_merge($config, $extra['merge-plugin']);
         if (!is_array($config['include'])) {
             $config['include'] = array($config['include']);
         }
     }
     return $config;
 }
 /**
  * Group packages in a repository by vendor and return a sorted and grouped list.
  *
  * @param RepositoryInterface $repository
  *
  * @return array
  */
 protected function buildGroupedPackagesList(RootPackageInterface $rootPackage, RepositoryInterface $repository, $requiresList, $dependencyMap, $notInstalledList)
 {
     $groupedPackages = array();
     $requires = $rootPackage->getRequires();
     $extra = $rootPackage->getExtra();
     $versionLocks = isset($extra['contao']['version-locks']) ? (array) $extra['contao']['version-locks'] : array();
     /** @var \Composer\Package\PackageInterface $package */
     foreach ($repository->getPackages() as $package) {
         // skip aliases
         if ($package instanceof AliasPackage) {
             continue;
         }
         $name = $package->getPrettyName();
         list($group) = explode('/', $name);
         $dependencyOf = false;
         if (isset($dependencyMap[$package->getName()])) {
             $dependencyOf = $dependencyMap[$package->getName()];
         }
         if (count($package->getReplaces())) {
             foreach (array_keys($package->getReplaces()) as $replace) {
                 if (isset($dependencyMap[$replace])) {
                     $dependencyOf = $dependencyMap[$replace];
                     break;
                 }
             }
         }
         $item = (object) array('group' => $group, 'name' => $package->getPrettyName(), 'package' => $package, 'dependencyOf' => $dependencyOf, 'installing' => false, 'removeable' => in_array($name, $requiresList), 'removing' => !in_array($name, $requiresList) && !isset($dependencyMap[$name]), 'pinable' => $package->getStability() != 'dev', 'pinned' => array_key_exists($name, $versionLocks), 'versionConstraint' => $this->createConstraint('=', $package->getVersion()), 'requireConstraint' => isset($requires[$package->getName()]) ? $requires[$package->getName()]->getConstraint() : false);
         if (isset($groupedPackages[$group])) {
             $groupedPackages[$group][] = $item;
         } else {
             $groupedPackages[$group] = array($item);
         }
     }
     /** @var Link $notInstalledPackageConstraint */
     foreach ($notInstalledList as $notInstalledPackageName => $notInstalledPackageConstraint) {
         list($group) = explode('/', $notInstalledPackageName);
         $package = new CompletePackage($notInstalledPackageName, $notInstalledPackageConstraint->getPrettyConstraint(), $notInstalledPackageConstraint->getPrettyConstraint());
         $item = (object) array('group' => $group, 'name' => $notInstalledPackageName, 'version' => $notInstalledPackageConstraint->getPrettyConstraint(), 'package' => $package, 'dependencyOf' => false, 'installing' => true, 'removeable' => true, 'removing' => false, 'pinable' => false, 'pinned' => false, 'versionConstraint' => $this->createConstraint('=', $package->getVersion()), 'requireConstraint' => false);
         if (isset($groupedPackages[$group])) {
             $groupedPackages[$group][] = $item;
         } else {
             $groupedPackages[$group] = array($item);
         }
     }
     foreach (array_keys($groupedPackages) as $group) {
         usort($groupedPackages[$group], function ($a, $b) {
             return strnatcasecmp($a->package->getPrettyName(), $b->package->getPrettyName());
         });
     }
     uksort($groupedPackages, 'strnatcasecmp');
     return $groupedPackages;
 }
Esempio n. 10
0
 /**
  * Rewrites the class map to have lowercased keys to be able to load classes with wrong casing
  * Defaults to case sensitivity (composer loader default)
  *
  * @param RootPackageInterface $mainPackage
  * @param string $targetDir
  * @return bool
  */
 protected static function caseSensitiveClassLoading(RootPackageInterface $mainPackage, $targetDir)
 {
     $extra = $mainPackage->getExtra();
     $caseSensitiveClassLoading = true;
     if (isset($extra['autoload-case-sensitivity'])) {
         $caseSensitiveClassLoading = (bool) $extra['autoload-case-sensitivity'];
     }
     if (!$caseSensitiveClassLoading) {
         $classMapContents = file_get_contents($targetDir . '/autoload_classmap.php');
         $classMapContents = preg_replace_callback('/    \'[^\']*\' => /', function ($match) {
             return strtolower($match[0]);
         }, $classMapContents);
         file_put_contents($targetDir . '/autoload_classmap.php', $classMapContents);
     }
     return $caseSensitiveClassLoading;
 }