Skip to content

Instantly share code, notes, and snippets.

@chillu
Last active December 20, 2015 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chillu/85536a597758f6c6577a to your computer and use it in GitHub Desktop.
Save chillu/85536a597758f6c6577a to your computer and use it in GitHub Desktop.
diff --git a/mysite/code/services/AddonUpdater.php b/mysite/code/services/AddonUpdater.php
index cb3df38..01a5f9b 100644
--- a/mysite/code/services/AddonUpdater.php
+++ b/mysite/code/services/AddonUpdater.php
@@ -5,6 +5,7 @@ use Composer\Package\CompletePackage;
use Composer\Package\LinkConstraint\VersionConstraint;
use Guzzle\Http\Exception\ClientErrorResponseException;
use SilverStripe\Elastica\ElasticaService;
+use Packagist\Api\Result\Package;
/**
* Updates all add-ons from Packagist.
@@ -58,8 +59,9 @@ class AddonUpdater {
}
$this->elastica->startBulkIndex();
-
- foreach ($this->packagist->getGroupedPackages() as $name => $versions) {
+ foreach ($this->packagist->getPackages() as $package) {
+ $name = $package->getName();
+ $versions = $package->getVersions();
$addon = Addon::get()->filter('Name', $name)->first();
if (!$addon) {
@@ -69,18 +71,16 @@ class AddonUpdater {
}
usort($versions, function ($a, $b) {
- return version_compare($a->getVersion(), $b->getVersion());
+ return version_compare($a->getVersionNormalized(), $b->getVersionNormalized());
});
- $this->updateAddon($addon, array_filter($versions, function ($version) {
- return !($version instanceof AliasPackage);
- }));
+ $this->updateAddon($addon, $package, $versions);
}
$this->elastica->endBulkIndex();
}
- private function updateAddon(Addon $addon, array $versions) {
+ private function updateAddon(Addon $addon, Package $package, array $versions) {
if (!$addon->VendorID) {
$vendor = AddonVendor::get()->filter('Name', $addon->VendorName())->first();
@@ -93,19 +93,11 @@ class AddonUpdater {
$addon->VendorID = $vendor->ID;
}
- try {
- $details = $this->packagist->getPackageDetails($addon->Name);
- $details = $details['package'];
-
- $addon->Type = str_replace('silverstripe-', '', $details['type']);
- $addon->Description = $details['description'];
- $addon->Released = $details['time'];
- $addon->Repository = $details['repository'];
-
- if (isset($details['downloads']['total']) && is_int($details['downloads']['total'])) {
- $addon->Downloads = $details['downloads']['total'];
- }
- } catch (ClientErrorResponseException $e) {}
+ $addon->Type = str_replace('silverstripe-', '', $package->getType());
+ $addon->Description = $package->getDescription();
+ $addon->Released = strtotime($package->getTime());
+ $addon->Repository = $package->getRepository();
+ $addon->Downloads = $package->getDownloads()->getTotal();
foreach ($versions as $version) {
$this->updateVersion($addon, $version);
@@ -121,7 +113,7 @@ class AddonUpdater {
$built = (int) $addon->obj('BuiltAt')->format('U');
foreach ($versions as $version) {
- if ($version->getReleaseDate()->getTimestamp() > $built) {
+ if (strtotime($version->getTime()) > $built) {
$this->resque->queue('update', 'BuildAddonJob', array('id' => $addon->ID));
$addon->BuildQueued = true;
@@ -135,7 +127,7 @@ class AddonUpdater {
$addon->write();
}
- private function updateVersion(Addon $addon, CompletePackage $package) {
+ private function updateVersion(Addon $addon, Version $package) {
$version = null;
if ($addon->isInDB()) {
@@ -149,7 +141,7 @@ class AddonUpdater {
$version->Name = $package->getName();
$version->Type = str_replace('silverstripe-', '', $package->getType());
$version->Description = $package->getDescription();
- $version->Released = $package->getReleaseDate()->getTimestamp();
+ $version->Released = strtotime($package->getTime());
$keywords = $package->getKeywords();
@@ -162,23 +154,25 @@ class AddonUpdater {
}
}
- $version->Version = $package->getVersion();
- $version->PrettyVersion = $package->getPrettyVersion();
- $version->Development = $package->isDev();
+ $version->Version = $package->getVersionNormalized();
+ $version->PrettyVersion = $package->getVersion();
+ // $version->Development = $package->isDev();
- $version->SourceType = $package->getSourceType();
- $version->SourceUrl = $package->getSourceUrl();
- $version->SourceReference = $package->getSourceReference();
+ $version->SourceType = $package->getSource()->getType();
+ $version->SourceUrl = $package->getSource()->getUrl();
+ $version->SourceReference = $package->getSource()->getReference();
- $version->DistType = $package->getDistType();
- $version->DistUrl = $package->getDistUrl();
- $version->DistReference = $package->getDistReference();
- $version->DistChecksum = $package->getDistSha1Checksum();
+ if($package->getDist()) {
+ $version->DistType = $package->getDist()->getType();
+ $version->DistUrl = $package->getDist()->getUrl();
+ $version->DistReference = $package->getDist()->getReference();
+ $version->DistChecksum = $package->getDist()->getShasum();
+ }
$version->Extra = $package->getExtra();
$version->Homepage = $package->getHomepage();
$version->License = $package->getLicense();
- $version->Support = $package->getSupport();
+ // $version->Support = $package->getSupport();
$addon->Versions()->add($version);
@@ -205,11 +199,11 @@ class AddonUpdater {
};
$types = array(
- 'require' => 'getRequires',
- 'require-dev' => 'getDevRequires',
- 'provide' => 'getProvides',
- 'conflict' => 'getConflicts',
- 'replace' => 'getReplaces'
+ 'require' => 'getRequire',
+ 'require-dev' => 'getRequireDev',
+ 'provide' => 'getProvide',
+ 'conflict' => 'getConflict',
+ 'replace' => 'getReplace'
);
foreach ($types as $type => $method) {
diff --git a/mysite/code/services/PackagistService.php b/mysite/code/services/PackagistService.php
index 05a9be9..c3c1eda 100644
--- a/mysite/code/services/PackagistService.php
+++ b/mysite/code/services/PackagistService.php
@@ -55,14 +55,16 @@ class PackagistService {
$loader = new ArrayLoader();
$client = new Packagist;
+ SS_Log::log('PackagistService: Fetching packages overview from server', Zend_Log::INFO);
$names = $client->search('', array('type'=>'silverstripe'));
foreach($names as $name) {
- foreach($this->pool->whatProvides($name->getName()) as $candidate) {
- if(strpos($candidate->getType(), 'silverstripe-') === 0) {
- $packages[] = $candidate;
- }
- }
+ SS_Log::log(
+ sprintf('PackagistService: Fetching package details for "%s" from server', $name->getName()),
+ Zend_Log::INFO
+ );
+ $package = $client->get($name->getName());
+ $packages[] = $package;
}
return $packages;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment