Personal build of stagit static git page generator.
log | files | refs | readme | license

stagit-post-receive.sh (1726B)

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
#!/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.

# NOTE: needs to be set for correct locale (expects UTF-8) otherwise the
#       default is LC_CTYPE="POSIX".
export LC_CTYPE="en_US.UTF-8"

name="$1"
if test "${name}" = ""; then
	name=$(basename "$(pwd)")
fi

# config
# paths must be absolute.
reposdir="/home/git"
dir="${reposdir}/pub/${name}"
htmldir="/var/www/htdocs/git.skec.site"
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
# TODO: fix
#while read -r old new ref; do
#	test "${old}" = "0000000000000000000000000000000000000000" && continue
#	test "${new}" = "0000000000000000000000000000000000000000" && continue
#
#	hasrevs=$(git rev-list "${old}" "^${new}" | sed 1q)
#	if test -n "${hasrevs}"; then
#		force=1
#		break
#	fi
#done

d=$(basename "${name}")
printf "[%s] stagit HTML pages... " "${d}"

mkdir -p "${destdir}/pub/${d}"
cd "${destdir}/pub/${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}/pub/"*/ > "${destdir}/index.html"

# make pages.
stagit -c "${cachefile}" -u "https://git.skec.site/pub/${d}/" "${reposdir}/pub/${d}"

ln -sf log.html index.html
ln -sf ../../style.css style.css
ln -sf ../../logo.png logo.png

echo "done"