friendica-addons/advancedcontentfilter/vendor/fxp/composer-asset-plugin/Repository/Vcs/Util.php

110 lines
3.1 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\Json\JsonFile;
use Composer\Repository\Vcs\VcsDriverInterface;
/**
* Helper for VCS driver.
*
* @author François Pluchino <francois.pluchino@gmail.com>
*/
class Util
{
/**
* Check if the identifier is an SHA.
*
* @param string $identifier The identifier
*
* @return bool
*/
public static function isSha($identifier)
{
return (bool) preg_match('{[a-f0-9]{40}}i', $identifier);
}
/**
* @param array $cacheCode The cache code
* @param Cache $cache The cache filesystem
* @param string $type The asset type
* @param string $identifier The identifier
* @param bool $force Force the read
*
* @return array|null
*/
public static function readCache(array $cacheCode, Cache $cache, $type, $identifier, $force = false)
{
if (array_key_exists($identifier, $cacheCode)) {
return $cacheCode[$identifier];
}
$data = null;
if (self::isSha($identifier) || $force) {
$res = $cache->read($type.'-'.$identifier);
if ($res) {
$data = JsonFile::parseJson($res);
}
}
return $data;
}
/**
* @param Cache $cache The cache
* @param string $type The asset type
* @param string $identifier The identifier
* @param array $composer The data composer
* @param bool $force Force the write
*/
public static function writeCache(Cache $cache, $type, $identifier, array $composer, $force = false)
{
if (self::isSha($identifier) || $force) {
$cache->write($type.'-'.$identifier, json_encode($composer));
}
}
/**
* Add time in composer.
*
* @param array $composer The composer
* @param string $resourceKey The composer key
* @param string $resource The resource url
* @param VcsDriverInterface $driver The vcs driver
* @param string $method The method for get content
*
* @return array The composer
*/
public static function addComposerTime(array $composer, $resourceKey, $resource, VcsDriverInterface $driver, $method = 'getContents')
{
if (!isset($composer['time'])) {
$ref = new \ReflectionClass($driver);
$meth = $ref->getMethod($method);
$meth->setAccessible(true);
$commit = JsonFile::parseJson($meth->invoke($driver, $resource), $resource);
$keys = explode('.', $resourceKey);
while (!empty($keys)) {
$commit = $commit[$keys[0]];
array_shift($keys);
}
$composer['time'] = $commit;
}
return $composer;
}
}