#!/bin/bash if [ $# -eq 1 ]; then if [ "$1" == "--help" ]; then >&2 echo \ 'Usage: gitolite-sync [options] Synchronize the configured git repositories. Options: #HELPTEXT# #' exit elif [ "$1" == "--version" ]; then echo '#VERSION#' exit fi fi if [ $# -ne 0 ]; then >&2 echo 'too many arguments' exit 1 fi . "#ETCDIR#/gitolite-sync.conf" if [ ${#repository_dirs[@]} -eq 0 ]; then >&2 echo 'no repository_dirs defined' exit 1 fi for repository_dir in "${repository_dirs[@]}"; do if [ -z "${repository_dir}" ] || [ ! -d "${repository_dir}" ]; then >&2 printf 'cannot find "%s"\n' \ "${repository_dir}" exit 1 fi done for repository_dir in "${repository_dirs[@]}"; do find "${repository_dir}" \ -type d \ -name '*.git' \ -printf '%p\n' \ -prune \ | while read -r path; do >&2 printf 'synchronizing "%s" ...\n' \ "${path}" remotes=$( git -C "${path}" remote -v \ | grep "${remote_regex}" \ | awk '{print $1}' \ | sort -u ) if [ -z "${remotes}" ]; then >&2 printf 'Repository "%s" has no backup remotes.\n' \ "${path}" continue fi for remote in ${remotes}; do git -C "${path}" fetch "${remote}" 'refs/heads/*:refs/heads/*' 'refs/tags/*:refs/tags/*' git -C "${path}" push "${remote}" 'refs/heads/*:refs/heads/*' 'refs/tags/*:refs/tags/*' done done done