only mirror git repositories that are on both sides
authorBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Thu, 1 Jul 2010 15:13:58 +0000 (17:13 +0200)
committerBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Thu, 1 Jul 2010 15:13:58 +0000 (17:13 +0200)
scripts/git-mirror.sh

index 1ddcd57..6dfe88f 100755 (executable)
@@ -39,32 +39,38 @@ function mirror () {
         MIRROR_REPO=${MIRROR_GIT}/${GIT_NAME}
         MASTER_REPO=${MASTER_GIT}/${GIT_NAME}
 
-        if [ -d ${REPO_DIR} ]
+        # 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
+        if [ $? -eq 0 ]
         then
-           msg "pulling from ${REPO_NAME}"
-            run "git fetch origin --tags" ${REPO_DIR}
-           run "git fetch origin" ${REPO_DIR}
-            run "git merge --ff origin/master" ${REPO_DIR}
-            if [ $? -ne 0 ]
+            if [ -d ${REPO_DIR} ]
             then
-                error "Can not fetch from ${MASTER_REPO}"
+               msg "pulling from ${NAME}"
+                run "git fetch origin --tags" ${REPO_DIR}
+               run "git fetch origin" ${REPO_DIR}
+                run "git merge --ff origin/master" ${REPO_DIR}
+                if [ $? -ne 0 ]
+                then
+                    error "Can not fetch from ${MASTER_REPO}"
+                fi
+            else
+                msg "mirroring ${NAME} for the first time"
+                run "git clone ${MIRROR_REPO}" ${LOCAL_MIRROR_DIR}
+                run "git remote add local_master ${MASTER_REPO}" ${REPO_DIR}
             fi
-        else
-            msg "mirroring in ${REPO_NAME} for the first time"
-            run "git clone ${MIRROR_REPO}" ${LOCAL_MIRROR_DIR}
-            run "git remote add local_master ${MASTER_REPO}" ${REPO_DIR}
-        fi
 
-        msg "pushing ${REPO_NAME} to local master"
-        run "git fetch local_master --tags" ${REPO_DIR}
-        run "git fetch local_master" ${REPO_DIR}
-        run "git merge --ff local_master/master" ${REPO_DIR}
-        if [ $? -ne 0 ]
-        then
-            error "Can not fetch from ${MIRROR_REPO}"
-        else
-            run "git push local_master" ${REPO_DIR}
-            run "git push --tags local_master" ${REPO_DIR}
+            msg "pushing ${NAME} to local master"
+            run "git fetch local_master --tags" ${REPO_DIR}
+            run "git fetch local_master" ${REPO_DIR}
+            run "git merge --ff local_master/master" ${REPO_DIR}
+            if [ $? -ne 0 ]
+            then
+                error "Can not fetch from ${MIRROR_REPO}"
+            else
+                run "git push local_master" ${REPO_DIR}
+                run "git push --tags local_master" ${REPO_DIR}
+            fi
         fi
     done
 }