#!/bin/bash # Copyright 2010-2012, Asio Software Technologies # Distributed under the terms of the GNU General Public License v3 #------------------------------------------------------------------------------- # Downloads or updates specified GIT repository # Parameters: %dest_directory% %address% [%branch%] #------------------------------------------------------------------------------- function checkoutGit() { local DIRECTORY="${1}" local ADDRESS="${2}" local BRANCH="${3:-master}" if [ -d ${DIRECTORY} ]; then cd ${DIRECTORY} run "git reset --hard origin/${BRANCH}" || return 1 run "git clean --force" || return 1 run "git pull --no-stat" || return 1 else run "git clone ${ADDRESS} ${DIRECTORY}" || return 1 if [ ${BRANCH} != "master" ]; then cd ${DIRECTORY} run "git checkout ${BRANCH}" || return 1 fi fi return 0 } #------------------------------------------------------------------------------- # Downloads or updates specified RSYNC repository # Parameters: %dest_directory% %address% #------------------------------------------------------------------------------- function checkoutRsync() { DIRECTORY="${1}" ADDRESS="${2}" run "rsync --compress --delete --delete-after --devices --force --links \ --partial --perms --recursive --safe-links --stats --times \ --timeout=${FETCHTIMEOUT} --whole-file --exclude=/.git --exclude=CVS \ --exclude=/distfiles --exclude=/local --exclude=/metadata/cache \ --exclude=/packages ${ADDRESS} ${DIRECTORY}" || return 1 return 0 } #------------------------------------------------------------------------------- # Downloads or updates specified SVN repository # Parameters: %dest_directory% %address% #------------------------------------------------------------------------------- function checkoutSubversion() { local DIRECTORY="${1}" local ADDRESS="${2}" if [ -d ${DIRECTORY} ]; then cd ${DIRECTORY} run "svn cleanup" || return 1 run "svn update" || return 1 else run "svn checkout ${ADDRESS} ${DIRECTORY}" || return 1 fi return 0 } #------------------------------------------------------------------------------- # Creates SSH Wrapper for use with unknown hosts (requires key authentication) #------------------------------------------------------------------------------- function makeSshWrapper() { echo "#!/bin/bash" > ${BINDIR}/ssh_wrapper.sh echo "exec ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ \"\$@\"" >> ${BINDIR}/ssh_wrapper.sh chmod +x ${BINDIR}/ssh_wrapper.sh || return 1 export GIT_SSH="${BINDIR}/ssh_wrapper.sh" export SVN_SSH="${BINDIR}/ssh_wrapper.sh" return 0 } #------------------------------------------------------------------------------- # Synchronizes specified repository regardless its protocol # Parameters: %dest_directory% %protocol% %address% [%branch%] #------------------------------------------------------------------------------- function synchronizeRepository() { for ((i=0; $i<${FETCHTRIES}; i++)); do case "${2}" in [Gg][Ii][Tt]) checkoutGit $1 $3 $4 && return 0 ;; [Rr][Ss][Yy][Nn][Cc]) checkoutRsync $1 $3 && return 0 ;; [Ss][Vv][Nn]) checkoutSubversion $1 $3 && return 0 ;; esac sleep ${FETCHTIMEOUT} done return 1 }