* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Mage\Task\BuiltIn\Deployment\Strategy; use Mage\Task\Releases\IsReleaseAware; /** * Task for using Git Working Copy as the Deployed Code * * @author Oscar Reales */ class GitRebaseTask extends BaseStrategyTaskAbstract implements IsReleaseAware { /** * (non-PHPdoc) * @see \Mage\Task\AbstractTask::getName() */ public function getName() { return 'Deploy via Git Rebase [built-in]'; } /** * Rebases the Git Working Copy as the Deployed Code * @see \Mage\Task\AbstractTask::run() */ public function run() { $this->checkOverrideRelease(); if ($this->getConfig()->release('enabled', false) == true) { $releasesDirectory = $this->getConfig()->release('directory', 'releases'); $deployToDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory . '/' . $this->getConfig()->getReleaseId(); $this->runCommandRemote('mkdir -p ' . $deployToDirectory); } $branch = $this->getParameter('branch', 'master'); $remote = $this->getParameter('remote', 'origin'); // Fetch Remote $command = $this->getReleasesAwareCommand('git fetch ' . $remote); $result = $this->runCommandRemote($command); if ($result === false) { $repository = $this->getConfig()->deployment('repository'); if ($repository) { $command = $this->getReleasesAwareCommand('git clone ' . $repository . ' .'); $result = $this->runCommandRemote($command); $command = $this->getReleasesAwareCommand('git fetch ' . $remote); $result = $this->runCommandRemote($command); } } // Checkout $command = $this->getReleasesAwareCommand('git checkout ' . $branch); $result = $this->runCommandRemote($command) && $result; // Check Working Copy status $stashed = false; $status = ''; $command = $this->getReleasesAwareCommand('git checkout ' . $branch); $result = $this->runCommandRemote($command) && $result; // Stash if Working Copy is not clean if (!$status) { $stashResult = ''; $command = $this->getReleasesAwareCommand('git stash'); $result = $this->runCommandRemote($command, $stashResult) && $result; if ($stashResult != "No local changes to save") { $stashed = true; } } // Rebase $command = $this->getReleasesAwareCommand('git rebase ' . $remote . '/' . $branch); $result = $this->runCommandRemote($command) && $result; // If Stashed, restore. if ($stashed) { $command = $this->getReleasesAwareCommand('git stash pop'); $result = $this->runCommandRemote($command) && $result; } return $result; } }