configurable own for a git repo
[infrastructure.git] / scripts / git-check.sh
index b87b3ea..ef395ed 100755 (executable)
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+MLIST="git@onelab.eu"
+
 cd /git
 
 gitwebfiles="git-favicon.png git-logo.png gitweb.cgi gitweb.css"
@@ -9,83 +11,102 @@ gitwebpattern=""
 for file in $gitwebfiles; do gitwebpattern="${gitwebpattern}|$file" ; done
 gitwebpattern=$(echo "$gitwebpattern" | sed -e 's,|,,')
 
-### function count () {
-### 
-###     echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx counting"
-### 
-###     echo git
-###     ls git | wc -l 
-### 
-###     echo gitweb
-###     ls gitweb | egrep -v "$gitwebpattern" | wc -l 
-### 
-### }
-### 
-### function missing_in_git () {
-### 
-###     echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx missing in git"
-### 
-###     for i in $(ls gitweb | egrep -v $gitwebpattern); do 
-###    b=$(basename $i .git)
-###    [ -d git/$b ] || echo $b missing in git
-###     done
-### 
-### }
-
-function missing_in_gitweb () {
+function missing_gitweb () {
 
-###     echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx missing in gitweb (from git)"
-### 
-###     for i in $(ls git); do 
-###    echo -n "$i " 
-###    if [ ! -h gitweb/${i}.git ] ; then
-###        echo -n "ADDING $i.git "
-###        (cd git; ln -s ../$i/.git ${i}.git)
-###    fi
-###     done
-    
     echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx missing in gitweb (for web)"
     for i in $gitwebfiles; do
        echo -n "$i "
-       if [ ! -h git/${i} ] ; then
-           echo "LINKING.. " ; (cd git; ln -s ../${i} .)
+       if [ -f ${i} ] ; then
+           echo -n "OK "
+       else
+           echo -n "MISSING.. " ; 
        fi
     done
     echo ""
 
 }
 
+
 function fill_descriptions () {
     echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx checking descriptions "
     for arg in "$@" ; do
-       # accept args like git/plcapi
-       i=$(basename $arg)
-       echo -n "$i "
-       grep Unnamed git/$i/.git/description && { echo -n $i "Setting.. "; echo $i > git/$i/.git/description ; }
+       # accept args like plcapi or plcapi.git
+       b=$(basename $arg .git)
+       git=${b}.git
+       echo -n "$git "
+       grep -q Unnamed $git/description && { echo -n $i "Setting.. "; echo $b > $git/description ; }
     done
     echo ""
 }
 
-function upload_archives () {
-    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx checking configs for uploadarch "
+function update_server_info () {
+    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx updating server info "
     for arg in "$@" ; do
-       # accept args like git/plcapi
-       i=$(basename $arg)
-       echo -n "$i "
-       if ! grep uploadarch git/$i/.git/config ; then
-           echo -n $i "Setting.. "; 
-           cat >> git/$i/.git/config <<EOF
-[daemon]
-       uploadpack = false
-       uploadarch = true
-EOF
-       fi
+       # accept args like plcapi or plcapi.git
+       b=$(basename $arg .git)
+       git=${b}.git
+       echo -n "$git "
+        cd $git
+        git update-server-info
+        cd - >& /dev/null
+    done
+    echo ""
+}
+
+function check_permissions () {
+    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx checking permissions "
+    for arg in "$@" ; do
+       # accept args like plcapi or plcapi.git
+       b=$(basename $arg .git)
+       git=${b}.git
+       owner=root:onelab
+       if [ -f $git/owner ] ; then owner=$(cat $git/owner); fi
+       echo -n "$git ($owner) "
+       chown -R $owner $git
+       chmod -R g+w,o-w $git
+    done
+    echo ""
+}
+
+function check_configs () {
+    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx checking config (upload*, hooks...) "
+    for arg in "$@" ; do
+       # accept args like plcapi or plcapi.git
+       b=$(basename $arg .git)
+       git=${b}.git
+       echo -n "$git "
+       cd $git 
+        git config core.bare true; echo -n "bare ";
+       git config core.sharedrepository >& /dev/null || { git config core.sharedrepository true; echo -n "sharedrepository "; }
+       git config daemon.uploadpack >& /dev/null || { git config daemon.uploadpack true; echo -n "uploadpack "; }
+       git config daemon.uploadarch >& /dev/null || { git config daemon.uploadarch true; echo -n "uploadarch "; }
+       (git config hooks.mailinglist|grep $MLIST) >& /dev/null || { git config hooks.mailinglist $MLIST; echo -n "mailinglist "; }
+        (git config hooks.announcelist|grep $MLIST) >& /dev/null || { git config hooks.announcelist $MLIST; echo -n "announcelist "; }
+        (git config hooks.envelopesender|grep $MLIST) >& /dev/null || { git config hooks.envelopesender $MLIST; echo -n "envelopesender "; }
+        git config hooks.emailprefix >& /dev/null || { git config hooks.emailprefix ''; echo -n "emailprefix "; }
+       cd - >& /dev/null
+    done
+    echo ""
+}
+
+function check_hooks () {
+    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx checking hooks "
+    for arg in "$@" ; do
+       # accept args like plcapi or plcapi.git
+       b=$(basename $arg .git)
+       git=${b}.git
+       echo -n "$git "
+       # standard version is in /usr/share/doc/git-1.5.5.6/hooks/post-receive-email
+        (cd $git/hooks; cp -f /root/bin/post-receive-email-with-diffs post-receive; chmod 755 post-receive )
     done
     echo ""
 }
 
-#count
-#missing_in_git
-missing_in_gitweb
-fill_descriptions $(ls git | egrep -v "${gitwebpattern}")
-upload_archives $(ls git | egrep -v "${gitwebpattern}")
+# missing_gitweb
+args="$@"
+[[ -z "$args" ]] && args=$(ls -d *.git)
+fill_descriptions $args
+update_server_info $args
+check_permissions $args
+check_configs $args
+check_hooks $args