parent
d70dfd2df3
commit
ec27777341
|
@ -20,16 +20,16 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
protected $infoCache = array();
|
protected $infoCache = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var GitDriver
|
* @var VcsDriver
|
||||||
*/
|
*/
|
||||||
protected $sshDriver;
|
protected $fallbackDriver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function initialize()
|
public function initialize()
|
||||||
{
|
{
|
||||||
preg_match('#^https?://bitbucket\.org/([^/]+)/(.+?)(\.git|/?)$#', $this->url, $match);
|
preg_match('#^https?://bitbucket\.org/([^/]+)/([^/]+?)(\.git|/?)$#', $this->url, $match);
|
||||||
$this->owner = $match[1];
|
$this->owner = $match[1];
|
||||||
$this->repository = $match[2];
|
$this->repository = $match[2];
|
||||||
$this->originUrl = 'bitbucket.org';
|
$this->originUrl = 'bitbucket.org';
|
||||||
|
@ -49,8 +49,8 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
*/
|
*/
|
||||||
public function getComposerInformation($identifier)
|
public function getComposerInformation($identifier)
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getComposerInformation($identifier);
|
return $this->fallbackDriver->getComposerInformation($identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($this->infoCache[$identifier])) {
|
if (!isset($this->infoCache[$identifier])) {
|
||||||
|
@ -110,8 +110,8 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
*/
|
*/
|
||||||
public function getFileContent($file, $identifier)
|
public function getFileContent($file, $identifier)
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getFileContent($file, $identifier);
|
return $this->fallbackDriver->getFileContent($file, $identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier . ':' . $file)) {
|
if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier . ':' . $file)) {
|
||||||
|
@ -137,8 +137,8 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
*/
|
*/
|
||||||
public function getChangeDate($identifier)
|
public function getChangeDate($identifier)
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getChangeDate($identifier);
|
return $this->fallbackDriver->getChangeDate($identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
$resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'
|
$resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'
|
||||||
|
@ -163,22 +163,19 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
} catch (TransportException $e) {
|
} catch (TransportException $e) {
|
||||||
$bitbucketUtil = new Bitbucket($this->io, $this->config, $this->process, $this->remoteFilesystem);
|
$bitbucketUtil = new Bitbucket($this->io, $this->config, $this->process, $this->remoteFilesystem);
|
||||||
|
|
||||||
switch ($e->getCode()) {
|
if (403 === $e->getCode()) {
|
||||||
case 403:
|
|
||||||
if (!$this->io->hasAuthentication($this->originUrl)
|
if (!$this->io->hasAuthentication($this->originUrl)
|
||||||
&& $bitbucketUtil->authorizeOAuth($this->originUrl)) {
|
&& $bitbucketUtil->authorizeOAuth($this->originUrl)
|
||||||
|
) {
|
||||||
return parent::getContents($url);
|
return parent::getContents($url);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->io->isInteractive() && $fetchingRepoData) {
|
if (!$this->io->isInteractive() && $fetchingRepoData) {
|
||||||
return $this->attemptCloneFallback();
|
return $this->attemptCloneFallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw $e;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,19 +184,14 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function generateSshUrl()
|
abstract protected function generateSshUrl();
|
||||||
{
|
|
||||||
return 'git@' . $this->originUrl . ':' . $this->owner.'/'.$this->repository.'.git';
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function attemptCloneFallback()
|
protected function attemptCloneFallback()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->setupSshDriver($this->generateSshUrl());
|
$this->setupFallbackDriver($this->generateSshUrl());
|
||||||
|
|
||||||
return;
|
|
||||||
} catch (\RuntimeException $e) {
|
} catch (\RuntimeException $e) {
|
||||||
$this->sshDriver = null;
|
$this->fallbackDriver = null;
|
||||||
|
|
||||||
$this->io->writeError(
|
$this->io->writeError(
|
||||||
'<error>Failed to clone the ' . $this->generateSshUrl() . ' repository, try running in interactive mode'
|
'<error>Failed to clone the ' . $this->generateSshUrl() . ' repository, try running in interactive mode'
|
||||||
|
@ -209,5 +201,5 @@ abstract class BitbucketDriver extends VcsDriver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected function setupSshDriver($url);
|
abstract protected function setupFallbackDriver($url);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,8 @@ class GitBitbucketDriver extends BitbucketDriver implements VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function getRootIdentifier()
|
public function getRootIdentifier()
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getRootIdentifier();
|
return $this->fallbackDriver->getRootIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $this->rootIdentifier) {
|
if (null === $this->rootIdentifier) {
|
||||||
|
@ -51,8 +51,8 @@ class GitBitbucketDriver extends BitbucketDriver implements VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function getUrl()
|
public function getUrl()
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getUrl();
|
return $this->fallbackDriver->getUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'https://' . $this->originUrl . '/'.$this->owner.'/'.$this->repository.'.git';
|
return 'https://' . $this->originUrl . '/'.$this->owner.'/'.$this->repository.'.git';
|
||||||
|
@ -63,8 +63,8 @@ class GitBitbucketDriver extends BitbucketDriver implements VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function getSource($identifier)
|
public function getSource($identifier)
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getSource($identifier);
|
return $this->fallbackDriver->getSource($identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
return array('type' => 'git', 'url' => $this->getUrl(), 'reference' => $identifier);
|
return array('type' => 'git', 'url' => $this->getUrl(), 'reference' => $identifier);
|
||||||
|
@ -86,8 +86,8 @@ class GitBitbucketDriver extends BitbucketDriver implements VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function getTags()
|
public function getTags()
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getTags();
|
return $this->fallbackDriver->getTags();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $this->tags) {
|
if (null === $this->tags) {
|
||||||
|
@ -107,8 +107,8 @@ class GitBitbucketDriver extends BitbucketDriver implements VcsDriverInterface
|
||||||
*/
|
*/
|
||||||
public function getBranches()
|
public function getBranches()
|
||||||
{
|
{
|
||||||
if ($this->sshDriver) {
|
if ($this->fallbackDriver) {
|
||||||
return $this->sshDriver->getBranches();
|
return $this->fallbackDriver->getBranches();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $this->branches) {
|
if (null === $this->branches) {
|
||||||
|
@ -144,15 +144,23 @@ class GitBitbucketDriver extends BitbucketDriver implements VcsDriverInterface
|
||||||
/**
|
/**
|
||||||
* @param string $url
|
* @param string $url
|
||||||
*/
|
*/
|
||||||
protected function setupSshDriver($url)
|
protected function setupFallbackDriver($url)
|
||||||
{
|
{
|
||||||
$this->sshDriver = new GitDriver(
|
$this->fallbackDriver = new GitDriver(
|
||||||
array('url' => $url),
|
array('url' => $url),
|
||||||
$this->io,
|
$this->io,
|
||||||
$this->config,
|
$this->config,
|
||||||
$this->process,
|
$this->process,
|
||||||
$this->remoteFilesystem
|
$this->remoteFilesystem
|
||||||
);
|
);
|
||||||
$this->sshDriver->initialize();
|
$this->fallbackDriver->initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function generateSshUrl()
|
||||||
|
{
|
||||||
|
return 'git@' . $this->originUrl . ':' . $this->owner.'/'.$this->repository.'.git';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ class GitLabDriver extends VcsDriver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier . ':' . $file)) {
|
if ($isHash = preg_match('{[a-f0-9]{40}}i', $identifier) && $res = $this->cache->read($identifier . ':' . $file)) {
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ class GitLabDriver extends VcsDriver
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preg_match('{[a-f0-9]{40}}i', $identifier)) {
|
if ($isHash) {
|
||||||
$this->cache->write($identifier . ':' . $file, $content);
|
$this->cache->write($identifier . ':' . $file, $content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,15 +120,23 @@ class HgBitbucketDriver extends BitbucketDriver
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setupSshDriver($url)
|
protected function setupFallbackDriver($url)
|
||||||
{
|
{
|
||||||
$this->sshDriver = new HgDriver(
|
$this->fallbackDriver = new HgDriver(
|
||||||
array('url' => $url),
|
array('url' => $url),
|
||||||
$this->io,
|
$this->io,
|
||||||
$this->config,
|
$this->config,
|
||||||
$this->process,
|
$this->process,
|
||||||
$this->remoteFilesystem
|
$this->remoteFilesystem
|
||||||
);
|
);
|
||||||
$this->sshDriver->initialize();
|
$this->fallbackDriver->initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function generateSshUrl()
|
||||||
|
{
|
||||||
|
return 'hg@' . $this->originUrl . '/' . $this->owner.'/'.$this->repository;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ class PerforceDriver extends VcsDriver
|
||||||
*/
|
*/
|
||||||
public function getChangeDate($identifier)
|
public function getChangeDate($identifier)
|
||||||
{
|
{
|
||||||
return new \DateTime();
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -224,6 +224,8 @@ class SvnDriver extends VcsDriver
|
||||||
return new \DateTime($match[1], new \DateTimeZone('UTC'));
|
return new \DateTime($match[1], new \DateTimeZone('UTC'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -83,8 +83,8 @@ abstract class VcsDriver implements VcsDriverInterface
|
||||||
|
|
||||||
$composer = JsonFile::parseJson($composerFileContent, $identifier . ':composer.json');
|
$composer = JsonFile::parseJson($composerFileContent, $identifier . ':composer.json');
|
||||||
|
|
||||||
if (empty($composer['time'])) {
|
if (empty($composer['time']) && $changeDate = $this->getChangeDate($identifier)) {
|
||||||
$composer['time'] = $this->getChangeDate($identifier)->format('Y-m-d H:i:s');
|
$composer['time'] = $changeDate->format('Y-m-d H:i:s');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->infoCache[$identifier] = $composer;
|
$this->infoCache[$identifier] = $composer;
|
||||||
|
|
|
@ -439,13 +439,10 @@ class Perforce
|
||||||
$index2 = strpos($result, 'no such file(s).');
|
$index2 = strpos($result, 'no such file(s).');
|
||||||
if ($index2 === false) {
|
if ($index2 === false) {
|
||||||
$index3 = strpos($result, 'change');
|
$index3 = strpos($result, 'change');
|
||||||
if (!($index3 === false)) {
|
if ($index3 !== false) {
|
||||||
$phrase = trim(substr($result, $index3));
|
$phrase = trim(substr($result, $index3));
|
||||||
$fields = explode(' ', $phrase);
|
$fields = explode(' ', $phrase);
|
||||||
$id = $fields[1];
|
return substr($identifier, 0, $index) . '/' . $file . '@' . $fields[1];
|
||||||
$path = substr($identifier, 0, $index) . '/' . $file . '@' . $id;
|
|
||||||
|
|
||||||
return $path;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue