From: Barış Metin Date: Thu, 14 Oct 2010 11:18:18 +0000 (+0200) Subject: dont rely on cron and try sending mails directly from the cron script X-Git-Tag: foo~74 X-Git-Url: http://git.onelab.eu/?p=infrastructure.git;a=commitdiff_plain;h=93d5e58b2bb812fd1d24e274898f1a1453ebdb46 dont rely on cron and try sending mails directly from the cron script --- diff --git a/scripts/git-mirror.sh b/scripts/git-mirror.sh index fbb7849..42ab22c 100755 --- a/scripts/git-mirror.sh +++ b/scripts/git-mirror.sh @@ -1,9 +1,11 @@ #!/bin/bash +ADMINS="Talip-Baris.Metin@inria.fr" MIRROR_GIT="git://git.planet-lab.org" MASTER_GIT="/git" LOCAL_MIRROR_DIR="/git-mirror" QUIET=0 +FAILED=0 function msg () { if [ $QUIET -eq 0 ] @@ -13,7 +15,10 @@ function msg () { } function error () { - echo "[ERROR] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $@" + for admin in $ADMINS + do + echo "[ERROR] xxxxxxxxxxx $@" | mail -s "$@" $admin + done } function run () { @@ -28,9 +33,19 @@ function run () { pushd ${REPO} > /dev/null eval $COMMAND + if [ $? -ne 0 ] + then + FAILED=1 + fi popd > /dev/null } +function run_ignore_errors () { + OLD_FAILED=$FAILED + run "$1" "$2" + FAILED=$OLD_FAILED +} + function merge_all_branches () { NAME=$1 REMOTE=$2 @@ -43,7 +58,7 @@ function merge_all_branches () { run "git checkout master" ${REPO_DIR} run "git merge --ff $REMOTE/master" ${REPO_DIR} for BRANCH in $BRANCHES ; do - run "git branch $BRANCH $REMOTE/$BRANCH" ${REPO_DIR} + run_ignore_errors "git branch $BRANCH $REMOTE/$BRANCH" ${REPO_DIR} run "git checkout $BRANCH" ${REPO_DIR} run "git merge --ff $REMOTE/$BRANCH" ${REPO_DIR} done @@ -66,12 +81,15 @@ function push_all_branches () { function mirror () { for arg in "$@" ; do + FAILED=0 # reset previous failure if any + NAME=$(basename ${arg} | sed s/.git$//g) GIT_NAME=${NAME}.git REPO_DIR=${LOCAL_MIRROR_DIR}/${NAME} MIRROR_REPO=${MIRROR_GIT}/${GIT_NAME} MASTER_REPO=${MASTER_GIT}/${GIT_NAME} + # if there is no remote repository it may be that we only have # the repository locally and don't need to mirror git ls-remote $MIRROR_REPO &> /dev/null @@ -97,9 +115,9 @@ function mirror () { run "git fetch local_master --tags" ${REPO_DIR} run "git fetch local_master" ${REPO_DIR} merge_all_branches $NAME local_master $REPO_DIR - if [ $? -ne 0 ] + if [ $FAILED -ne 0 ] then - error "Can not fetch from ${MIRROR_REPO}" + error "git-mirror.sh failed on ${MIRROR_REPO}" else run "git push --tags local_master" ${REPO_DIR} push_all_branches $NAME local_master $REPO_DIR