friendica-addons/advancedcontentfilter/vendor/fxp/composer-asset-plugin/Repository/Vcs/PerforceDriver.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);
}
}