From: Barış Metin Date: Thu, 1 Jul 2010 15:13:58 +0000 (+0200) Subject: only mirror git repositories that are on both sides X-Git-Tag: foo~88^2~1 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=df77ff047a2a00c044cb1512e0c9964794e1b206;p=infrastructure.git only mirror git repositories that are on both sides --- diff --git a/scripts/git-mirror.sh b/scripts/git-mirror.sh index 1ddcd57..6dfe88f 100755 --- a/scripts/git-mirror.sh +++ b/scripts/git-mirror.sh @@ -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 }