#!/bin/bash GITROOT="/home/git/pub_repo" if [ $USER != $(stat -c %U ${GITROOT}) ] && [ $USER != "root" ] ; then echo "Sorry you cannot write in ${GITROOT}." echo "You must be the $(stat -c %U ${GITROOT}) user or the root user." exit fi pushd ${GITROOT} > /dev/null echo "=== Generate config ===" find . -mindepth 1 -maxdepth 5 -type d \( ! -iname ".*" \) \( ! -iname "refs" \) \( ! -iname "hooks" \) \( ! -iname "info" \) \( ! -iname "branches" \) \( ! -iname "objects" \) \( -iname "*.git" \)| sed 's|^\./||g' | while read filename do echo "repo.url=$filename" echo "repo.path=${GITROOT}/$filename" echo "repo.readme=${GITROOT}/$filename/info/web/about.html" echo "repo.desc=$(cat ${GITROOT}/$filename/description)" echo "repo.owner=neodarz" echo "" done > cgitrepos echo "=== Generate post-receive ===" find . -mindepth 1 -maxdepth 5 -type d \( ! -iname ".*" \) \( ! -iname "refs" \) \( ! -iname "hooks" \) \( ! -iname "info" \) \( ! -iname "branches" \) \( ! -iname "objects" \) \( -iname "*.git" \)| sed 's|^\./||g' | while read filename do cat << EOF > ${GITROOT}/$filename/hooks/post-receive #!/bin/bash agefile="\$(git rev-parse --git-dir)"/info/web/last-modified aboutfile="\$(git rev-parse --git-dir)"/info/web/about.html echo "Generating $filename project about page..." mkdir -p "\$(dirname "\$agefile")" && git for-each-ref --sort=-authordate --count=1 --format='%(authordate:iso8601)' > "\$agefile" mkdir -p "\$(dirname "\$aboutfile")" && git show master:README.md | pandoc -f markdown > "\$aboutfile" if [[ \$(wc -c < \$(git rev-parse --git-dir)/info/web/about.html) -gt 1 && \$(cat ${GITROOT}/cgitrepos | grep "repo.readme=.*$filename.*" | wc -l) -eq 0 ]]; then echo "=> About page generated, update configuration..." sed -i "s repo.path.*$filename.*$ &\nrepo.readme=${GITROOT}/$filename/info/web/about.html g" ${GITROOT}/cgitrepos fi EOF chmod +x ${GITROOT}/$filename/hooks/post-receive pushd ${GITROOT}/$filename/hooks/ > /dev/null ./post-receive popd > /dev/null sudo chown -R git:git ${GITROOT} if [ ! $(wc -c < ${GITROOT}/$filename/info/web/about.html) -gt 1 ]; then sed -i "\ repo.readme=${GITROOT}/$filename/info/web/about.html d" cgitrepos fi done echo "done !"