COMMAND=$(basename $0)
# for sending emails (-a option)
-ADMINS="Thierry.Parmentelat@inria.fr baris@metin.org"
+ADMINS="Thierry.Parmentelat@inria.fr"
# the other end of the mirror (-r option)
REMOTE_GIT="git://git.planet-lab.org"
# options
pushd $REPO_DIR > /dev/null
BRANCHES=$(git branch -r | grep $REMOTE | grep -v HEAD | sed "s/.*\///g" | grep -v master)
+ HAS_MASTER=$(git branch -l | grep master)
popd > /dev/null
- run ${REPO_DIR} git checkout master
- run ${REPO_DIR} git merge --ff $REMOTE/master
+ [ -n "$HAS_MASTER" ] && run ${REPO_DIR} git checkout master
+ [ -n "$HAS_MASTER" ] && run ${REPO_DIR} git merge --ff $REMOTE/master
for BRANCH in $BRANCHES ; do
run -i ${REPO_DIR} git branch $BRANCH $REMOTE/$BRANCH
run ${REPO_DIR} git checkout $BRANCH
pushd $REPO_DIR > /dev/null
BRANCHES=$(git branch -r | grep $PUSH_FROM | grep -v HEAD | sed "s/.*\///g" | grep -v master)
+ HAS_MASTER=$(git branch -l | grep master)
popd > /dev/null
- run ${REPO_DIR} git push $PUSH_TO master:master
+ [ -n "$HAS_MASTER" ] && run ${REPO_DIR} git push $PUSH_TO master:master
for BRANCH in $BRANCHES ; do
run ${REPO_DIR} git push $PUSH_TO $BRANCH:$BRANCH
done
REMOTE_REPO=${REMOTE_GIT}/${GIT_NAME}
MASTER_REPO=${MASTER_GIT}/${GIT_NAME}
+ # if the local master is a symlink (like /git/vserver-reference.git -> sliceref.git)
+ # then skip it
+ # we use this for either aliases (like vserver-reference and sliceimage) or
+ # for repos managed in other locations (like /git-slave) but where
+ # the symlink is needed so they get served by git-daemon
+ [ -h ${MASTER_REPO} ] && return
+
# 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 $REMOTE_REPO &> /dev/null || return
fi
# success, remove previous check file if any
clear_notify $REPO_DIR
+ # touch a stamp so it's easier to figure out where/if things get stuck
+ touch ${REPO_DIR}/MIRRORED.stamp
}
function usage () {
exit 1
}
-while getopts "a:r:qvfh" opt; do
+while getopts "a:r:s:qvfh" opt; do
case $opt in
a) ADMINS=$OPTARG ;;
r) REMOTE_GIT=$OPTARG ;;