example_post-receive.sh - stagit - static git page generator
 (HTM) git clone git://git.codemadness.org/stagit
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       example_post-receive.sh (1748B)
       ---
            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".
           13 export LC_CTYPE="en_US.UTF-8"
           14 
           15 name="$1"
           16 if test "${name}" = ""; then
           17         name=$(basename "$(pwd)")
           18 fi
           19 
           20 # config
           21 # paths must be absolute.
           22 reposdir="/home/src/src"
           23 dir="${reposdir}/${name}"
           24 htmldir="/home/www/domains/git.codemadness.org/htdocs"
           25 stagitdir="/"
           26 destdir="${htmldir}${stagitdir}"
           27 cachefile=".htmlcache"
           28 # /config
           29 
           30 if ! test -d "${dir}"; then
           31         echo "${dir} does not exist" >&2
           32         exit 1
           33 fi
           34 cd "${dir}" || exit 1
           35 
           36 # detect git push -f
           37 force=0
           38 while 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
           47 done
           48 
           49 # strip .git suffix.
           50 r=$(basename "${name}")
           51 d=$(basename "${name}" ".git")
           52 printf "[%s] stagit HTML pages... " "${d}"
           53 
           54 mkdir -p "${destdir}/${d}"
           55 cd "${destdir}/${d}" || exit 1
           56 
           57 # remove commits and ${cachefile} on git push -f, this recreated later on.
           58 if test "${force}" = "1"; then
           59         rm -f "${cachefile}"
           60         rm -rf "commit"
           61 fi
           62 
           63 # make index.
           64 stagit-index "${reposdir}/"*/ > "${destdir}/index.html"
           65 
           66 # make pages.
           67 stagit -c "${cachefile}" -u "https://git.codemadness.nl/$d/" "${reposdir}/${r}"
           68 
           69 ln -sf log.html index.html
           70 ln -sf ../style.css style.css
           71 ln -sf ../logo.png logo.png
           72 
           73 echo "done"