diff -r a2342f26c9de -r b0b56e0f8c7f dev/provisioning/modules/puppi/files/scripts/svn.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/provisioning/modules/puppi/files/scripts/svn.sh Fri Jan 15 15:35:00 2016 +0100 @@ -0,0 +1,215 @@ +#!/bin/bash +# svn.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 svn operations required by puppi::project::svn" + 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) Subversion source repo to use" + echo "-d (Required) Directory where files are deployed" + echo "-u (Optional) User that performs the deploy operations. Default root" + echo "-su (Optional) Username for access to private svn repo" + echo "-sp (Optional) Password for access to private svn repo" + echo "-gs (Optional) If only a specific subdir of the svnrepo 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 .svn dir is kept on deploy_root" + echo "-e (Optional) If use export instead of checkout for svn operations" + echo + echo "Examples:" + echo "svn.sh -a deploy -s $source -d $deploy_root -u $user -gs $svn_subdir -t $tag -b $branch -c $commit -v $bool_verbose -k $bool_keep_svndata" +} + +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 [ $svn_subdir ] ; then + svn_subdir=$svn_subdir + else + svn_subdir=$2 + fi + shift 2 ;; + -su) + if [ $svn_user ] ; then + svn_user=$svn_user + else + svn_user=$2 + fi + shift 2 ;; + -sp) + if [ $svn_password ] ; then + svn_password=$svn_password + else + svn_password=$2 + fi + shift 2 ;; + -t) + if [ $svn_tag ] ; then + svn_tag=$svn_tag + else + svn_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_svndata ] ; then + keep_svndata=$keep_svndata + else + keep_svndata=$2 + fi + shift 2 ;; + -e) + if [ $svn_export ] ; then + svn_export=$svn_export + else + svn_export=$2 + fi + shift 2 ;; + *) + showhelp + exit ;; + esac +done + +if [ "x$verbose" == "xtrue" ] ; then + verbosity="" +else + verbosity="--quiet" +fi + +cd / + +if [ "x$branch" == "xundefined" ] ; then + branch="trunk" +fi + +real_source="$source/$branch" + +if [ "x$svn_tag" != "xundefined" ] ; then + real_source="$source/$svn_tag" +fi + +if [ "x$svn_user" != "xundefined" ] && [ "x$svn_password" != "xundefined" ] ; then + svn_auth="--username=$svn_user --password=$svn_password" +else + svn_auth="" +fi + +svnsubdir="" +svndir=$deploy_root + + +do_install () { + if [ "x$keep_svndata" != "xtrue" ] ; then + if [ ! -d $archivedir/$project-svn ] ; then + mkdir $archivedir/$project-svn + chown -R $user:$user $archivedir/$project-svn + fi + svndir=$archivedir/$project-svn/svnrepo + fi + if [ "x$svn_subdir" != "xundefined" ] ; then + if [ ! -d $archivedir/$project-svn ] ; then + mkdir $archivedir/$project-svn + chown -R $user:$user $archivedir/$project-svn + fi + svndir=$archivedir/$project-svn + svnsubdir="$svn_subdir/" + fi + + if [ -d $svndir/.svn ] ; then + cd $svndir + svn up $verbosity $svn_auth --non-interactive + else + svn co $verbosity $real_source $svndir $svn_auth --non-interactive + cd $svndir + fi + + if [ "x$svndir" == "x$archivedir/$project-svn/svnrepo" ] ; then + rsync -a --exclude=".svn" $svndir/$svnsubdir $deploy_root/ + fi +} + +do_export () { + svn export $verbosity $svn_auth --force --non-interactive $real_source/$svn_subdir $deploy_root +} + +do_rollback () { + echo "Rollback not yet supported" +} + +# Action! +case "$action" in + install) + if [ "x$svn_export" == "xtrue" ] ; then + export -f do_export ; su $user -c do_export + else + export -f do_install ; su $user -c do_install + fi + ;; + rollback) do_rollback ;; +esac +