140 lines
4.2 KiB
PHP
140 lines
4.2 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;
|
|
|
|
use Composer\DependencyResolver\Pool;
|
|
use Composer\IO\IOInterface;
|
|
use Composer\Repository\RepositoryInterface;
|
|
use Composer\Repository\RepositoryManager;
|
|
|
|
/**
|
|
* Helper for Repository.
|
|
*
|
|
* @author François Pluchino <francois.pluchino@gmail.com>
|
|
*/
|
|
class Util
|
|
{
|
|
/**
|
|
* Add repository config.
|
|
* The instance of repository is returned if the repository in't added in the pool.
|
|
*
|
|
* @param IOInterface $io The IO instance
|
|
* @param RepositoryManager $rm The repository manager
|
|
* @param array $repos The list of already repository added (passed by reference)
|
|
* @param string $name The name of the new repository
|
|
* @param array $repoConfig The config of the new repository
|
|
* @param Pool|null $pool The pool
|
|
*
|
|
* @return RepositoryInterface|null
|
|
*/
|
|
public static function addRepository(IOInterface $io, RepositoryManager $rm, array &$repos, $name, array $repoConfig, Pool $pool = null)
|
|
{
|
|
$repoConfig['name'] = $name;
|
|
$repo = $rm->createRepository($repoConfig['type'], $repoConfig);
|
|
|
|
return static::addRepositoryInstance($io, $rm, $repos, $name, $repo, $pool);
|
|
}
|
|
|
|
/**
|
|
* Add repository instance.
|
|
* The instance of repository is returned if the repository in't added in the pool.
|
|
*
|
|
* @param IOInterface $io The IO instance
|
|
* @param RepositoryManager $rm The repository mamanger
|
|
* @param array $repos The list of already repository added (passed by reference)
|
|
* @param string $name The name of the new repository
|
|
* @param RepositoryInterface $repo The repository instance
|
|
* @param Pool|null $pool The pool
|
|
*
|
|
* @return RepositoryInterface|null
|
|
*/
|
|
public static function addRepositoryInstance(IOInterface $io, RepositoryManager $rm, array &$repos, $name, RepositoryInterface $repo, Pool $pool = null)
|
|
{
|
|
$notAddedRepo = null;
|
|
|
|
if (!isset($repos[$name])) {
|
|
static::writeAddRepository($io, $name);
|
|
$notAddedRepo = $repo;
|
|
$repos[$name] = $repo;
|
|
$rm->addRepository($repo);
|
|
|
|
if (null !== $pool) {
|
|
$pool->addRepository($repo);
|
|
$notAddedRepo = null;
|
|
}
|
|
}
|
|
|
|
return $notAddedRepo;
|
|
}
|
|
|
|
/**
|
|
* Cleans the package name, removing the Composer prefix if present.
|
|
*
|
|
* @param string $name
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function cleanPackageName($name)
|
|
{
|
|
if (preg_match('/^[a-z]+\-asset\//', $name, $matches)) {
|
|
$name = substr($name, strlen($matches[0]));
|
|
}
|
|
|
|
return $name;
|
|
}
|
|
|
|
/**
|
|
* Converts the alias of asset package name by the real asset package name.
|
|
*
|
|
* @param string $name
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function convertAliasName($name)
|
|
{
|
|
if (preg_match('/([\w0-9\/_-]+)-\d+(.\d+)?.[\dxX]+$/', $name, $matches)) {
|
|
return $matches[1];
|
|
}
|
|
|
|
return $name;
|
|
}
|
|
|
|
/**
|
|
* Get the array value.
|
|
*
|
|
* @param array $array The array
|
|
* @param string $name The key name
|
|
* @param mixed $default The default value
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function getArrayValue(array $array, $name, $default = null)
|
|
{
|
|
return array_key_exists($name, $array)
|
|
? $array[$name]
|
|
: $default;
|
|
}
|
|
|
|
/**
|
|
* Write the vcs repository name in output console.
|
|
*
|
|
* @param IOInterface $io The IO instance
|
|
* @param string $name The vcs repository name
|
|
*/
|
|
protected static function writeAddRepository(IOInterface $io, $name)
|
|
{
|
|
if ($io->isVerbose()) {
|
|
$io->write('Adding VCS repository <info>'.$name.'</info>');
|
|
}
|
|
}
|
|
}
|