diff --git a/Mage/Config.php b/Mage/Config.php
index 546b8e6..83dee6d 100644
--- a/Mage/Config.php
+++ b/Mage/Config.php
@@ -135,6 +135,12 @@ class Mage_Config
return $taskConfig;
}
+ public function setFrom($from)
+ {
+ $options['deployment']['from'] = $from;
+ return $this;
+ }
+
public function deployment($option, $default = false)
{
$options = $this->getEnvironment();
diff --git a/Mage/Console.php b/Mage/Console.php
index b661b56..067c616 100644
--- a/Mage/Console.php
+++ b/Mage/Console.php
@@ -85,8 +85,10 @@ class Mage_Console
self::log('---- Executing: $ ' . $command);
ob_start();
- system($command . ' 2>&1', $return);
- $log = ob_get_clean();
+ $return = 1;
+ $log = array();
+ exec($command . ' 2>&1', $log, $return);
+ $log = implode(PHP_EOL, $log);
if (!$return) {
$output = trim($log);
diff --git a/Mage/Task/BuiltIn/Deployment/Releases.php b/Mage/Task/BuiltIn/Deployment/Releases.php
index 90be299..a39c341 100644
--- a/Mage/Task/BuiltIn/Deployment/Releases.php
+++ b/Mage/Task/BuiltIn/Deployment/Releases.php
@@ -1,6 +1,7 @@
_name;
+ }
+
+ public function init()
+ {
+ $this->_source = $this->_config->deployment('source');
+ switch ($this->_source['type']) {
+ case 'git':
+ $this->_name = 'SCM Clone (GIT) [built-in]';
+ break;
+
+ case 'svn':
+ $this->_name = 'SCM Clone (Subversion) [built-in]';
+ break;
+ }
+ }
+
+ public function run()
+ {
+ $this->_runLocalCommand('mkdir -p ' . $this->_source['temporal']);
+ switch ($this->_source['type']) {
+ case 'git':
+ $command = 'cd ' . $this->_source['temporal']
+ . ' && '
+ . 'git clone ' . $this->_source['repository'] . ' . '
+ . ' && '
+ . 'git checkout ' . $this->_source['from'];
+ $this->_config->setFrom($this->_source['temporal']);
+ break;
+
+ case 'svn':
+ return false;
+ break;
+ }
+
+ $result = $this->_runLocalCommand($command);
+
+ return $result;
+ }
+}
\ No newline at end of file
diff --git a/Mage/Task/BuiltIn/Scm/RemoveClone.php b/Mage/Task/BuiltIn/Scm/RemoveClone.php
new file mode 100644
index 0000000..27cfe37
--- /dev/null
+++ b/Mage/Task/BuiltIn/Scm/RemoveClone.php
@@ -0,0 +1,22 @@
+_name;
+ }
+
+ public function init()
+ {
+ $this->_source = $this->_config->deployment('source');
+ }
+
+ public function run()
+ {
+ return $this->_runLocalCommand('rm -rf ' . $this->_source['temporal']);
+ }
+}
\ No newline at end of file
diff --git a/Mage/Task/Deploy.php b/Mage/Task/Deploy.php
index aa91ed5..74c4363 100644
--- a/Mage/Task/Deploy.php
+++ b/Mage/Task/Deploy.php
@@ -12,7 +12,7 @@ class Mage_Task_Deploy
public function run(Mage_Config $config)
{
$this->_config = $config;
-
+
// Run Pre-Deployment Tasks
$this->_runNonDeploymentTasks('pre-deploy', $config, 'Pre-Deployment');
@@ -72,12 +72,24 @@ class Mage_Task_Deploy
// Run Post-Deployment Tasks
$this->_runNonDeploymentTasks('post-deploy', $config, 'Post-Deployment');
+
}
private function _runNonDeploymentTasks($stage, Mage_Config $config, $title)
{
$tasksToRun = $config->getTasks($stage);
+ // Look for Remote Source
+ if ($this->_config->deployment('from', false) == false) {
+ if (is_array($this->_config->deployment('source', null))) {
+ if ($stage == 'pre-deploy') {
+ array_unshift($tasksToRun, 'scm/clone');
+ } elseif ($stage == 'post-deploy') {
+ array_unshift($tasksToRun, 'scm/remove-clone');
+ }
+ }
+ }
+
if (count($tasksToRun) == 0) {
Mage_Console::output('No ' . $title . ' tasks defined.', 1, 3);
diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php
index 7139dec..7819239 100644
--- a/Mage/Task/Factory.php
+++ b/Mage/Task/Factory.php
@@ -11,7 +11,9 @@ class Mage_Task_Factory
public static function get($taskName, Mage_Config $taskConfig, $inRollback = false)
{
$instance = null;
-
+ $taskName = ucwords(str_replace('-', ' ', $taskName));
+ $taskName = str_replace(' ', '', $taskName);
+
if (strpos($taskName, '/') === false) {
Mage_Autoload::loadUserTask($taskName);
$className = 'Task_' . ucfirst($taskName);
diff --git a/docs/example-config/.mage/config/environment/production.yaml b/docs/example-config/.mage/config/environment/production.yaml
index 4f2b8cb..07d858d 100644
--- a/docs/example-config/.mage/config/environment/production.yaml
+++ b/docs/example-config/.mage/config/environment/production.yaml
@@ -1,7 +1,12 @@
#production
deployment:
user: root
- from: ./
+# from: ./
+ source:
+ type: git
+ repository: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git
+ from: production
+ temporal: /tmp/myAppClone
to: /var/www/vhosts/example.com/www
excludes:
- application/data/cache/twig/*
@@ -12,8 +17,6 @@ releases:
hosts:
- s01.example.com
- s02.example.com
- - s03.example.com
- - s05.example.com
tasks:
pre-deploy:
- scm/update