/** * Get the aggregated information from packagist. * * Please pass an array of vendors or package names, or a single vendor or * package name to this method. * * @param string[]|string $vendors * * @return array */ public function packages($vendors) { $packages = []; foreach ((array) $vendors as $vendor) { if (strpos($vendor, '/') !== false) { $packages[] = $this->packagist->get($vendor); } else { foreach ($this->packagist->all(compact('vendor')) as $result) { $packages[] = $this->packagist->get($result); } } } return $packages; }
public function installAction() { $name = $this->getParam('name', null); if (!$name) { return $this->_helper->json(['success' => false, 'message' => 'no package name supplied']); } $client = new Packagist\Api\Client(); try { $package = $client->get($name); } catch (\Exception $ex) { return $this->_helper->json(['success' => false, 'message' => "packagist package with name '{$name}' not found"]); } $versions = $package->getVersions(); $version = null; foreach ($versions as $version => $infos) { // TODO(rafalgalka) check minimum-stability if ($version == 'dev-master') { continue; } $version = $versions[$version]; break; } if (!$version instanceof Version) { $version = $versions['dev-master']; } if (!$version instanceof Version) { return $this->_helper->json(['success' => false, 'message' => "no version found for package '{$name}'"]); } try { $jobId = \Manager\Composer::installPackage($name . ':' . $version->getVersion()); return $this->_helper->json(['success' => true, 'jobId' => $jobId]); } catch (Exception $e) { return $this->_helper->json(['success' => false, 'message' => $e->getMessage()]); } }
protected function execute(InputInterface $input, OutputInterface $output) { $packager = new Packager(); $packager->setOutput($output); $packager->coerceWritable(); $dialog = $this->getHelperSet()->get('dialog'); /* @var $dialog DialogHelper */ $name = $input->getArgument('name'); do { if ($name === null) { // ask for input $name = $dialog->ask($output, 'Enter (partial) project name > '); } else { $output->writeln('Searching for <info>' . $name . '</info>...'); } $packagist = new Client(); $choices = array(); foreach ($packagist->search($name) as $package) { /* @var $package Result */ $label = str_pad($package->getName(), 39) . ' '; $label = str_replace($name, '<info>' . $name . '</info>', $label); $label .= $package->getDescription(); $label .= ' (⤓' . $package->getDownloads() . ')'; $choices[$package->getName()] = $label; } $name = $this->select($output, 'Select matching package', $choices, 'Start new search'); } while ($name === null); $output->writeln('Selected <info>' . $name . '</info>, listing versions...'); $package = $packagist->get($name); /* @var $package Package */ $choices = array(); foreach ($package->getVersions() as $version) { /* @var $version Version */ $label = $version->getVersion(); $bin = $version->getBin(); if ($bin === null) { $label .= ' (<error>no executable bin</error>)'; } else { $label .= ' (☑ executable bin)'; } $choices[$version->getVersion()] = $label; } $version = $this->select($output, 'Select available version', $choices); $action = $this->select($output, 'Action', array('build' => 'Build project', 'install' => 'Install project system-wide'), 'Quit'); if ($action === null) { return; } $pharer = $packager->getPharer($name, $version); if ($action === 'install') { $path = $packager->getSystemBin($pharer); $packager->install($pharer, $path); } else { $pharer->build(); } }
/** * Get latest package version. * * @param string $name * * @return string|void */ public function getLatestVersion($name) { try { // Get all package versions. $versions = array_map(function ($version) { return $version->getVersion(); }, $this->packagist->get($name)->getVersions()); return Version::latest($versions); } catch (ClientErrorResponseException $e) { return; } }
public function packagistData(Request $request) { $package = $this->packagist->get($request->get('packagist_uri')); return response()->json($this->transformer->transform($package)); }
protected function doSearch(Builder $builder, Packager $packager) { $oldname = null; do { $dialog = $builder->entry('Search (partial) project name', $oldname); $dialog->setTitle('Search project name'); $name = $dialog->waitReturn(); if ($name === false) { return; } $oldname = $name; $pulsate = $builder->pulsate('Searching for "' . $name . '"...'); $pulsate->setNoCancel(true); $pulsate->run(); $packagist = new Client(); $choices = array(); foreach ($packagist->search($name) as $package) { /* @var $package Result */ $choices[$package->getName()] = array($package->getName(), mb_strimwidth($package->getDescription(), 0, 80, '…', 'utf-8'), $package->getDownloads()); } $pulsate->close(); if (!$choices) { $builder->warning('No package matching "' . $name . '" found!')->waitReturn(); $name = false; continue; } $table = $builder->table($choices, array('Name', 'Description', 'Downloads'), 'Select matching package'); $table->setTitle('Select matching package'); $table->setCancelLabel('Back to Search'); $table->setWidth(1000); $table->setHeight(600); $name = $table->waitReturn(); } while (is_bool($name)); $pulsate = $builder->pulsate('Selected <info>' . $name . '</info>, listing versions...'); $pulsate->setNoCancel(true); $pulsate->run(); $package = $packagist->get($name); /* @var $package Package */ $choices = array(); foreach ($package->getVersions() as $version) { /* @var $version Version */ $time = new \DateTime($version->getTime()); $time = $time->format('Y-m-d H:i:s'); $bin = $version->getBin(); if ($bin) { $bin = '☑ ' . array_shift($bin); } else { $bin = '☐ no executable bin'; } $choices[$version->getVersion()] = array($version->getVersion(), $time, $bin); } $pulsate->close(); if (!$choices) { $builder->warning('No versions for package "' . $name . '" found!')->waitReturn(); return; } $dialog = $builder->table($choices, array('Version', 'Date', 'Binary'), 'Select available version'); $dialog->setWidth(800); $dialog->setHeight(300); $version = $dialog->waitReturn(); if (is_bool($version)) { return; } $pulsate = $builder->pulsate('Installing to temporary directory...')->run(); $pharer = $packager->getPharer($name, $version); $pulsate->close(); return $pharer; }
/** * {@inheritdoc} */ public function getPackage($name) { return $this->client->get($name); }
public function get($package) { $key = $this->getPrefixKey(__METHOD__, $package); if ($this->getCache()->contains($key)) { $result = $this->getCache()->fetch($key); } else { $result = parent::get($package); $this->getCache()->save($key, $result, $this->TTLGet); } return $result; }
/** * @param string * @return \NetteAddons\Model\AddonEntity */ public function getAddon($url) { if (!$this->isSupported($url)) { throw new \NetteAddons\InvalidArgumentException('Url "' . $url . '" not supported.'); } $match = Strings::match($url, self::URL_REGEXP); $composerFullName = $match['vendor'] . '/' . $match['name']; try { $data = $this->apiClient->get($composerFullName); $addon = new AddonEntity($data->getName()); $addon->setPerex($data->getDescription()); $addon->setPackagist(UrlsHelper::normalizePackagistPackageUrl($url)); foreach ($data->getVersions() as $versionData) { /** @var \Packagist\Api\Result\Package\Version $versionData */ $version = new AddonVersionEntity($addon->getComposerFullName(), $versionData->getVersion()); if ($versionData->getSource() !== NULL && empty($addon->getGithub())) { /** @var \Packagist\Api\Result\Package\Source $source */ $source = $versionData->getSource(); if (UrlsHelper::isGithubRepositoryUrl($source->getUrl())) { $normalizedGithubUrl = UrlsHelper::normalizeGithubRepositoryUrl($source->getUrl()); $addon->setGithub($normalizedGithubUrl); $githubClient = $this->githubClientFactory->create($normalizedGithubUrl); $addon->setStars($githubClient->getMetadata()->stargazers_count); } } if ($versionData->getLicense() !== NULL) { foreach ($versionData->getLicense() as $license) { $version->addLicense($license); } } if ($versionData->getRequire() !== NULL) { foreach ($versionData->getRequire() as $dependencyName => $dependencyVersion) { $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_REQUIRE, $dependencyName, $dependencyVersion); $version->addDependency($dependency); } } if ($versionData->getRequireDev() !== NULL) { foreach ($versionData->getRequireDev() as $dependencyName => $dependencyVersion) { $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_REQUIRE_DEV, $dependencyName, $dependencyVersion); $version->addDependency($dependency); } } if ($versionData->getConflict() !== NULL) { foreach ($versionData->getConflict() as $dependencyName => $dependencyVersion) { $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_CONFLICT, $dependencyName, $dependencyVersion); $version->addDependency($dependency); } } if ($versionData->getReplace() !== NULL) { foreach ($versionData->getReplace() as $dependencyName => $dependencyVersion) { $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_REPLACE, $dependencyName, $dependencyVersion); $version->addDependency($dependency); } } if ($versionData->getProvide() !== NULL) { foreach ($versionData->getProvide() as $dependencyName => $dependencyVersion) { $dependency = new AddonDependencyEntity($addon->getComposerFullName(), $version->getVersion(), AddonDependencyEntity::TYPE_PROVIDE, $dependencyName, $dependencyVersion); $version->addDependency($dependency); } } // @todo suggest $addon->addVersion($version); } return $addon; } catch (\Guzzle\Http\Exception\ClientErrorResponseException $e) { if ($e->getResponse()->getStatusCode() === 404) { throw new \NetteAddons\Model\Importers\AddonVersionImporters\AddonNotFoundException('Addon "' . $composerFullName . '" not found', $composerFullName, $e); } throw $e; } }
/** * Get the versions. * * @param array $packages * * @return array */ private function getVersions(array $packages) { $client = new Client(); $versions = []; foreach ($packages as $name => $version) { try { $package = $client->get($name); $current = $this->normalize($version); $latest = $this->normalize($this->getLatest($package->getVersions())); if (version_compare($version, $latest, '<') && $current !== $latest) { $latest = $this->diff($current, $latest); array_push($versions, [$name, $current, '→', $latest]); } } catch (ClientErrorResponseException $e) { continue; } } return $versions; }