diff --git a/libraries/repositories b/libraries/repositories index 65c913c..76d9f28 100644 --- a/libraries/repositories +++ b/libraries/repositories @@ -3,6 +3,40 @@ # Distributed under the terms of the GNU General Public License v3 +#------------------------------------------------------------------------------- +# Creates a local mirror of specified GIT repository +# Parameters: %dest_directory% %address% [%username%] +#------------------------------------------------------------------------------- +function mirrorGit() { + local DIRECTORY="${1}" + local ADDRESS="${2}" + local USER="${3:-root}" + if [ -d ${DIRECTORY} ]; then + cd ${DIRECTORY} + run "su ${USER} -s \"/bin/sh\" -c \"git fetch -all\"" || return 1 + else + run "su ${USER} -s \"/bin/sh\" -c \"git clone --mirror --bare \ + ${ADDRESS} ${DIRECTORY}\"" || return 1 + fi + return 0 +} + +#------------------------------------------------------------------------------- +# Creates a local mirror of specified repository regardless its protocol +# Parameters: %dest_directory% %protocol% %address% [%username%] +#------------------------------------------------------------------------------- +function mirrorRepository() { + case "${2}" in + [Gg][Ii][Tt]) + mirrorGit "${1}" "${3}" "${4}" && return 0 + ;; + *) + printWarn "Tried to mirror data using unsupported protocol (${2})!" + ;; + esac + return 1 +} + #------------------------------------------------------------------------------- # Prepares SSH Wrappers for use with unknown hosts (requires key authentication) #-------------------------------------------------------------------------------