]> git.plutz.net Git - shellwiki/blobdiff - handlers/40_revision.sh
change numbering for handlers
[shellwiki] / handlers / 40_revision.sh
diff --git a/handlers/40_revision.sh b/handlers/40_revision.sh
new file mode 100755 (executable)
index 0000000..08350c7
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+case "${PATH_INFO}" in
+  */\[revision\]/)
+    REDIRECT "${_BASE}${PATH_INFO%/}"
+    ;;
+  */\[revision\])
+    if ! acl_read "${PATH_INFO%\[revision\]}"; then
+      theme_error 403
+    else
+      theme_revisions "${PATH_INFO%\[revision\]}"
+    fi
+    return 0
+    ;;
+  */\[revision\]/\[*\]|*/\[revision\]/*/*)
+    REDIRECT "${_BASE}${PATH_INFO%%\[revision\]/*}${PATH_INFO##*/\[revision\]/}"
+    ;;
+  */\[revision\]/*)
+    page="${PATH_INFO%\[revision\]/*}"
+    rev="${PATH_INFO##*/}"
+    if ! acl_read "${page}"; then
+      theme_error 403
+    else
+    ( export PATH_INFO="${page}"
+      cd "${_DATA}/pages${page}" || cd "${_DATA}/pages/"
+      git -C "${_DATA}" show "${rev}:pages${PATH_INFO}#page.md" \
+      | { printf '<article class="revision">'; md; printf '</article>'; } \
+      | theme_page - "${page##*/}"
+    )
+    fi
+    return 0
+    ;;
+esac
+
+return 1