From 14d011a3940ad12048e01138ba50cf8d59815e38 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 25 Apr 2013 11:37:31 +0200 Subject: [PATCH] add hook to git-update.sh convention in /git-slave --- scripts/git-mirror.sh | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/scripts/git-mirror.sh b/scripts/git-mirror.sh index cb89395..6a06913 100755 --- a/scripts/git-mirror.sh +++ b/scripts/git-mirror.sh @@ -202,10 +202,40 @@ function mirror_repo () { touch ${REPO_DIR}/MIRRORED.stamp } +#################### +# hook to simpler, pull-only repos +# e.g. /git-slave/tophat.git on onelab.eu +# the idea here is, we need to keep a local read-only mirror +# of some repositories +# instead of hacking this script that is already scary, I preferred to write +# a separate script git-update.sh that runs a bit like auto-update.sh +# and that additionally takes care of remote branches +# the layout is as follows +# * manually created the local mirror by running +# cd /git-slave +# git clone ssh://tophat@git.top-hat.info/tophat.git +# which creates a non-bare repo right under /git-slave +# * create a symlink for git-daemon +# cd /git +# ln -s /git-slave/tophat/.git tophat.git +# * enable updates by just dropping a symlink there +# cd /git-slave/tophat +# ln -s /root/infrastructure/scripts/git-udate.sh + +function slave_repo () { + git_slave=$1; shift + cd $git_slave + for subdir in *; do + [ -x $subdir/git-update.sh ] && $subdir/git-update.sh + done +} + function usage () { echo "Usage $COMMAND [options] REPONAME*" echo " [-a admin-mails] : provide space-separated admins emails" echo " [-r remote-git-url] : e.g. -r git://git.onelab.eu/" + echo " [-s slave-area] : git-update.sh in all subdirs of slave-area that have one" + echo " typically /git-slave on the onelab side for e.g. tophat" echo " [-q] quiet mode for running under cron" echo " [-v] verbose mode" echo " [-f] force mode, runs even if the lock file is present" @@ -213,10 +243,14 @@ function usage () { exit 1 } -while getopts "a:r:qvfh" opt; do +# set this as a default - won't harm anyone +SLAVE_GITDIR=/git-slave + +while getopts "a:r:s:qvfh" opt; do case $opt in a) ADMINS=$OPTARG ;; r) REMOTE_GIT=$OPTARG ;; + s) SLAVE_GITDIR=$OPTARG ;; q) QUIET=true ;; v) VERBOSE=true ;; f) FORCE=true ;; @@ -250,4 +284,5 @@ trap failure INT # if force is set we leave the lock file as is [ -z "$FORCE" ] && date > $LOCKFILE for gitrepo in "$@"; do mirror_repo $gitrepo ; done +if [ -d "$SLAVE_GITDIR" ] ; then slave_repo $SLAVE_GITDIR ; fi [ -z "$FORCE" ] && rm -f $LOCKFILE -- 2.43.0