wrong name
[infrastructure.git] / scripts / git-mirror.sh
index 3ff06f5..8761ac1 100755 (executable)
@@ -2,7 +2,7 @@
 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
@@ -105,10 +105,11 @@ function merge_all_branches () {
 
     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
@@ -124,9 +125,10 @@ function push_all_branches () {
 
     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
@@ -142,6 +144,10 @@ function mirror_repo () {
     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, the target itself will be handled if in scope
+    [ -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
@@ -189,6 +195,8 @@ function mirror_repo () {
     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 () {