#!/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 ]
}
function error () {
- echo "[ERROR] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $@"
+ for admin in $ADMINS
+ do
+ echo "[ERROR] xxxxxxxxxxx $@" | mail -s "$@" $admin
+ done
}
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
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
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
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