diff -r a2342f26c9de -r b0b56e0f8c7f dev/provisioning/modules/puppi/files/scripts/git.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/provisioning/modules/puppi/files/scripts/git.sh Fri Jan 15 15:35:00 2016 +0100 @@ -0,0 +1,176 @@ +#!/bin/bash +# git.sh - Made for Puppi + +# All variables are exported +set -a + +# Sources common header for Puppi scripts +. $(dirname $0)/header || exit 10 + +# Show help +showhelp () { + echo "This script performs the git operations required by puppi::project::git" + echo "It integrates and uses variables provided by other core Puppi scripts" + echo "It has the following options:" + echo "-a (Optional) What action to perform. Available options: deploy (default), rollback" + echo "-s (Required) Git source repo to use" + echo "-d (Required) Directory where files are deployed" + echo "-u (Optional) User that performs the deploy operations. Default root" + echo "-gs (Optional) If only a specific subdir of the gitrepo has to be copied to the install destination" + echo "-t (Optional) Tag to deploy" + echo "-b (Optional) Branch to deploy" + echo "-c (Optional) Commit to deploy" + echo "-v (Optional) If verbose" + echo "-k (Optional) If .git dir is kept on deploy_root" + echo + echo "Examples:" + echo "git.sh -a deploy -s $source -d $deploy_root -u $user -gs $git_subdir -t $tag -b $branch -c $commit -v $bool_verbose -k $bool_keep_gitdata" +} + +verbose="true" + +# Check Arguments +while [ $# -gt 0 ]; do + case "$1" in + -a) + case $2 in + rollback) + action="rollback" + ;; + *) + action="install" + ;; + esac + shift 2 ;; + -s) + if [ $source ] ; then + source=$source + else + source=$2 + fi + shift 2 ;; + -d) + if [ $deploy_root ] ; then + deploy_root=$deploy_root + else + deploy_root=$2 + fi + shift 2 ;; + -u) + if [ $user ] ; then + deploy_user=$user + else + deploy_user=$2 + fi + shift 2 ;; + -gs) + if [ $git_subdir ] ; then + git_subdir=$git_subdir + else + git_subdir=$2 + fi + shift 2 ;; + -t) + if [ $git_tag ] ; then + git_tag=$git_tag + else + git_tag=$2 + fi + shift 2 ;; + -b) + if [ $branch ] ; then + branch=$branch + else + branch=$2 + fi + shift 2 ;; + -c) + if [ $commit ] ; then + commit=$commit + else + commit=$2 + fi + shift 2 ;; + -v) + if [ $verbose ] ; then + verbose=$verbose + else + verbose=$2 + fi + shift 2 ;; + -k) + if [ $keep_gitdata ] ; then + keep_gitdata=$keep_gitdata + else + keep_gitdata=$2 + fi + shift 2 ;; + *) + showhelp + exit ;; + esac +done + +if [ "x$verbose" == "xtrue" ] ; then + verbosity="" +else + verbosity="--quiet" +fi + +cd / + +gitsubdir="" +gitdir=$deploy_root +if [ "x$keep_gitdata" != "xtrue" ] ; then + if [ ! -d $archivedir/$project-git ] ; then + mkdir $archivedir/$project-git + chown -R $deploy_user:$deploy_user $archivedir/$project-git + fi + gitdir=$archivedir/$project-git/gitrepo +fi +if [ "x$git_subdir" != "xundefined" ] ; then + if [ ! -d $archivedir/$project-git ] ; then + mkdir $archivedir/$project-git + chown -R $deploy_user:$deploy_user $archivedir/$project-git + fi + gitdir=$archivedir/$project-git + gitsubdir="$git_subdir/" +fi + +do_install () { + if [ -d $gitdir/.git ] ; then + cd $gitdir + git pull $verbosity origin $branch + git checkout $verbosity $branch + if [ "x$?" != "x0" ] ; then + git checkout -b $verbosity $branch + fi + else + git clone $verbosity --branch $branch --recursive $source $gitdir + cd $gitdir + fi + + if [ "x$git_tag" != "xundefined" ] ; then + git checkout $verbosity $git_tag + fi + + if [ "x$commit" != "xundefined" ] ; then + git checkout $verbosity $commit + fi + + if [ "x$gitdir" == "x$archivedir/$project-git/gitrepo" ] ; then + rsync -a --exclude=".git" $gitdir/$gitsubdir $deploy_root/ + fi + +} + +do_rollback () { + + echo "Rollback not yet supported" +} + +# Action! +case "$action" in + install) export -f do_install ; su $deploy_user -c do_install ;; + rollback) do_rollback ;; +esac