* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ abstract class Mage_Task_TaskAbstract { protected $_config = null; protected $_inRollback = false; protected $_stage = null; protected $_parameters = array(); public abstract function getName(); public abstract function run(); public final function __construct(Mage_Config $config, $inRollback = false, $stage = null, $parameters = array()) { $this->_config = $config; $this->_inRollback = $inRollback; $this->_stage = $stage; $this->_parameters = $parameters; } public function inRollback() { return $this->_inRollback; } public function getStage() { return $this->_stage; } public function getConfig() { return $this->_config; } public function init() { } /** * Return the a parameter * * @param string $name * @return mixed */ public function getParameter($name, $default = null) { return $this->getConfig()->getParameter($name, $default, $this->_parameters); } protected final function runCommand($command, &$output = null) { if ($this->getStage() == 'deploy') { return $this->_runRemoteCommand($command, $output); } else { return $this->_runLocalCommand($command, $output); } } protected final function _runLocalCommand($command, &$output = null) { return Mage_Console::executeCommand($command, $output); } protected final function _runRemoteCommand($command, &$output = null) { if ($this->_config->release('enabled', false) == true) { if ($this instanceOf Mage_Task_Releases_BuiltIn) { $releasesDirectory = ''; } else { $releasesDirectory = '/' . $this->_config->release('directory', 'releases') . '/' . $this->_config->getReleaseId(); } } else { $releasesDirectory = ''; } $localCommand = 'ssh -p ' . $this->_config->getHostPort() . ' ' . '-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' . $this->_config->deployment('user') . '@' . $this->_config->getHostName() . ' ' . '"cd ' . rtrim($this->_config->deployment('to'), '/') . $releasesDirectory . ' && ' . str_replace('"', '\"', $command) . '"'; return $this->_runLocalCommand($localCommand, $output); } }