tpost-receive.sh - stagit - [fork] customized build of stagit, the static git page generator
 (HTM) git clone git://src.adamsgaard.dk/stagit
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tpost-receive.sh (2720B)
       ---
            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/git"
           23 dir="${reposdir}/${name}"
           24 htmldir="/var/www/domains/src.adamsgaard.dk"
           25 gopherdir="/var/gopher"
           26 stagitdir="/"
           27 destdir="${htmldir}${stagitdir}"
           28 gopherstagitdir="/src"
           29 gopherdestdir="${gopherdir}${gopherstagitdir}"
           30 cachefile=".htmlcache"
           31 # /config
           32 
           33 if ! test -d "${dir}"; then
           34         echo "${dir} does not exist" >&2
           35         exit 1
           36 fi
           37 cd "${dir}" || exit 1
           38 
           39 # detect git push -f
           40 force=0
           41 while read -r old new ref; do
           42         test "${old}" = "0000000000000000000000000000000000000000" && continue
           43         test "${new}" = "0000000000000000000000000000000000000000" && continue
           44 
           45         hasrevs=$(git rev-list "${old}" "^${new}" | sed 1q)
           46         if test -n "${hasrevs}"; then
           47                 force=1
           48                 break
           49         fi
           50 done
           51 
           52 # strip .git suffix.
           53 r=$(basename "${name}")
           54 d=$(basename "${name}" ".git")
           55 
           56 ## HTML
           57 printf "[%s] stagit HTML pages... " "${d}"
           58 
           59 mkdir -p "${destdir}/${d}"
           60 cd "${destdir}/${d}" || exit 1
           61 
           62 # remove commits and ${cachefile} on git push -f, this recreated later on.
           63 if test "${force}" = "1"; then
           64         rm -f "${cachefile}"
           65         rm -rf "commit"
           66 fi
           67 
           68 # make index.
           69 stagit-index "${reposdir}/"*/ > "${destdir}/index.html"
           70 
           71 # make pages.
           72 stagit -c "${cachefile}" "${reposdir}/${r}"
           73 
           74 # update bare repo for static http clone through alturl
           75 (cd "${htmldir}" && cd "${r}.git" && \
           76         git fetch origin +refs/heads/*:refs/heads/* --prune && git update-server-info)
           77 
           78 # disallow access to file and commit contents in parent robots.txt
           79 if ! grep -q "Disallow: /${r}/" "${destdir}/robots.txt"; then
           80         printf "Disallow: /%s/file/\nDisallow: /%s/commit/\n" \
           81                 "$r" "$r" >> "${destdir}/robots.txt"
           82 fi
           83 
           84 ln -sf log.html index.html
           85 ln -sf ../style.css style.css
           86 ln -sf ../logo.png logo.png
           87 
           88 echo "done"
           89 
           90 ## GPH
           91 printf "[%s] stagit gopher pages... " "${d}"
           92 
           93 mkdir -p "${gopherdestdir}/${d}"
           94 cd "${gopherdestdir}/${d}" || exit 1
           95 
           96 # remove commits and ${cachefile} on git push -f, this recreated later on.
           97 if test "${force}" = "1"; then
           98         rm -f "${cachefile}"
           99         rm -rf "commit"
          100 fi
          101 
          102 # make index.
          103 stagit-gopher-index -b "${gopherstagitdir}" "${reposdir}/"*/ > "${gopherdestdir}/index.gph"
          104 
          105 # make pages.
          106 stagit-gopher -b "${gopherstagitdir}/${d}" -c "${cachefile}" "${reposdir}/${r}"
          107 
          108 ln -sf log.gph index.gph
          109 
          110 echo "done"