From b28b0bd5f13135d64dca024f629100b3e30d47b2 Mon Sep 17 00:00:00 2001 From: rhatto Date: Tue, 24 Jul 2007 02:01:18 +0000 Subject: fixed a bug on 0.5 and tagged as 0.5.1 git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@407 04377dda-e619-0410-9926-eae83683ac58 --- tags/0.5.1/src/jail-commit | 175 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100755 tags/0.5.1/src/jail-commit (limited to 'tags/0.5.1/src/jail-commit') diff --git a/tags/0.5.1/src/jail-commit b/tags/0.5.1/src/jail-commit new file mode 100755 index 0000000..f40e5cd --- /dev/null +++ b/tags/0.5.1/src/jail-commit @@ -0,0 +1,175 @@ +#!/bin/bash +# +# jail-commit: update config files from a jail to a template +# feedback: rhatto@riseup.net | gpl +# +# Jail-commit is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or any later version. +# +# Jail-commit is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA +# + +COMMON="/usr/libexec/simplepkg/common.sh" +BASENAME="`basename $0`" + +if [ -f "$COMMON" ]; then + source $COMMON + eval_config $BASENAME +else + echo "error: file $COMMON found, check your $BASENAME installation" + exit 1 +fi + +function usage { + + echo $BASENAME: commit a jail configuration into a template + echo "usage: \"$BASENAME [ [template]]\"" + echo " \"$BASENAME --all\" to commit all templates" + echo " \"$BASENAME --help\" for help" + +} + +function template_merge { + + # copy differences between the jail + # and the template in the template folder + + # usage: template_merge + + if [ -z "$1" ] || [ ! -d "$TEMPLATE_BASE.d" ]; then + return 1 + fi + + echo "" > $TEMPLATE_BASE.perms.tmp + cd $TEMPLATE_BASE.d + + for file in `find | grep -v -e "/.svn$" | grep -v -e "/.svn/" | grep -v -e "^\.$"`; do + + if [[ -e "$file" && -e "$1/$file" ]]; then + + if [ ! -d "$file" ] && [ ! -h "$file" ]; then + if ! diff $file $1/$file; then + echo Updating $file + cp -af $1/$file $file + fi + elif [ -h "$file" ]; then + if [ "`readlink $file`" != "`readlink $1/$file`" ]; then + rm -f $file + ln -s `readlink $1/$file` $file + fi + fi + + perms="`numeric_perm $1/$file`" + owner="`get_owner $1/$file`" + group="`get_group $1/$file`" + + # secure the file + chown root.root $TEMPLATE_BASE.d/$file + chmod $perms $TEMPLATE_BASE.d/$file + + echo "$file;$owner;$group;$perms" >> $TEMPLATE_BASE.perms.tmp + + else + if [ ! -e "$1/$file" ]; then + echo $BASENAME: warning: missing file `slash $1/$file` + fi + fi + + done + + cat $TEMPLATE_BASE.perms.tmp | sed '/^$/d' > $TEMPLATE_BASE.perms + rm -f $TEMPLATE_BASE.perms.tmp + + if ! svn_check $TEMPLATE_BASE,perms; then + svn add $TEMPLATE_BASE,perms + fi + +} + +function template_svn_commit { + + # issue a svn_commit from a template folder + # usage: template_svn_commit + + if use_svn && [ -d "$1/.svn" ]; then + cd $1 + echo First checking out from the repository... + svn update + echo Commiting changes to the repository... + svn commit -m "changes for `date`" + if [ "$?" != "0" ]; then + echo $BASENAME: commit error + fi + fi + +} + +function do_commit { + + # commit jail changes to a repository + # usage: do_commit [template] + + local jailpath template + + jailpath="$1" + jail="`basename $jailpath`" + + if [ ! -z "$2" ]; then + template="$2" + else + template="$jail" + fi + + search_template $template --update + if [ "$?" == "0" ] && ! echo "$TEMPLATE_UPDATE_LIST" | grep -q " `basename $TEMPLATE_BASE` "; then + TEMPLATE_UPDATE_LIST=" $TEMPLATE_UPDATE_LIST `basename $TEMPLATE_BASE` " # the spaces are important + if [ "$jailpath" == "/" ]; then + echo Updating main installation... + else + echo Updating $jailpath... + fi + if [ -d "$TEMPLATE_BASE.d" ] || [ -a "$TEMPLATE_BASE.template" ]; then + SILENT=yes templatepkg -u $template $jailpath + template_merge $jailpath + fi + else + if [ -z "$SILENT" ]; then + echo $BASENAME: template $template not found + fi + return 1 + fi + +} + +TEMPLATE_UPDATE_LIST="" + +if [ "$1" == "--help" ]; then + usage +elif [ "$1" == "--all" ]; then + template_svn_commit $BASE_CONF/templates +elif echo $1 | grep -q -e "^--"; then + usage +elif [ ! -z "$1" ]; then + do_commit $1 $2 + if [ "$?" == "0" ]; then + template_svn_commit `dirname $TEMPLATE_BASE` + fi +else + SILENT="yes" + if [ -e $JAIL_LIST ]; then + for jailpath in `cat $JAIL_LIST`; do + do_commit $jailpath + done + fi + # main jail + do_commit / main + template_svn_commit $BASE_CONF/templates +fi + -- cgit v1.2.3