]> git.plutz.net Git - shellwiki/blob - macros/revisions
Merge commit 'd03c336720e5cc6d24cce791e161b16371b9bd4d'
[shellwiki] / macros / revisions
1 #!/bin/sh
2
3 . "$_EXEC/cgilite/cgilite.sh"
4 . "$_EXEC/tools.sh"
5 . "$_EXEC/acl.sh"
6
7 _(){ printf %s\\n "$*"; }
8 [ "${LANGUAGE}" -a -r "${_EXEC}/l10n/${LANGUAGE}.sh" ] && . "${_EXEC}/l10n/${LANGUAGE}.sh"
9
10 LIST=true DIFF=
11 while [ $# -gt 0 ]; do case $1 in
12   --list)
13     LIST=true
14     shift 1
15     ;;
16   --no-list)
17     LIST=
18     shift 1
19     ;;
20   --diff)
21     DIFF=true
22     shift 1
23     ;;
24   --no-diff)
25     DIFF=
26     shift 1
27     ;;
28   *)page="$1"
29     shift 1
30     ;;
31 esac; done
32
33 page_abs="$(page_abs "$page")"
34 page_default="${page_abs%:*/}" 
35
36 if ! acl_read "$page_abs"; then
37   return 0
38 fi
39
40 printf '<div class="macro revisions">\n'
41
42 if [ "$REV_PAGES" != true ]; then
43   printf '<div class="error">%s</div>' "$(_ GIT is not available to handle revisioning.)"
44   exit 1
45 fi
46
47 if [ "$LIST" = true ]; then
48   printf '<ul>\n'
49   IFS=" "
50   { git -C "$_DATA" log --date=format:"%a, %x %H:%M" \
51                       --pretty=format:"%h       %cd     %s" \
52                       -- "pages${page_abs}#page.md"
53     printf '\n'
54   } | while read -r hash date message; do
55     user="${message% @*}"; user="${user##*@ }"
56     printf '<li><span class="hash"><a href="%s">%s</a></span><span class="date">%s</span><span class="user">%s</span></li>\n' \
57       "$(HTML "${page%/}/[revision]/$hash")" "$(HTML "$hash")" "$(HTML "$date")" "$(HTML "$user")"
58   done
59   printf '</ul>\n'
60 fi
61
62 if [ "$DIFF" = true -a "$LANGUAGE_DEFAULT" -a "$page_default" != "$page_abs" ]; then
63   commit="$(git -C "$_DATA" log --pretty=format:%H -- "pages${page_abs}#page.md" |head -n1)"
64   printf '<section class="diff"><h2>%s</h2>' "$(_ 'Latest changes to the original language page')"
65   git -C "$_DATA" diff -U3 "$commit" -- "pages${page_default}#page.md" |tail -n+5 \
66   | while read -r diff; do case $diff in
67     @@\ *\ @@*)
68         line="${diff#@@ * @@}"
69         num="${diff%"${line}"}"
70         printf '<span class="linenum">%s</span>\n' "$(HTML "$num")"
71         printf '<span class="line">%s</span>\n' "$(HTML "$line")"
72         ;;
73     -*) printf '<span class="linedel">%s</span>\n' "$(HTML "$diff")";;
74     +*) printf '<span class="lineadd">%s</span>\n' "$(HTML "$diff")";;
75     \ *) printf '<span class="line">%s</span>\n' "$(HTML "$diff")";;
76     \\\ *) printf '<span class="linenote">%s</span>\n' "$(HTML "$diff")";;
77   esac; done
78   printf '</section>'
79 fi
80
81 printf '</div>\n'