stagit

example_post-receive.sh

1.7 kB
 1#!/bin/sh
 2# generic git post-receive hook.
 3# change the config options below and call this script in your post-receive
 4# hook or symlink it.
 5#
 6# usage: $0 [name]
 7#
 8# if name is not set the basename of the current directory is used,
 9# this is the directory of the repo when called from the post-receive script.
10
11# NOTE: needs to be set for correct locale (expects UTF-8) otherwise the
12#       default is LC_CTYPE="POSIX".
13export LC_CTYPE="en_US.UTF-8"
14
15name="$1"
16if test "${name}" = ""; then
17	name=$(basename "$(pwd)")
18fi
19
20# config
21# paths must be absolute.
22reposdir="/home/src/src"
23dir="${reposdir}/${name}"
24htmldir="/home/www/domains/git.codemadness.org/htdocs"
25stagitdir="/"
26destdir="${htmldir}${stagitdir}"
27cachefile=".htmlcache"
28# /config
29
30if ! test -d "${dir}"; then
31	echo "${dir} does not exist" >&2
32	exit 1
33fi
34cd "${dir}" || exit 1
35
36# detect git push -f
37force=0
38while read -r old new ref; do
39	test "${old}" = "0000000000000000000000000000000000000000" && continue
40	test "${new}" = "0000000000000000000000000000000000000000" && continue
41
42	hasrevs=$(git rev-list "${old}" "^${new}" | sed 1q)
43	if test -n "${hasrevs}"; then
44		force=1
45		break
46	fi
47done
48
49# strip .git suffix.
50r=$(basename "${name}")
51d=$(basename "${name}" ".git")
52printf "[%s] stagit HTML pages... " "${d}"
53
54mkdir -p "${destdir}/${d}"
55cd "${destdir}/${d}" || exit 1
56
57# remove commits and ${cachefile} on git push -f, this recreated later on.
58if test "${force}" = "1"; then
59	rm -f "${cachefile}"
60	rm -rf "commit"
61fi
62
63# make index.
64stagit-index "${reposdir}/"*/ > "${destdir}/index.html"
65
66# make pages.
67stagit -c "${cachefile}" -u "https://git.codemadness.nl/$d/" "${reposdir}/${r}"
68
69ln -sf log.html index.html
70ln -sf ../style.css style.css
71ln -sf ../logo.png logo.png
72
73echo "done"