stagit/example_post-receive.sh

66 lines
1.4 KiB
Bash
Raw Normal View History

#!/bin/sh
# generic git post-receive hook.
# change the config options below and call this script in your post-receive
# hook or symlink it.
#
# usage: $0 [name]
#
# if name is not set the basename of the current directory is used,
# this is the directory of the repo when called from the post-receive script.
name="$1"
if test "$name" = ""; then
name="$(basename $(pwd))"
fi
# config
# paths must be absolute.
reposdir="/home/src/src"
dir="${reposdir}/${name}"
htmldir="/home/www/domains/git.codemadness.org/htdocs"
stagitdir="/"
destdir="${htmldir}${stagitdir}"
cachefile=".htmlcache"
# /config
if ! test -d "$dir"; then
echo "$dir does not exist" >&2
exit 1
fi
cd "$dir" || exit 1
# detect git push -f
force=0
while read -r old new ref; do
hasrevs=$(git rev-list "$old" "^$new" | sed 1q)
if test -n "$hasrevs"; then
force=1
break
fi
done
# strip .git suffix.
r=$(basename "${name}")
d=$(basename "${name}" ".git")
printf "[%s] stagit HTML pages... " "${d}"
mkdir -p "${destdir}/${d}"
cd "${destdir}/${d}" || exit 1
# remove commits and $cachefile on git push -f, this recreated later on.
if test "$force" = "1"; then
rm -f "${cachefile}"
rm -rf "commit"
fi
# make index.
stagit-index "${reposdir}/"*/ > "${destdir}/index.html"
# make pages.
stagit -c "${cachefile}" "${reposdir}/${r}"
ln -sf log.html index.html
ln -sf ../style.css style.css
ln -sf ../logo.png logo.png
printf "done\n"