111 lines
2.7 KiB
PHP
111 lines
2.7 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Fxp Composer Asset Plugin package.
|
|
*
|
|
* (c) François Pluchino <francois.pluchino@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Fxp\Composer\AssetPlugin\Repository\Vcs;
|
|
|
|
use Composer\Cache;
|
|
use Composer\Repository\Vcs\PerforceDriver as BasePerforceDriver;
|
|
use Fxp\Composer\AssetPlugin\Util\Perforce;
|
|
|
|
/**
|
|
* Perforce vcs driver.
|
|
*
|
|
* @author François Pluchino <francois.pluchino@gmail.com>
|
|
*/
|
|
class PerforceDriver extends BasePerforceDriver
|
|
{
|
|
/**
|
|
* @var Perforce
|
|
*/
|
|
protected $perforce;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $infoCache = array();
|
|
|
|
/**
|
|
* @var Cache
|
|
*/
|
|
protected $cache;
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function initialize()
|
|
{
|
|
$this->depot = $this->repoConfig['depot'];
|
|
$this->branch = '';
|
|
if (!empty($this->repoConfig['branch'])) {
|
|
$this->branch = $this->repoConfig['branch'];
|
|
}
|
|
|
|
$this->initAssetPerforce($this->repoConfig);
|
|
$this->perforce->p4Login();
|
|
$this->perforce->checkStream();
|
|
|
|
$this->perforce->writeP4ClientSpec();
|
|
$this->perforce->connectClient();
|
|
|
|
$this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->depot);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getComposerInformation($identifier)
|
|
{
|
|
$this->infoCache[$identifier] = Util::readCache($this->infoCache, $this->cache, $this->repoConfig['asset-type'], $identifier, true);
|
|
|
|
if (!isset($this->infoCache[$identifier])) {
|
|
$composer = $this->getComposerContent($identifier);
|
|
|
|
Util::writeCache($this->cache, $this->repoConfig['asset-type'], $identifier, $composer, true);
|
|
$this->infoCache[$identifier] = $composer;
|
|
}
|
|
|
|
return $this->infoCache[$identifier];
|
|
}
|
|
|
|
/**
|
|
* Get composer content.
|
|
*
|
|
* @param string $identifier
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function getComposerContent($identifier)
|
|
{
|
|
$composer = $this->perforce->getComposerInformation($identifier);
|
|
|
|
if (empty($composer) || !is_array($composer)) {
|
|
$composer = array('_nonexistent_package' => true);
|
|
}
|
|
|
|
return $composer;
|
|
}
|
|
|
|
/**
|
|
* @param array $repoConfig
|
|
*/
|
|
private function initAssetPerforce($repoConfig)
|
|
{
|
|
if (!empty($this->perforce)) {
|
|
return;
|
|
}
|
|
|
|
$repoDir = $this->config->get('cache-vcs-dir').'/'.$this->depot;
|
|
$this->perforce = Perforce::create($repoConfig, $this->getUrl(), $repoDir, $this->process, $this->io);
|
|
}
|
|
}
|