Add caching to bitbucket API requests
parent
64b0d72183
commit
764de14b5e
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
namespace Composer\Repository\Vcs;
|
namespace Composer\Repository\Vcs;
|
||||||
|
|
||||||
|
use Composer\Cache;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
use Composer\Json\JsonFile;
|
use Composer\Json\JsonFile;
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
|
@ -21,6 +22,7 @@ use Composer\IO\IOInterface;
|
||||||
*/
|
*/
|
||||||
class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface
|
class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface
|
||||||
{
|
{
|
||||||
|
protected $cache;
|
||||||
protected $owner;
|
protected $owner;
|
||||||
protected $repository;
|
protected $repository;
|
||||||
protected $tags;
|
protected $tags;
|
||||||
|
@ -37,6 +39,7 @@ class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface
|
||||||
$this->owner = $match[1];
|
$this->owner = $match[1];
|
||||||
$this->repository = $match[2];
|
$this->repository = $match[2];
|
||||||
$this->originUrl = 'bitbucket.org';
|
$this->originUrl = 'bitbucket.org';
|
||||||
|
$this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,6 +87,10 @@ class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function getComposerInformation($identifier)
|
public function 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])) {
|
||||||
$resource = $this->getScheme() . '://bitbucket.org/'.$this->owner.'/'.$this->repository.'/raw/'.$identifier.'/composer.json';
|
$resource = $this->getScheme() . '://bitbucket.org/'.$this->owner.'/'.$this->repository.'/raw/'.$identifier.'/composer.json';
|
||||||
$composer = $this->getContents($resource);
|
$composer = $this->getContents($resource);
|
||||||
|
@ -98,6 +105,11 @@ class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface
|
||||||
$changeset = JsonFile::parseJson($this->getContents($resource), $resource);
|
$changeset = JsonFile::parseJson($this->getContents($resource), $resource);
|
||||||
$composer['time'] = $changeset['timestamp'];
|
$composer['time'] = $changeset['timestamp'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preg_match('{[a-f0-9]{40}}i', $identifier)) {
|
||||||
|
$this->cache->write($identifier, json_encode($composer));
|
||||||
|
}
|
||||||
|
|
||||||
$this->infoCache[$identifier] = $composer;
|
$this->infoCache[$identifier] = $composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
namespace Composer\Repository\Vcs;
|
namespace Composer\Repository\Vcs;
|
||||||
|
|
||||||
|
use Composer\Cache;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
use Composer\Json\JsonFile;
|
use Composer\Json\JsonFile;
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
|
@ -21,6 +22,7 @@ use Composer\IO\IOInterface;
|
||||||
*/
|
*/
|
||||||
class HgBitbucketDriver extends VcsDriver
|
class HgBitbucketDriver extends VcsDriver
|
||||||
{
|
{
|
||||||
|
protected $cache;
|
||||||
protected $owner;
|
protected $owner;
|
||||||
protected $repository;
|
protected $repository;
|
||||||
protected $tags;
|
protected $tags;
|
||||||
|
@ -37,6 +39,7 @@ class HgBitbucketDriver extends VcsDriver
|
||||||
$this->owner = $match[1];
|
$this->owner = $match[1];
|
||||||
$this->repository = $match[2];
|
$this->repository = $match[2];
|
||||||
$this->originUrl = 'bitbucket.org';
|
$this->originUrl = 'bitbucket.org';
|
||||||
|
$this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -87,6 +90,10 @@ class HgBitbucketDriver extends VcsDriver
|
||||||
*/
|
*/
|
||||||
public function getComposerInformation($identifier)
|
public function 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])) {
|
||||||
$resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/src/'.$identifier.'/composer.json';
|
$resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/src/'.$identifier.'/composer.json';
|
||||||
$repoData = JsonFile::parseJson($this->getContents($resource), $resource);
|
$repoData = JsonFile::parseJson($this->getContents($resource), $resource);
|
||||||
|
@ -107,6 +114,11 @@ class HgBitbucketDriver extends VcsDriver
|
||||||
$changeset = JsonFile::parseJson($this->getContents($resource), $resource);
|
$changeset = JsonFile::parseJson($this->getContents($resource), $resource);
|
||||||
$composer['time'] = $changeset['timestamp'];
|
$composer['time'] = $changeset['timestamp'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preg_match('{[a-f0-9]{40}}i', $identifier)) {
|
||||||
|
$this->cache->write($identifier, json_encode($composer));
|
||||||
|
}
|
||||||
|
|
||||||
$this->infoCache[$identifier] = $composer;
|
$this->infoCache[$identifier] = $composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue