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