first commit
This commit is contained in:
22
vendor/kylekatarnls/update-helper/LICENSE
vendored
Normal file
22
vendor/kylekatarnls/update-helper/LICENSE
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 https://github.com/pug-php
|
||||
Copyright (c) 2017 https://github.com/kylekatarnls
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
43
vendor/kylekatarnls/update-helper/composer.json
vendored
Normal file
43
vendor/kylekatarnls/update-helper/composer.json
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "kylekatarnls/update-helper",
|
||||
"description": "Update helper",
|
||||
"type": "composer-plugin",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Kyle",
|
||||
"email": "kylekatarnls@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.3.0",
|
||||
"composer-plugin-api": "^1.1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "^2.0.x-dev",
|
||||
"phpunit/phpunit": ">=4.8.35 <6.0",
|
||||
"codeclimate/php-test-reporter": "dev-master"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"UpdateHelper\\": "src/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"post-install-cmd": [
|
||||
"UpdateHelper\\UpdateHelper::check"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"UpdateHelper\\UpdateHelper::check"
|
||||
],
|
||||
"post-package-install": [
|
||||
"UpdateHelper\\UpdateHelper::check"
|
||||
],
|
||||
"post-package-update": [
|
||||
"UpdateHelper\\UpdateHelper::check"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"class": "UpdateHelper\\ComposerPlugin"
|
||||
}
|
||||
}
|
||||
37
vendor/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php
vendored
Normal file
37
vendor/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace UpdateHelper;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\EventDispatcher\Event;
|
||||
use Composer\EventDispatcher\EventSubscriberInterface;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\Plugin\PluginInterface;
|
||||
|
||||
class ComposerPlugin implements PluginInterface, EventSubscriberInterface
|
||||
{
|
||||
protected $io;
|
||||
|
||||
public function activate(Composer $composer, IOInterface $io)
|
||||
{
|
||||
$this->io = $io;
|
||||
}
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return array(
|
||||
'post-autoload-dump' => array(
|
||||
array('onAutoloadDump', 0),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
public function onAutoloadDump(Event $event)
|
||||
{
|
||||
if (!class_exists('UpdateHelper\\UpdateHelper')) {
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateHelper::check($event);
|
||||
}
|
||||
}
|
||||
349
vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php
vendored
Normal file
349
vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php
vendored
Normal file
@@ -0,0 +1,349 @@
|
||||
<?php
|
||||
|
||||
namespace UpdateHelper;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\EventDispatcher\Event;
|
||||
use Composer\Installer\PackageEvent;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\Json\JsonFile;
|
||||
use Composer\Script\Event as ScriptEvent;
|
||||
use Composer\Semver\Semver;
|
||||
|
||||
class UpdateHelper
|
||||
{
|
||||
/** @var Event */
|
||||
private $event;
|
||||
/** @var IOInterface */
|
||||
private $io;
|
||||
/** @var Composer */
|
||||
private $composer;
|
||||
/** @var array */
|
||||
private $dependencies = array();
|
||||
/** @var string */
|
||||
private $composerFilePath;
|
||||
/** @var JsonFile */
|
||||
private $file;
|
||||
|
||||
protected static function appendConfig(&$classes, $directory, $key = null)
|
||||
{
|
||||
$file = $directory.DIRECTORY_SEPARATOR.'composer.json';
|
||||
$json = new JsonFile($file);
|
||||
$key = $key ? $key : 'update-helper';
|
||||
|
||||
try {
|
||||
$dependencyConfig = $json->read();
|
||||
} catch (\RuntimeException $e) {
|
||||
$dependencyConfig = null;
|
||||
}
|
||||
|
||||
if (is_array($dependencyConfig) && isset($dependencyConfig['extra'], $dependencyConfig['extra'][$key])) {
|
||||
$classes[$file] = $dependencyConfig['extra'][$key];
|
||||
}
|
||||
}
|
||||
|
||||
protected static function getUpdateHelperConfig(Composer $composer, $key = null)
|
||||
{
|
||||
$vendorDir = $composer->getConfig()->get('vendor-dir');
|
||||
|
||||
$npm = array();
|
||||
|
||||
foreach (scandir($vendorDir) as $namespace) {
|
||||
if ($namespace === '.' || $namespace === '..' || !is_dir($directory = $vendorDir.DIRECTORY_SEPARATOR.$namespace)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (scandir($directory) as $dependency) {
|
||||
if ($dependency === '.' || $dependency === '..' || !is_dir($subDirectory = $directory.DIRECTORY_SEPARATOR.$dependency)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
static::appendConfig($npm, $subDirectory, $key);
|
||||
}
|
||||
}
|
||||
|
||||
static::appendConfig($npm, dirname($vendorDir), $key);
|
||||
|
||||
return $npm;
|
||||
}
|
||||
|
||||
public static function check(Event $event)
|
||||
{
|
||||
if ($event instanceof ScriptEvent || $event instanceof PackageEvent) {
|
||||
$io = $event->getIO();
|
||||
$composer = $event->getComposer();
|
||||
$autoload = __DIR__.'/../../../../autoload.php';
|
||||
|
||||
if (file_exists($autoload)) {
|
||||
include_once $autoload;
|
||||
}
|
||||
|
||||
$classes = static::getUpdateHelperConfig($composer);
|
||||
|
||||
foreach ($classes as $file => $class) {
|
||||
$error = null;
|
||||
|
||||
if (is_string($class) && class_exists($class)) {
|
||||
try {
|
||||
$helper = new $class();
|
||||
} catch (\Exception $e) {
|
||||
$error = $e->getMessage()."\nFile: ".$e->getFile()."\nLine:".$e->getLine()."\n\n".$e->getTraceAsString();
|
||||
} catch (\Throwable $e) {
|
||||
$error = $e->getMessage()."\nFile: ".$e->getFile()."\nLine:".$e->getLine()."\n\n".$e->getTraceAsString();
|
||||
}
|
||||
|
||||
if (!$error && $helper instanceof UpdateHelperInterface) {
|
||||
$helper->check(new static($event, $io, $composer));
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$error = JsonFile::encode($class).' is not an instance of UpdateHelperInterface.';
|
||||
}
|
||||
|
||||
$io->writeError('UpdateHelper error in '.$file.":\n".$error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function __construct(Event $event, IOInterface $io = null, Composer $composer = null)
|
||||
{
|
||||
$this->event = $event;
|
||||
$this->io = $io ?: (method_exists($event, 'getIO') ? $event->getIO() : null);
|
||||
$this->composer = $composer ?: (method_exists($event, 'getComposer') ? $event->getComposer() : null);
|
||||
|
||||
if ($this->composer &&
|
||||
($directory = $this->composer->getConfig()->get('archive-dir')) &&
|
||||
file_exists($file = $directory.'/composer.json')
|
||||
) {
|
||||
$this->composerFilePath = $file;
|
||||
$this->file = new JsonFile($this->composerFilePath);
|
||||
$this->dependencies = $this->file->read();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return JsonFile
|
||||
*/
|
||||
public function getFile()
|
||||
{
|
||||
return $this->file;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getComposerFilePath()
|
||||
{
|
||||
return $this->composerFilePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Composer
|
||||
*/
|
||||
public function getComposer()
|
||||
{
|
||||
return $this->composer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Event
|
||||
*/
|
||||
public function getEvent()
|
||||
{
|
||||
return $this->event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IOInterface
|
||||
*/
|
||||
public function getIo()
|
||||
{
|
||||
return $this->io;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getDependencies()
|
||||
{
|
||||
return $this->dependencies;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getDevDependencies()
|
||||
{
|
||||
return isset($this->dependencies['require-dev']) ? $this->dependencies['require-dev'] : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getProdDependencies()
|
||||
{
|
||||
return isset($this->dependencies['require']) ? $this->dependencies['require'] : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getFlattenDependencies()
|
||||
{
|
||||
return array_merge($this->getDevDependencies(), $this->getProdDependencies());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $dependency
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasAsDevDependency($dependency)
|
||||
{
|
||||
return isset($this->dependencies['require-dev'][$dependency]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $dependency
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasAsProdDependency($dependency)
|
||||
{
|
||||
return isset($this->dependencies['require'][$dependency]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $dependency
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasAsDependency($dependency)
|
||||
{
|
||||
return $this->hasAsDevDependency($dependency) || $this->hasAsProdDependency($dependency);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $dependency
|
||||
* @param string $version
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isDependencyAtLeast($dependency, $version)
|
||||
{
|
||||
if ($this->hasAsProdDependency($dependency)) {
|
||||
return Semver::satisfies($version, $this->dependencies['require'][$dependency]);
|
||||
}
|
||||
|
||||
if ($this->hasAsDevDependency($dependency)) {
|
||||
return Semver::satisfies($version, $this->dependencies['require-dev'][$dependency]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $dependency
|
||||
* @param string $version
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isDependencyLesserThan($dependency, $version)
|
||||
{
|
||||
return !$this->isDependencyAtLeast($dependency, $version);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $dependency
|
||||
* @param string $version
|
||||
* @param array $environments
|
||||
*
|
||||
* @throws \Exception
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setDependencyVersion($dependency, $version, $environments = array('require', 'require-dev'))
|
||||
{
|
||||
return $this->setDependencyVersions(array($dependency => $version), $environments);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $dependencies
|
||||
* @param array $environments
|
||||
*
|
||||
* @throws \Exception
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setDependencyVersions($dependencies, $environments = array('require', 'require-dev'))
|
||||
{
|
||||
if (!$this->composerFilePath) {
|
||||
throw new \RuntimeException('No composer instance detected.');
|
||||
}
|
||||
|
||||
$touched = false;
|
||||
|
||||
foreach ($environments as $environment) {
|
||||
foreach ($dependencies as $dependency => $version) {
|
||||
if (isset($this->dependencies[$environment], $this->dependencies[$environment][$dependency])) {
|
||||
$this->dependencies[$environment][$dependency] = $version;
|
||||
$touched = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($touched) {
|
||||
if (!$this->composerFilePath) {
|
||||
throw new \RuntimeException('composer.json not found (custom vendor-dir are not yet supported).');
|
||||
}
|
||||
|
||||
$file = new JsonFile($this->composerFilePath);
|
||||
$file->write($this->dependencies);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
public function update()
|
||||
{
|
||||
$output = shell_exec('composer update --no-scripts');
|
||||
|
||||
if (!empty($output)) {
|
||||
$this->write($output);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|array $text
|
||||
*/
|
||||
public function write($text)
|
||||
{
|
||||
if ($this->io) {
|
||||
$this->io->write($text);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_array($text)) {
|
||||
$text = implode("\n", $text);
|
||||
}
|
||||
|
||||
echo $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isInteractive()
|
||||
{
|
||||
return $this->io && $this->io->isInteractive();
|
||||
}
|
||||
}
|
||||
8
vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php
vendored
Normal file
8
vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace UpdateHelper;
|
||||
|
||||
interface UpdateHelperInterface
|
||||
{
|
||||
public function check(UpdateHelper $helper);
|
||||
}
|
||||
Reference in New Issue
Block a user