mirror of
https://github.com/andres-montanez/Magallanes
synced 2024-06-11 02:02:15 +02:00
Merge pull request #95 from voukka/master
Many bug fixes. With this fixes I was able to test my own Tasks! :)
This commit is contained in:
commit
bf902c9853
|
@ -20,34 +20,40 @@ class Autoload
|
|||
/**
|
||||
* Autoload a Class by it's Class Name
|
||||
* @param string $className
|
||||
* @return boolean
|
||||
*/
|
||||
public static function autoload($className)
|
||||
public function autoLoad($className)
|
||||
{
|
||||
$className = ltrim($className, '/');
|
||||
$postfix = '/' . str_replace(array('_', '\\'), '/', $className . '.php');
|
||||
|
||||
//Try to load a normal Mage class (or Task). Think that Mage component is compiled to .phar
|
||||
$baseDir = dirname(dirname(__FILE__));
|
||||
$classFile = $baseDir . '/' . str_replace(array('_', '\\'), '/', $className . '.php');
|
||||
require_once $classFile;
|
||||
$classFileWithinPhar = $baseDir . $postfix;
|
||||
if($this->isReadable($classFileWithinPhar))
|
||||
{
|
||||
require_once $classFileWithinPhar;
|
||||
return true;
|
||||
}
|
||||
|
||||
//Try to load a custom Task or Class. Notice that the path is absolute to CWD
|
||||
$classFileOutsidePhar = getcwd() . '/.mage/tasks' . $postfix;
|
||||
if($this->isReadable($classFileOutsidePhar)){
|
||||
require_once $classFileOutsidePhar;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a Class can be loaded.
|
||||
* @param string $className
|
||||
* Checks if a file can be read.
|
||||
* @param string $filePath
|
||||
* @return boolean
|
||||
*/
|
||||
public static function isLoadable($className)
|
||||
public function isReadable($filePath)
|
||||
{
|
||||
$baseDir = dirname(dirname(__FILE__));
|
||||
$classFile = $baseDir . '/' . str_replace(array('_', '\\'), '/', $className . '.php');
|
||||
return (file_exists($classFile) && is_readable($classFile));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a User's Tasks
|
||||
* @param string $taskName
|
||||
*/
|
||||
public static function loadUserTask($taskName)
|
||||
{
|
||||
$classFile = getcwd() . '/.mage/tasks/' . ucfirst($taskName) . '.php';
|
||||
require_once $classFile;
|
||||
return is_readable($filePath);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,7 +30,15 @@ use Exception;
|
|||
*/
|
||||
class DeployCommand extends AbstractCommand implements RequiresEnvironment
|
||||
{
|
||||
/**
|
||||
const DEFAULT_RELEASE_IS_ENABLED = false;
|
||||
const DEPLOY_STRATEGY_DISABLED = 'disabled';
|
||||
const DEPLOY_STRATEGY_RSYNC = 'rsync';
|
||||
const DEPLOY_STRATEGY_TARGZ = 'targz';
|
||||
const DEPLOY_STRATEGY_GIT_REBASE = 'git-rebase';
|
||||
const DEPLOY_STRATEGY_GUESS = 'guess';
|
||||
const DEFAULT_DEPLOY_STRATEGY = self::DEPLOY_STRATEGY_GUESS;
|
||||
|
||||
/**
|
||||
* Deploy has Failed
|
||||
* @var string
|
||||
*/
|
||||
|
@ -298,35 +306,9 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
|
|||
|
||||
$tasksToRun = $this->getConfig()->getTasks();
|
||||
|
||||
// Guess a Deploy Strategy
|
||||
switch ($this->getConfig()->deployment('strategy', 'guess')) {
|
||||
case 'disabled':
|
||||
$deployStrategy = 'deployment/strategy/disabled';
|
||||
break;
|
||||
$deployStrategy = $this->chooseDeployStrategy();
|
||||
|
||||
case 'rsync':
|
||||
$deployStrategy = 'deployment/strategy/rsync';
|
||||
break;
|
||||
|
||||
case 'targz':
|
||||
$deployStrategy = 'deployment/strategy/tar-gz';
|
||||
break;
|
||||
|
||||
case 'git-rebase':
|
||||
$deployStrategy = 'deployment/strategy/git-rebase';
|
||||
break;
|
||||
|
||||
case 'guess':
|
||||
default:
|
||||
if ($this->getConfig()->release('enabled', false) == true) {
|
||||
$deployStrategy = 'deployment/strategy/tar-gz';
|
||||
} else {
|
||||
$deployStrategy = 'deployment/strategy/rsync';
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
array_unshift($tasksToRun, $deployStrategy);
|
||||
array_unshift($tasksToRun, $deployStrategy);
|
||||
|
||||
if (count($tasksToRun) == 0) {
|
||||
Console::output('<light_purple>Warning!</light_purple> <dark_gray>No </dark_gray><light_cyan>Deployment</light_cyan> <dark_gray>tasks defined.</dark_gray>', 2);
|
||||
|
@ -381,7 +363,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
|
|||
$this->getConfig()->setHost($host);
|
||||
$this->getConfig()->setHostConfig($hostConfig);
|
||||
|
||||
$task = Factory::get('deployment/release', $this->getConfig(), false, AbstractTask::STAGE_DEPLOY);
|
||||
$task = Factory::get($this->chooseReleaseStrategy(), $this->getConfig(), false, AbstractTask::STAGE_DEPLOY);
|
||||
|
||||
if ($this->runTask($task, 'Releasing on host <purple>' . $host . '</purple> ... ')) {
|
||||
$completedTasks++;
|
||||
|
@ -543,4 +525,56 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function chooseDeployStrategy()
|
||||
{
|
||||
// Guess a Deploy Strategy
|
||||
switch ($this->getConfig()->deployment('strategy', self::DEFAULT_DEPLOY_STRATEGY)) {
|
||||
case self::DEPLOY_STRATEGY_DISABLED:
|
||||
$deployStrategy = 'deployment/strategy/disabled';
|
||||
break;
|
||||
|
||||
case self::DEPLOY_STRATEGY_RSYNC:
|
||||
$deployStrategy = 'deployment/strategy/rsync';
|
||||
break;
|
||||
|
||||
case self::DEPLOY_STRATEGY_TARGZ:
|
||||
$deployStrategy = 'deployment/strategy/tar-gz';
|
||||
break;
|
||||
|
||||
case self::DEPLOY_STRATEGY_GIT_REBASE:
|
||||
$deployStrategy = 'deployment/strategy/git-rebase';
|
||||
break;
|
||||
|
||||
case self::DEPLOY_STRATEGY_GUESS:
|
||||
default:
|
||||
if ($this->getConfig()->release('enabled', false) == true) {
|
||||
$deployStrategy = 'deployment/strategy/tar-gz';
|
||||
} else {
|
||||
$deployStrategy = 'deployment/strategy/rsync';
|
||||
}
|
||||
break;
|
||||
}
|
||||
return $deployStrategy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function chooseReleaseStrategy()
|
||||
{
|
||||
|
||||
if ($this->getConfig()->release('enabled', self::DEFAULT_RELEASE_IS_ENABLED)
|
||||
&& $this->getConfig()->deployment('strategy', self::DEFAULT_DEPLOY_STRATEGY) !== self::DEPLOY_STRATEGY_DISABLED
|
||||
) {
|
||||
$strategy = 'deployment/release';
|
||||
} else {
|
||||
$strategy = 'deployment/strategy/disabled';
|
||||
}
|
||||
|
||||
return $strategy;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,44 +28,51 @@ class ReleasesCommand extends AbstractCommand implements RequiresEnvironment
|
|||
*/
|
||||
public function run()
|
||||
{
|
||||
if (!is_numeric($this->getConfig()->getParameter('release', ''))) {
|
||||
Console::output('<red>This release is mandatory.</red>', 1, 2);
|
||||
return false;
|
||||
}
|
||||
|
||||
$subcommand = $this->getConfig()->getArgument(1);
|
||||
$lockFile = getcwd() . '/.mage/' . $this->getConfig()->getEnvironment() . '.lock';
|
||||
if (file_exists($lockFile) && ($subcommand == 'rollback')) {
|
||||
Console::output('<red>This environment is locked!</red>', 1, 2);
|
||||
echo file_get_contents($lockFile);
|
||||
return null;
|
||||
}
|
||||
$subCommand = $this->getConfig()->getArgument(1);
|
||||
|
||||
// Run Tasks for Deployment
|
||||
$hosts = $this->getConfig()->getHosts();
|
||||
|
||||
if (count($hosts) == 0) {
|
||||
Console::output('<light_purple>Warning!</light_purple> <dark_gray>No hosts defined, unable to get releases.</dark_gray>', 1, 3);
|
||||
Console::output(
|
||||
'<light_purple>Warning!</light_purple> <dark_gray>No hosts defined, unable to get releases.</dark_gray>',
|
||||
1, 3
|
||||
);
|
||||
|
||||
} else {
|
||||
foreach ($hosts as $host) {
|
||||
$this->getConfig()->setHost($host);
|
||||
return false;
|
||||
}
|
||||
|
||||
switch ($subcommand) {
|
||||
case 'list':
|
||||
$task = Factory::get('releases/list', $this->getConfig());
|
||||
$task->init();
|
||||
$result = $task->run();
|
||||
break;
|
||||
foreach ($hosts as $host) {
|
||||
$this->getConfig()->setHost($host);
|
||||
|
||||
case 'rollback':
|
||||
$releaseId = $this->getConfig()->getParameter('release', '');
|
||||
$task = Factory::get('releases/rollback', $this->getConfig());
|
||||
$task->init();
|
||||
$task->setRelease($releaseId);
|
||||
$result = $task->run();
|
||||
break;
|
||||
switch ($subCommand) {
|
||||
case 'list':
|
||||
$task = Factory::get('releases/list', $this->getConfig());
|
||||
$task->init();
|
||||
$result = $task->run();
|
||||
break;
|
||||
|
||||
case 'rollback':
|
||||
if (!is_numeric($this->getConfig()->getParameter('release', ''))) {
|
||||
Console::output('<red>Missing required releaseid.</red>', 1, 2);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$lockFile = getcwd() . '/.mage/' . $this->getConfig()->getEnvironment() . '.lock';
|
||||
if (file_exists($lockFile)) {
|
||||
Console::output('<red>This environment is locked!</red>', 1, 2);
|
||||
echo file_get_contents($lockFile);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$releaseId = $this->getConfig()->getParameter('release', '');
|
||||
$task = Factory::get('releases/rollback', $this->getConfig());
|
||||
$task->init();
|
||||
$task->setRelease($releaseId);
|
||||
$result = $task->run();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,18 +38,14 @@ class Factory
|
|||
|
||||
$commandName = str_replace(' ', '_', ucwords(str_replace('/', ' ', $commandName)));
|
||||
$className = 'Mage\\Command\\BuiltIn\\' . $commandName . 'Command';
|
||||
if (Autoload::isLoadable($className)) {
|
||||
$instance = new $className;
|
||||
assert($instance instanceOf AbstractCommand);
|
||||
$instance->setConfig($config);
|
||||
} else {
|
||||
throw new Exception('Command not found.');
|
||||
}
|
||||
|
||||
if(!($instance instanceOf AbstractCommand)) {
|
||||
/** @var AbstractCommand $instance */
|
||||
$instance = new $className;
|
||||
if(!is_a($instance, "Mage\Command\AbstractCommand")) {
|
||||
throw new Exception('The command ' . $commandName . ' must be an instance of Mage\Command\AbstractCommand.');
|
||||
}
|
||||
|
||||
$instance->setConfig($config);
|
||||
|
||||
return $instance;
|
||||
}
|
||||
}
|
227
Mage/Config.php
227
Mage/Config.php
|
@ -10,6 +10,10 @@
|
|||
|
||||
namespace Mage;
|
||||
|
||||
use Mage\Config\ConfigNotFoundException;
|
||||
use Mage\Config\RequiredConfigNotFoundException;
|
||||
use Mage\Console;
|
||||
use Mage\Yaml\Exception\RuntimeException;
|
||||
use Mage\Yaml\Yaml;
|
||||
use Exception;
|
||||
|
||||
|
@ -20,7 +24,8 @@ use Exception;
|
|||
*/
|
||||
class Config
|
||||
{
|
||||
/**
|
||||
const HOST_NAME_LENGTH = 1000;
|
||||
/**
|
||||
* Arguments loaded
|
||||
* @var array
|
||||
*/
|
||||
|
@ -51,23 +56,20 @@ class Config
|
|||
private $hostConfig = array();
|
||||
|
||||
/**
|
||||
* The Relase ID
|
||||
* The Release ID
|
||||
* @var integer
|
||||
*/
|
||||
private $releaseId = null;
|
||||
|
||||
/**
|
||||
* Magallanes Global and Environment configuration
|
||||
* @var array
|
||||
*/
|
||||
private $config = array(
|
||||
'general' => array(),
|
||||
'environment' => array(),
|
||||
);
|
||||
private $generalConfig = array();
|
||||
private $environmentConfig = array();
|
||||
|
||||
/**
|
||||
* Parse the Command Line options
|
||||
* @return boolean
|
||||
* @param $arguments
|
||||
*/
|
||||
protected function parse($arguments)
|
||||
{
|
||||
|
@ -95,45 +97,112 @@ class Config
|
|||
}
|
||||
|
||||
/**
|
||||
* Loads the General Configuration
|
||||
* Initializes the General Configuration
|
||||
*/
|
||||
protected function loadGeneral()
|
||||
protected function initGeneral()
|
||||
{
|
||||
if (file_exists(getcwd() . '/.mage/config/general.yml')) {
|
||||
$this->config['general'] = Yaml::parse(file_get_contents(getcwd() . '/.mage/config/general.yml'));
|
||||
}
|
||||
try {
|
||||
$this->generalConfig = $this->loadGeneral(getcwd() . '/.mage/config/general.yml');
|
||||
} catch (ConfigNotFoundException $e) {
|
||||
// normal situation
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load general config from the given file
|
||||
*
|
||||
* @param $filePath
|
||||
*
|
||||
* @return array
|
||||
* @throws Config\ConfigNotFoundException
|
||||
*/
|
||||
protected function loadGeneral($filePath){
|
||||
return $this->parseConfigFile($filePath);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obviously this method is a HACK. It was refactored from ::loadEnvironment()
|
||||
* TODO Please put it to SCM functionality.
|
||||
*
|
||||
* @param array $settings
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function updateSCMTempDir(array $settings)
|
||||
{
|
||||
// Create temporal directory for clone
|
||||
if (isset($settings['deployment']['source']) && is_array($settings['deployment']['source'])) {
|
||||
if (trim($settings['deployment']['source']['temporal']) == '') {
|
||||
$settings['deployment']['source']['temporal'] = sys_get_temp_dir();
|
||||
}
|
||||
$settings['deployment']['source']['temporal']
|
||||
= rtrim($settings['deployment']['source']['temporal'], '/') . '/' . md5(microtime()) . '/';
|
||||
}
|
||||
|
||||
return $settings;
|
||||
}
|
||||
/**
|
||||
* Loads the Environment configuration
|
||||
* @param $filePath string
|
||||
*
|
||||
* @throws Exception
|
||||
* @return boolean
|
||||
*/
|
||||
protected function loadEnvironment()
|
||||
protected function loadEnvironment($filePath)
|
||||
{
|
||||
$environment = $this->getEnvironment();
|
||||
if (($environment != false) && file_exists(getcwd() . '/.mage/config/environment/' . $environment . '.yml')) {
|
||||
$this->config['environment'] = Yaml::parse(file_get_contents(getcwd() . '/.mage/config/environment/' . $environment . '.yml'));
|
||||
|
||||
// Create temporal directory for clone
|
||||
if (isset($this->config['environment']['deployment']['source']) && is_array($this->config['environment']['deployment']['source'])) {
|
||||
if (trim($this->config['environment']['deployment']['source']['temporal']) == '') {
|
||||
$this->config['environment']['deployment']['source']['temporal'] = '/tmp';
|
||||
}
|
||||
$newTemporal = rtrim($this->config['environment']['deployment']['source']['temporal'], '/')
|
||||
. '/' . md5(microtime()) . '/';
|
||||
$this->config['environment']['deployment']['source']['temporal'] = $newTemporal;
|
||||
}
|
||||
return true;
|
||||
$settings = $this->parseConfigFile($filePath);
|
||||
|
||||
} else if (($environment != '') && !file_exists(getcwd() . '/.mage/config/environment/' . $environment . '.yml')) {
|
||||
throw new Exception('Environment does not exists.');
|
||||
}
|
||||
//this is a HACK in the old code - no time to remove it now, so I factored it out in own method
|
||||
$settings = $this->updateSCMTempDir($settings);
|
||||
|
||||
return $settings;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the Environment configuration
|
||||
*
|
||||
* @throws Exception
|
||||
* @return boolean
|
||||
*/
|
||||
protected function initEnvironment()
|
||||
{
|
||||
$environment = $this->getEnvironment();
|
||||
|
||||
if(!empty($environment))
|
||||
{
|
||||
$configFilePath = getcwd() . '/.mage/config/environment/' . $environment . '.yml';
|
||||
|
||||
try {
|
||||
$this->environmentConfig = $this->loadEnvironment($configFilePath);
|
||||
} catch (ConfigNotFoundException $e) {
|
||||
throw new RequiredConfigNotFoundException("Not found required config $configFilePath for environment $environment", 0 , $e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param array $parameters
|
||||
* @return boolean
|
||||
*/
|
||||
protected function isRunInSpecialMode(array $parameters)
|
||||
{
|
||||
if(empty($parameters))
|
||||
return true;
|
||||
foreach($parameters as $parameter)
|
||||
{
|
||||
if(isset(Console::$paramsNotRequiringEnvironment[$parameter]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Load the Configuration and parses the Arguments
|
||||
*
|
||||
|
@ -142,8 +211,8 @@ class Config
|
|||
public function load($arguments)
|
||||
{
|
||||
$this->parse($arguments);
|
||||
$this->loadGeneral();
|
||||
$this->loadEnvironment();
|
||||
$this->initGeneral();
|
||||
$this->initEnvironment();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -151,8 +220,8 @@ class Config
|
|||
*/
|
||||
public function reload()
|
||||
{
|
||||
$this->loadGeneral();
|
||||
$this->loadEnvironment();
|
||||
$this->initGeneral();
|
||||
$this->initEnvironment();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -280,17 +349,12 @@ class Config
|
|||
{
|
||||
$hosts = array();
|
||||
|
||||
if (isset($this->config['environment']['hosts'])) {
|
||||
if (is_array($this->config['environment']['hosts'])) {
|
||||
$hosts = (array) $this->config['environment']['hosts'];
|
||||
} else if (is_string($this->config['environment']['hosts']) && file_exists($this->config['environment']['hosts']) && is_readable($this->config['environment']['hosts'])) {
|
||||
$fileContent = fopen($this->config['environment']['hosts'], 'r');
|
||||
while (($host = fgets($fileContent)) == true) {
|
||||
$host = trim($host);
|
||||
if ($host != '') {
|
||||
$hosts[] = $host;
|
||||
}
|
||||
}
|
||||
$envConfig = $this->getEnvironmentConfig();
|
||||
if (isset($envConfig['hosts'])) {
|
||||
if (is_array($envConfig['hosts'])) {
|
||||
$hosts = (array) $envConfig['hosts'];
|
||||
} else if (is_string($envConfig['hosts']) && file_exists($envConfig['hosts']) && is_readable($envConfig['hosts'])) {
|
||||
$hosts = $this->getHostsFromFile($envConfig['hosts']);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -373,7 +437,7 @@ class Config
|
|||
*/
|
||||
public function general($option, $default = false)
|
||||
{
|
||||
$config = $this->config['general'];
|
||||
$config = $this->getGeneralConfig();
|
||||
if (isset($config[$option])) {
|
||||
if (is_array($default) && ($config[$option] == '')) {
|
||||
return $default;
|
||||
|
@ -462,7 +526,8 @@ class Config
|
|||
*/
|
||||
public function setFrom($from)
|
||||
{
|
||||
$this->config['environment']['deployment']['from'] = $from;
|
||||
$envConfig = $this->getEnvironmentConfig();
|
||||
$envConfig['deployment']['from'] = $from;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -495,9 +560,9 @@ class Config
|
|||
* @param mixed $default
|
||||
* @return mixed
|
||||
*/
|
||||
protected function getEnvironmentOption($option, $default = array())
|
||||
public function getEnvironmentOption($option, $default = array())
|
||||
{
|
||||
$config = $this->config['environment'];
|
||||
$config = $this->getEnvironmentConfig();
|
||||
if (isset($config[$option])) {
|
||||
return $config[$option];
|
||||
} else {
|
||||
|
@ -505,4 +570,66 @@ class Config
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility methods. TODO To be extracted into own Class
|
||||
*/
|
||||
public function parseConfigFile($filePath)
|
||||
{
|
||||
if(!file_exists($filePath))
|
||||
{
|
||||
throw new ConfigNotFoundException("Cannot find the file at path $filePath");
|
||||
}
|
||||
|
||||
return $this->parseConfigText(file_get_contents($filePath));
|
||||
}
|
||||
public function parseConfigText($input)
|
||||
{
|
||||
return Yaml::parse($input);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function getGeneralConfig()
|
||||
{
|
||||
return $this->generalConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function getEnvironmentConfig()
|
||||
{
|
||||
return $this->environmentConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $filePath
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getHostsFromFile($filePath)
|
||||
{
|
||||
$handle = fopen($filePath, 'r');
|
||||
|
||||
$hosts = array();
|
||||
|
||||
try {
|
||||
$fileContent = stream_get_contents($handle);
|
||||
$hosts = json_decode($fileContent);
|
||||
} catch (Exception $e) {
|
||||
|
||||
rewind($handle);
|
||||
//do it old-style: one host per line
|
||||
while (($host = stream_get_line($handle, self::HOST_NAME_LENGTH)) !== false) {
|
||||
$host = trim($host);
|
||||
if (!empty($host)) {
|
||||
$hosts[] = $host;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $hosts;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
13
Mage/Config/ConfigNotFoundException.php
Normal file
13
Mage/Config/ConfigNotFoundException.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace Mage\Config;
|
||||
|
||||
use Mage\Yaml\Exception\RuntimeException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Vladimir Grigor <vgrigor@gmail.com>
|
||||
*/
|
||||
class ConfigNotFoundException extends RuntimeException
|
||||
{
|
||||
}
|
13
Mage/Config/OptionalConfigNotFoundException.php
Normal file
13
Mage/Config/OptionalConfigNotFoundException.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace Mage\Config;
|
||||
|
||||
use Mage\Yaml\Exception\RuntimeException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Vladimir Grigor <vgrigor@gmail.com>
|
||||
*/
|
||||
class OptionalConfigNotFoundException extends RuntimeException
|
||||
{
|
||||
}
|
13
Mage/Config/RequiredConfigNotFoundException.php
Normal file
13
Mage/Config/RequiredConfigNotFoundException.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace Mage\Config;
|
||||
|
||||
use Mage\Yaml\Exception\RuntimeException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Vladimir Grigor <vgrigor@gmail.com>
|
||||
*/
|
||||
class RequiredConfigNotFoundException extends RuntimeException
|
||||
{
|
||||
}
|
|
@ -24,6 +24,12 @@ use RecursiveDirectoryIterator;
|
|||
*/
|
||||
class Console
|
||||
{
|
||||
/**
|
||||
* TODO refactor into own static class
|
||||
* @var array
|
||||
*/
|
||||
public static $paramsNotRequiringEnvironment = array('install'=>'install', 'upgrade'=>'upgrade', 'version'=>'version');
|
||||
|
||||
/**
|
||||
* Handler to the current Log File.
|
||||
* @var mixed
|
||||
|
@ -93,16 +99,22 @@ class Console
|
|||
$commandName = $config->getArgument(0);
|
||||
|
||||
// Logging
|
||||
$showGrettings = true;
|
||||
if (in_array($commandName, array('install', 'upgrade', 'version'))) {
|
||||
$showGreetings = true;
|
||||
|
||||
if (in_array($commandName, self::$paramsNotRequiringEnvironment)) {
|
||||
self::$logEnabled = false;
|
||||
$showGrettings = false;
|
||||
$showGreetings = false;
|
||||
} else {
|
||||
self::$logEnabled = $config->general('logging', false);
|
||||
if(self::$logEnabled)
|
||||
{
|
||||
self::log("Logging enabled");
|
||||
self::output('<red> Logging enabled: ' . self::getLogFile() . '</red>', 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Grettings
|
||||
if ($showGrettings) {
|
||||
// Greetings
|
||||
if ($showGreetings) {
|
||||
self::output('Starting <blue>Magallanes</blue>', 0, 2);
|
||||
}
|
||||
|
||||
|
@ -128,7 +140,7 @@ class Console
|
|||
}
|
||||
}
|
||||
|
||||
if ($showGrettings) {
|
||||
if ($showGreetings) {
|
||||
self::output('Finished <blue>Magallanes</blue>', 0, 2);
|
||||
if (file_exists(getcwd() . '/.mage/~working.lock')) {
|
||||
unlink(getcwd() . '/.mage/~working.lock');
|
||||
|
|
|
@ -150,7 +150,15 @@ abstract class AbstractTask
|
|||
*/
|
||||
public function getParameter($name, $default = null)
|
||||
{
|
||||
return $this->getConfig()->getParameter($name, $default, $this->parameters);
|
||||
return $this->getConfig()->getParameter($name, $default, $this->getParameters());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function getParameters()
|
||||
{
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,10 +28,11 @@ abstract class BaseStrategyTaskAbstract extends AbstractTask implements IsReleas
|
|||
protected function checkOverrideRelease()
|
||||
{
|
||||
$overrideRelease = $this->getParameter('overrideRelease', false);
|
||||
$symlink = $this->getConfig()->release('symlink', 'current');
|
||||
|
||||
if ($overrideRelease == true) {
|
||||
$releaseToOverride = false;
|
||||
$resultFetch = $this->runCommandRemote('ls -ld current | cut -d"/" -f2', $releaseToOverride);
|
||||
$resultFetch = $this->runCommandRemote('ls -ld '.$symlink.' | cut -d"/" -f2', $releaseToOverride);
|
||||
if ($resultFetch && is_numeric($releaseToOverride)) {
|
||||
$this->getConfig()->setReleaseId($releaseToOverride);
|
||||
}
|
||||
|
|
|
@ -48,22 +48,15 @@ class Factory
|
|||
$taskName = str_replace(' ', '', $taskName);
|
||||
|
||||
if (strpos($taskName, '/') === false) {
|
||||
Autoload::loadUserTask($taskName);
|
||||
$className = 'Task\\' . ucfirst($taskName);
|
||||
$className = $taskName;
|
||||
|
||||
} else {
|
||||
$taskName = str_replace(' ', '\\', ucwords(str_replace('/', ' ', $taskName)));
|
||||
$className = 'Mage\\Task\\BuiltIn\\' . $taskName . 'Task';
|
||||
$className = 'Mage\\Task\\BuiltIn\\' . str_replace(' ', '\\', ucwords(str_replace('/', ' ', $taskName))) . 'Task';
|
||||
}
|
||||
|
||||
$instance = new $className($taskConfig, $inRollback, $stage, $taskParameters);
|
||||
|
||||
if (class_exists($className) || Autoload::isLoadable($className)) {
|
||||
$instance = new $className($taskConfig, $inRollback, $stage, $taskParameters);
|
||||
} else {
|
||||
throw new ErrorWithMessageException('The Task "' . $taskName . '" doesn\'t exists.');
|
||||
}
|
||||
|
||||
if (!($instance instanceOf AbstractTask)) {
|
||||
if (!is_a($instance,'Mage\Task\AbstractTask')) {
|
||||
throw new Exception('The Task ' . $taskName . ' must be an instance of Mage\Task\AbstractTask.');
|
||||
}
|
||||
|
||||
|
|
5
bin/mage
5
bin/mage
|
@ -9,6 +9,8 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Mage\Autoload;
|
||||
|
||||
date_default_timezone_set('UTC');
|
||||
|
||||
$baseDir = dirname(dirname(__FILE__));
|
||||
|
@ -18,7 +20,8 @@ define('MAGALLANES_DIRECTORY', $baseDir);
|
|||
|
||||
// Preload
|
||||
require_once $baseDir . '/Mage/Autoload.php';
|
||||
spl_autoload_register(array('Mage\\Autoload', 'autoload'));
|
||||
$loader = new Autoload();
|
||||
spl_autoload_register(array($loader, 'autoLoad'));
|
||||
|
||||
// Clean arguments
|
||||
array_shift($argv);
|
||||
|
|
Loading…
Reference in a new issue