From 308a67359ce675636b88090a78cdbeb8fae19723 Mon Sep 17 00:00:00 2001 From: samuel4x4 Date: Wed, 29 Oct 2014 04:59:58 +0200 Subject: [PATCH] Add task for force updating a working copy Downloads the latest from remote without trying to merge or rebase anything. Resets the master branch to what you just fetched. Changes all the files in your working tree to match the files in origin/master, so if you have any local changes, they will be lost. --- Mage/Task/BuiltIn/Scm/ForceUpdateTask.php | 87 +++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Mage/Task/BuiltIn/Scm/ForceUpdateTask.php diff --git a/Mage/Task/BuiltIn/Scm/ForceUpdateTask.php b/Mage/Task/BuiltIn/Scm/ForceUpdateTask.php new file mode 100644 index 0000000..9d68e09 --- /dev/null +++ b/Mage/Task/BuiltIn/Scm/ForceUpdateTask.php @@ -0,0 +1,87 @@ + +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +namespace Mage\Task\BuiltIn\Scm; + +use Mage\Task\AbstractTask; +use Mage\Task\SkipException; + +/** + * Task for Force Updating a Working Copy + * + * 'git fetch' downloads the latest from remote without trying to merge or rebase anything. + * 'git reset' resets the master branch to what you just fetched. + * The '--hard' option changes all the files in your working tree to match the files in origin/master, + * so if you have any local changes, they will be lost. + * + * @author Samuel Chiriluta + */ +class ForceUpdateTask extends AbstractTask +{ + /** + * Name of the Task + * @var string + */ + private $name = 'SCM Force Update [built-in]'; + + /** + * (non-PHPdoc) + * @see \Mage\Task\AbstractTask::getName() + */ + public function getName() + { + return $this->name; + } + + /** + * (non-PHPdoc) + * @see \Mage\Task\AbstractTask::init() + */ + public function init() + { + switch ($this->getConfig()->general('scm')) { + case 'git': + $this->name = 'SCM Force Update (GIT) [built-in]'; + break; + } + } + + /** + * Force Updates the Working Copy + * @see \Mage\Task\AbstractTask::run() + */ + public function run() + { + switch ($this->getConfig()->general('scm')) { + case 'git': + $branch = $this->getParameter('branch', 'master'); + $remote = $this->getParameter('remote', 'origin'); + + $command = 'git fetch ' . $remote . ' ' . $branch; + $result = $this->runCommandRemote($command); + + $command = 'git reset --hard ' . $remote . '/' . $branch; + $result = $result && $this->runCommandRemote($command); + + $command = 'git pull ' . $remote . ' ' . $branch; + $result = $result && $this->runCommandRemote($command); + break; + + default: + throw new SkipException; + break; + } + + $result = $this->runCommandLocal($command); + $this->getConfig()->reload(); + + return $result; + } +}