mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-16 23:48:16 +08:00
Extension installer wip
This commit is contained in:
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "yiisoft/yii2-composer",
|
"name": "yiisoft/yii2-composer",
|
||||||
"description": "The composer integration for the Yii framework",
|
"description": "The composer plugin for Yii extension installer",
|
||||||
"keywords": ["yii", "composer", "install", "update"],
|
"keywords": ["yii", "composer", "extension installer"],
|
||||||
"type": "library",
|
"type": "composer-plugin",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
|
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
|
||||||
@ -18,9 +18,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"require": {
|
|
||||||
"yiisoft/yii2": "*"
|
|
||||||
},
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": { "yii\\composer\\": "" }
|
"psr-0": { "yii\\composer\\": "" }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,9 @@ namespace yii\composer;
|
|||||||
use Composer\Package\PackageInterface;
|
use Composer\Package\PackageInterface;
|
||||||
use Composer\Installer\LibraryInstaller;
|
use Composer\Installer\LibraryInstaller;
|
||||||
use Composer\Repository\InstalledRepositoryInterface;
|
use Composer\Repository\InstalledRepositoryInterface;
|
||||||
|
use Composer\Script\CommandEvent;
|
||||||
|
use yii\console\Application;
|
||||||
|
use yii\console\Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||||
@ -17,20 +20,18 @@ use Composer\Repository\InstalledRepositoryInterface;
|
|||||||
*/
|
*/
|
||||||
class Installer extends LibraryInstaller
|
class Installer extends LibraryInstaller
|
||||||
{
|
{
|
||||||
const EXTRA_WRITABLES = 'yii-writables';
|
const EXTRA_WRITABLE = 'writable';
|
||||||
const EXTRA_EXECUTABLES = 'yii-executables';
|
const EXTRA_EXECUTABLE = 'executable';
|
||||||
const EXTRA_CONFIG = 'yii-config';
|
const EXTRA_CONFIG = 'yii-config';
|
||||||
const EXTRA_COMMANDS = 'yii-commands';
|
const EXTRA_COMMANDS = 'yii-commands';
|
||||||
const EXTRA_ALIASES = 'yii-aliases';
|
const EXTRA_BOOTSTRAP = 'bootstrap';
|
||||||
const EXTRA_PREINIT = 'yii-preinit';
|
|
||||||
const EXTRA_INIT = 'yii-init';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function supports($packageType)
|
public function supports($packageType)
|
||||||
{
|
{
|
||||||
return $packageType === 'yii2-extension';
|
return $packageType === 'yii-extension';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -63,81 +64,39 @@ class Installer extends LibraryInstaller
|
|||||||
|
|
||||||
protected function addPackage(PackageInterface $package)
|
protected function addPackage(PackageInterface $package)
|
||||||
{
|
{
|
||||||
$extension = ['name' => $package->getPrettyName()];
|
$extension = [
|
||||||
|
'name' => $package->getPrettyName(),
|
||||||
$root = $package->getPrettyName();
|
'version' => $package->getVersion(),
|
||||||
if ($targetDir = $package->getTargetDir()) {
|
];
|
||||||
$root .= '/' . trim($targetDir, '/');
|
|
||||||
}
|
|
||||||
$root = trim($root, '/');
|
|
||||||
|
|
||||||
$extra = $package->getExtra();
|
$extra = $package->getExtra();
|
||||||
|
|
||||||
if (isset($extra[self::EXTRA_PREINIT]) && is_string($extra[self::EXTRA_PREINIT])) {
|
if (isset($extra[self::EXTRA_BOOTSTRAP]) && is_string($extra[self::EXTRA_BOOTSTRAP])) {
|
||||||
$extension[self::EXTRA_PREINIT] = "<vendor-dir>/$root/" . ltrim(str_replace('\\', '/', $extra[self::EXTRA_PREINIT]), '/');
|
$extension['bootstrap'] = $extra[self::EXTRA_BOOTSTRAP];
|
||||||
}
|
|
||||||
if (isset($extra[self::EXTRA_INIT]) && is_string($extra[self::EXTRA_INIT])) {
|
|
||||||
$extension[self::EXTRA_INIT] = "<vendor-dir>/$root/" . ltrim(str_replace('\\', '/', $extra[self::EXTRA_INIT]), '/');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($extra['aliases']) && is_array($extra['aliases'])) {
|
|
||||||
foreach ($extra['aliases'] as $alias => $path) {
|
|
||||||
$extension['aliases']['@' . ltrim($alias, '@')] = "<vendor-dir>/$root/" . ltrim(str_replace('\\', '/', $path), '/');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($aliases)) {
|
|
||||||
foreach ($aliases as $alias => $path) {
|
|
||||||
if (strncmp($alias, '@', 1) !== 0) {
|
|
||||||
$alias = '@' . $alias;
|
|
||||||
}
|
|
||||||
$path = trim(str_replace('\\', '/', $path), '/');
|
|
||||||
$extension['aliases'][$alias] = $root . '/' . $path;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$extensions = $this->loadExtensions();
|
$extensions = $this->loadExtensions();
|
||||||
$extensions[$package->getId()] = $extension;
|
$extensions[$package->getUniqueName()] = $extension;
|
||||||
$this->saveExtensions($extensions);
|
$this->saveExtensions($extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function removePackage(PackageInterface $package)
|
protected function removePackage(PackageInterface $package)
|
||||||
{
|
{
|
||||||
$packages = $this->loadExtensions();
|
$packages = $this->loadExtensions();
|
||||||
unset($packages[$package->getId()]);
|
unset($packages[$package->getUniqueName()]);
|
||||||
$this->saveExtensions($packages);
|
$this->saveExtensions($packages);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function loadExtensions()
|
protected function loadExtensions()
|
||||||
{
|
{
|
||||||
$file = $this->vendorDir . '/yii-extensions.php';
|
$file = $this->vendorDir . '/yii-extensions.php';
|
||||||
if (!is_file($file)) {
|
return is_file($file) ? require($file) : [];
|
||||||
return [];
|
|
||||||
}
|
|
||||||
$extensions = require($file);
|
|
||||||
/** @var string $vendorDir defined in yii-extensions.php */
|
|
||||||
$n = strlen($vendorDir);
|
|
||||||
foreach ($extensions as &$extension) {
|
|
||||||
if (isset($extension['aliases'])) {
|
|
||||||
foreach ($extension['aliases'] as $alias => $path) {
|
|
||||||
$extension['aliases'][$alias] = '<vendor-dir>' . substr($path, $n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isset($extension[self::EXTRA_PREINIT])) {
|
|
||||||
$extension[self::EXTRA_PREINIT] = '<vendor-dir>' . substr($extension[self::EXTRA_PREINIT], $n);
|
|
||||||
}
|
|
||||||
if (isset($extension[self::EXTRA_INIT])) {
|
|
||||||
$extension[self::EXTRA_INIT] = '<vendor-dir>' . substr($extension[self::EXTRA_INIT], $n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $extensions;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function saveExtensions(array $extensions)
|
protected function saveExtensions(array $extensions)
|
||||||
{
|
{
|
||||||
$file = $this->vendorDir . '/yii-extensions.php';
|
$file = $this->vendorDir . '/yii-extensions.php';
|
||||||
$array = str_replace("'<vendor-dir>", '$vendorDir . \'', var_export($extensions, true));
|
file_put_contents($file, "<?php\nreturn " . var_export($extensions, true) . ";\n");
|
||||||
file_put_contents($file, "<?php\n\$vendorDir = __DIR__;\n\nreturn $array;\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -148,11 +107,11 @@ class Installer extends LibraryInstaller
|
|||||||
public static function setPermissions($event)
|
public static function setPermissions($event)
|
||||||
{
|
{
|
||||||
$options = array_merge([
|
$options = array_merge([
|
||||||
self::EXTRA_WRITABLES => [],
|
self::EXTRA_WRITABLE => [],
|
||||||
self::EXTRA_EXECUTABLES => [],
|
self::EXTRA_EXECUTABLE => [],
|
||||||
], $event->getComposer()->getPackage()->getExtra());
|
], $event->getComposer()->getPackage()->getExtra());
|
||||||
|
|
||||||
foreach ((array)$options[self::EXTRA_WRITABLES] as $path) {
|
foreach ((array)$options[self::EXTRA_WRITABLE] as $path) {
|
||||||
echo "Setting writable: $path ...";
|
echo "Setting writable: $path ...";
|
||||||
if (is_dir($path)) {
|
if (is_dir($path)) {
|
||||||
chmod($path, 0777);
|
chmod($path, 0777);
|
||||||
@ -163,7 +122,7 @@ class Installer extends LibraryInstaller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ((array)$options[self::EXTRA_EXECUTABLES] as $path) {
|
foreach ((array)$options[self::EXTRA_EXECUTABLE] as $path) {
|
||||||
echo "Setting executable: $path ...";
|
echo "Setting executable: $path ...";
|
||||||
if (is_file($path)) {
|
if (is_file($path)) {
|
||||||
chmod($path, 0755);
|
chmod($path, 0755);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"name": "yiisoft/yii2-mutex",
|
"name": "yiisoft/yii2-mutex",
|
||||||
"description": "Mutual exclusion extension for the Yii framework",
|
"description": "Mutual exclusion extension for the Yii framework",
|
||||||
"keywords": ["yii", "mutex"],
|
"keywords": ["yii", "mutex"],
|
||||||
"type": "library",
|
"type": "yii-extension",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
|
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
|
||||||
@ -23,5 +23,8 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": { "yii\\mutex\\": "" }
|
"psr-0": { "yii\\mutex\\": "" }
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"bootstrap": "yii\\mutex\\Extension"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,7 @@
|
|||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.4.0",
|
"php": ">=5.4.0",
|
||||||
|
"yiisoft/yii2-composer": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"lib-pcre": "*",
|
"lib-pcre": "*",
|
||||||
"phpspec/php-diff": "1.0.*",
|
"phpspec/php-diff": "1.0.*",
|
||||||
|
Reference in New Issue
Block a user