improve example, add initial post-receive example - stagit - static git page generator
 (HTM) git clone git://git.codemadness.org/stagit
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4e307d3076d88b0a8e096e23df8c78077542ab3e
 (DIR) parent 0f428f1b5abb7b6f42944a15e680980d18101353
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sat, 15 Jul 2017 13:50:24 +0200
       
       improve example, add initial post-receive example
       
       Diffstat:
         M example.sh                          |       5 ++++-
         A example_post-receive.sh             |      65 +++++++++++++++++++++++++++++++
       
       2 files changed, 69 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/example.sh b/example.sh
       @@ -2,11 +2,14 @@
        # - Makes index for repositories in a single directory.
        # - Makes static pages for each repository directory.
        #
       -# NOTE, things to do manually (once):
       +# NOTE, things to do manually (once) before running this script:
        # - copy style.css, logo.png and favicon.png manually, a style.css example
        #   is included.
       +#
        # - write clone url, for example "git://git.codemadness.org/dir" to the "url"
        #   file for each repo.
       +# - write owner of repo to the "owner" file.
       +# - write description in "description" file.
        #
        # Usage:
        # - mkdir -p htmldir && cd htmldir
 (DIR) diff --git a/example_post-receive.sh b/example_post-receive.sh
       @@ -0,0 +1,65 @@
       +#!/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"