add hook to git-update.sh convention in /git-slave
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Thu, 25 Apr 2013 09:37:31 +0000 (11:37 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Thu, 25 Apr 2013 09:37:31 +0000 (11:37 +0200)
scripts/git-mirror.sh

index cb89395..6a06913 100755 (executable)
@@ -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