1
0
Fork 0

Merge remote-tracking branch 'github-seldaek/gh-cache'

By Jordi Boggiano
via Jordi Boggiano
* github-seldaek/gh-cache:
  Update changelog
  Add caching for metadata in github driver
pull/701/merge
Nils Adermann 2012-05-15 23:27:16 +02:00
commit 90e52a0828
2 changed files with 29 additions and 8 deletions

View File

@ -1,6 +1,6 @@
* 1.0.0-alpha4 * 1.0.0-alpha4
* Added caching of github metadata (faster startup time with custom github VCS repos)
* 1.0.0-alpha3 (2012-05-13) * 1.0.0-alpha3 (2012-05-13)

View File

@ -14,6 +14,7 @@ namespace Composer\Repository\Vcs;
use Composer\Downloader\TransportException; use Composer\Downloader\TransportException;
use Composer\Json\JsonFile; use Composer\Json\JsonFile;
use Composer\Cache;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\RemoteFilesystem; use Composer\Util\RemoteFilesystem;
@ -23,6 +24,7 @@ use Composer\Util\RemoteFilesystem;
*/ */
class GitHubDriver extends VcsDriver class GitHubDriver extends VcsDriver
{ {
protected $cache;
protected $owner; protected $owner;
protected $repository; protected $repository;
protected $tags; protected $tags;
@ -47,6 +49,7 @@ class GitHubDriver extends VcsDriver
$this->owner = $match[1]; $this->owner = $match[1];
$this->repository = $match[2]; $this->repository = $match[2];
$this->originUrl = 'github.com'; $this->originUrl = 'github.com';
$this->cache = new Cache($this->io, $this->config->get('home').'/cache.github/'.$this->owner.'/'.$this->repository);
$this->fetchRootIdentifier(); $this->fetchRootIdentifier();
} }
@ -115,18 +118,36 @@ class GitHubDriver extends VcsDriver
if ($this->gitDriver) { if ($this->gitDriver) {
return $this->gitDriver->getComposerInformation($identifier); return $this->gitDriver->getComposerInformation($identifier);
} }
if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier)) {
$this->infoCache[$identifier] = JsonFile::parseJson($res);
}
if (!isset($this->infoCache[$identifier])) { if (!isset($this->infoCache[$identifier])) {
$composer = $this->getContents($this->getScheme() . '://raw.github.com/'.$this->owner.'/'.$this->repository.'/'.$identifier.'/composer.json'); try {
if (!$composer) { $composer = $this->getContents($this->getScheme() . '://raw.github.com/'.$this->owner.'/'.$this->repository.'/'.$identifier.'/composer.json');
return; } catch (TransportException $e) {
if (404 !== $e->getCode()) {
throw $e;
}
$composer = false;
} }
$composer = JsonFile::parseJson($composer); if ($composer) {
$composer = JsonFile::parseJson($composer);
if (!isset($composer['time'])) {
$commit = JsonFile::parseJson($this->getContents($this->getScheme() . '://api.github.com/repos/'.$this->owner.'/'.$this->repository.'/commits/'.$identifier));
$composer['time'] = $commit['commit']['committer']['date'];
}
if (!isset($composer['time'])) {
$commit = JsonFile::parseJson($this->getContents($this->getScheme() . '://api.github.com/repos/'.$this->owner.'/'.$this->repository.'/commits/'.$identifier));
$composer['time'] = $commit['commit']['committer']['date'];
} }
if (preg_match('{[a-f0-9]{40}}i', $identifier)) {
$this->cache->write($identifier, json_encode($composer));
}
$this->infoCache[$identifier] = $composer; $this->infoCache[$identifier] = $composer;
} }