diff --git a/Mage/Command/BuiltIn/DeployCommand.php b/Mage/Command/BuiltIn/DeployCommand.php
index 7ee5235..e4e2a78 100644
--- a/Mage/Command/BuiltIn/DeployCommand.php
+++ b/Mage/Command/BuiltIn/DeployCommand.php
@@ -59,6 +59,15 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
*/
const IN_PROGRESS = 'in_progress';
+ /**
+ * Stage where possible throw Rollback Exception
+ * @var array
+ */
+ public $acceptedStagesToRollback = array(
+ AbstractTask::STAGE_POST_RELEASE,
+ AbstractTask::STAGE_POST_DEPLOY
+ );
+
/**
* Time the Deployment has Started
* @var integer
@@ -430,11 +439,19 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
}
}
- protected function runRollbackTask(){
+ protected function runRollbackTask(AbstractTask $task){
$this->getConfig()->reload();
$hosts = $this->getConfig()->getHosts();
- if (count($hosts) == 0) {
+ Console::output("",1,2);
+ Console::output("Starting the rollback",1,1);
+
+ if(!in_array($task->getStage(), $this->acceptedStagesToRollback ) ) {
+ $stagesString = implode(', ',$this->acceptedStagesToRollback);
+ Console::output("Warning! Rollback during deployment can be called only at the stages: $stagesString ",1);
+ Console::output("Rollback: ABORTING",1,3);
+
+ } elseif (count($hosts) == 0) {
Console::output('Warning! No hosts defined, unable to get releases.', 1, 3);
} else {
@@ -451,7 +468,14 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
$this->getConfig()->setHostConfig($hostConfig);
$this->getConfig()->setReleaseId(-1);
- $task = Factory::get('releases/rollback', $this->getConfig());
+ $task = Factory::get(array(
+ 'name'=>'releases/rollback',
+ 'parameters' => array('inDeploy'=>true)
+ ),
+ $this->getConfig(),
+ false,
+ $task->getStage()
+ );
$task->init();
$result = $task->run() && $result;
@@ -495,8 +519,8 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
$result = false;
}
} catch (RollbackException $e) {
- Console::output('FAIL, Rollback started [Message: ' . $e->getMessage() . ']', 0);
- $this->runRollbackTask();
+ Console::output('FAIL, Rollback catched [Message: ' . $e->getMessage() . ']', 0);
+ $this->runRollbackTask($task);
$result = false;
} catch (ErrorWithMessageException $e) {