#!/usr/bin/env sh # Mirror some Git repos usage() { echo 'Usage: git-mirror [command] [arguments] git-mirror run [path to repos] [path to log file] [html directory] optional: [sleep duration] git-mirror gen-url [path to repo] -- generate url file in repo git-mirror help -- show this message relative paths are not supported, but globs are. To use, first clone the wanted somewhere repos with the --mirror flag.' } run() { [ -z ${3} ] && echo "not enough arguments" && exit 1 [ -z $(which stagit) ] && echo "please install stagit" && exit 1 [ -z $(which minify) ] && echo "please install minify" && exit 1 cd ${1} [ -d ${3} ] || mkdir ${3} cd ${3} while :; do stagit-index ${1}/* find "$1" -name '*.git' -type d | \ while read dir; do newdir=${3}/$(basename ${dir} .git) [ -d ${newdir} ] || mkdir ${newdir} cd ${newdir} stagit ${dir} cp "$1/logo.png" . ln -s logo.png favicon.png find . -type f \( -name '*.html' -or -name '*.xml' \) | \ while read i ; do minify ${i} > ${i}.tmp mv ${i}.tmp ${i} done git -C ${dir} fetch --tags echo $(date -Iseconds) ' | ' ${dir} | tee -a ${2} echo $(tail -n 1500 ${2}) > ${2} done sleep ${4:-600} done } gen_url() { find ${1} -maxdepth 2 -name '*.git' | \ while read dir; do $(git -C $dir remote get-url origin) > $dir/url done } case ${1} in -h | --help | help) usage ;; run) shift 1 run $@ ;; gen-url) shift 1 gen_url $@ ;; *) usage exit 1 ;; esac