+ # 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
+ if [ -d ${REPO_DIR} ]; then
+ msg "pulling from ${NAME}"
+ run "git fetch origin --tags" ${REPO_DIR}
+ run "git fetch origin" ${REPO_DIR}
+ merge_all_branches $NAME origin $REPO_DIR
+ if [ $? -ne 0 ]; then
+ error "git-mirror.sh failed" "Can not fetch from ${MASTER_REPO}" $REPO_DIR
+ 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
+
+ msg "pushing ${NAME} to local master"
+ run "git fetch local_master --tags" ${REPO_DIR}
+ run "git fetch local_master" ${REPO_DIR}
+ merge_all_branches $NAME local_master $REPO_DIR
+ if [ $FAILED -ne 0 ]; then
+ pushd ${REPO_DIR} > /dev/null
+ STATUS_OUT=$(git status)
+ popd > /dev/null
+ error "git-mirror.sh failed on ${MIRROR_REPO}" "STATUS:\n$STATUS_OUT \n\n------------\n FAILED COMMANDS:\n$FAILED_CMDS" $REPO_DIR
+ else
+ run "git push --tags local_master" ${REPO_DIR}
+ push_all_branches $NAME local_master $REPO_DIR
+
+ # success, remove previous check file if any
+ CHECK_FILE=$REPO_DIR/$NOTIFIED_FILE
+ rm -f $CHECK_FILE
+ fi
+ fi