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
}