--- /dev/null
+#!/bin/sh
+
+case "${PATH_INFO}" in
+ */\[revision\]|*/\[revision\]/)
+ if ! acl_read "${PATH_INFO%\[revision\]?}"; then
+ theme_error 403
+ else
+ theme_revisions "${PATH_INFO%\[revision\]?}"
+ fi
+ return 0
+ ;;
+ */[revision]/*):;;
+esac
+
+return 1
--- /dev/null
+#!/bin/sh
+
+. "$_EXEC/cgilite/cgilite.sh"
+. "$_EXEC/tools.sh"
+. "$_EXEC/acl.sh"
+
+page="$1"
+page_abs="$(page_abs "$page")"
+
+if ! acl_read "$page_abs"; then
+ return 0
+elif [ ! "$(which git)" ]; then
+ printf '<div class="macro revisions error">GIT is not available to handle revisioning.</div>'
+fi
+
+printf '<ul class="macro revisions">'
+ IFS=" "
+ git -C "$_DATA" log --date=format:"%a, %x %H:%M" \
+ --pretty=format:"%h %cd %s%n" \
+ -- "pages${page_abs}#page.md" \
+ | while read hash date message; do
+ user="${message% @*}"; user="${user##*@ }"
+ printf '<a href="%s"><span class="hash">%s</span><span="date">%s</span><span class="user">%s</span></a>' \
+ "$(HTML "${page%/}/[revisions]/$hash")" "$(HTML "$hash")" "$(HTML "$date")" "$(HTML "$user")"
+ done
+printf '</ul>'