* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Deployer; desc('Update code'); task('deploy:update_code', function () { $repository = trim(get('repository')); $branch = get('branch'); $git = get('bin/git'); $gitCache = get('git_cache'); $depth = $gitCache ? '' : '--depth 1'; // If option `branch` is set. if (input()->hasOption('branch')) { $inputBranch = input()->getOption('branch'); if (!empty($inputBranch)) { $branch = $inputBranch; } } // Branch may come from option or from configuration. $at = ''; if (!empty($branch)) { $at = "-b $branch"; } // If option `tag` is set if (input()->hasOption('tag')) { $tag = input()->getOption('tag'); if (!empty($tag)) { $at = "-b $tag"; } } // If option `tag` is not set and option `revision` is set if (empty($tag) && input()->hasOption('revision')) { $revision = input()->getOption('revision'); if (!empty($revision)) { $depth = ''; } } $releases = get('releases_list'); if ($gitCache && isset($releases[1])) { try { run("$git clone $at --recursive -q --reference {{deploy_path}}/releases/{$releases[1]} --dissociate $repository {{release_path}} 2>&1"); } catch (\RuntimeException $exc) { // If {{deploy_path}}/releases/{$releases[1]} has a failed git clone, is empty, shallow etc, git would throw error and give up. So we're forcing it to act without reference in this situation run("$git clone $at --recursive -q $repository {{release_path}} 2>&1"); } } else { // if we're using git cache this would be identical to above code in catch - full clone. If not, it would create shallow clone. run("$git clone $at $depth --recursive -q $repository {{release_path}} 2>&1"); } if (!empty($revision)) { run("cd {{release_path}} && $git checkout $revision"); } });