]> git.plutz.net Git - shellwiki/blob - macros/changes
54f4782cf0bc0fc895b21578f9c4a3c5f03b12e5
[shellwiki] / macros / changes
1 #!/bin/sh
2
3 # Copyright 2023 Paul Hänsch
4
5 # Permission to use, copy, modify, and/or distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8
9 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
12 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17 . "$_EXEC/cgilite/cgilite.sh"
18 . "$_EXEC/tools.sh"
19 . "$_EXEC/acl.sh"
20
21 _(){ printf %s\\n "$*"; }
22 [ "${LANGUAGE}" -a -r "${_EXEC}/l10n/${LANGUAGE}.sh" ] && . "${_EXEC}/l10n/${LANGUAGE}.sh"
23
24 LANGUAGES='' glob="/" depth=-1
25 set -- "$@" --
26 while [ $# -gt 0 ]; do case $1 in
27   --system) glob_system_pages=true; shift 1;;
28   :*) LANGUAGES="${LANGUAGES}${LANGUAGES:+ }${1#:}"; shift 1;;
29   --depth) depth="$2"; shift 2;;
30   --) shift 1; break;;
31   *) set -- "$@" "$1"; shift 1;;
32 esac; done
33 [ "$*" ] || set -- /
34
35 page='' page_abs='' ostamp='' odate='' lstamp='' ldate='' row='' rowstate=''
36
37 printf '<table class="macro changes"><thead>\n<th>Page</th>'
38 for l in $LANGUAGES; do printf '<th>%s</th>' "$l"; done
39 printf '\n</thead><tbody>\n'
40
41 for glob in "$@"; do
42   page_glob "$glob" "$depth" 
43 done \
44 | sort -u \
45 | while read page; do
46   page_abs="$(page_abs "$page")"
47   acl_read "${page_abs}" || continue
48
49   read ostamp odate <<-EOF
50         $([ "$REV_PAGES" = true ] \
51           && git -C "$_DATA" log --pretty="format:%at %ai" -- "pages${page_abs}#page.md" \
52           || stat -c "%Y %y" -- "$_DATA/pages${page_abs}#page.md" 2>&- \
53           || printf "0 %s\n" "$(_ "(never edited)")"
54         )
55         EOF
56   row="<td><a href=\"$(HTML "$page")\">$(HTML "$page")</a><span class=\"date\">${odate%%[+.]*}</span></td>"
57   rowstate=''
58  
59   for l in $LANGUAGES; do
60     if [ -f "${_DATA}/pages/${page}:${l}/#page.md" ]; then
61       read lstamp ldate <<-EOF
62         $([ "$REV_PAGES" = true ] \
63           && git -C "$_DATA" log --pretty="format:%at %ai" -- "pages$(page_abs "${page_abs}:${l}")/#page.md" \
64           || stat -c "%Y %y" -- "$_DATA/pages$(page_abs "${page_abs}:${l}")/#page.md"
65         )
66         EOF
67       if [ $lstamp -lt $ostamp ] 2>&-; then
68         row="${row}<td class=\"outdated\"><a href=\"$(HTML "${page}:${l}")\">$(_ outdated)</a><span class=\"date\">${ldate%%[+.]*}</span></td>"
69         [ "$rowstate" = "${rowstate%*outdated*}" ] && rowstate="${rowstate}${rowstate:+ }outdated"
70       else
71         row="${row}<td class=\"current\" ><a href=\"$(HTML "${page}:${l}")\">$(_ current)</a ><span class=\"date\">${ldate%%[+.]*}</span></td>"
72         [ "$rowstate" = "${rowstate%*current*}" ] && rowstate="${rowstate}${rowstate:+ }current"
73       fi
74     else
75       row="${row}<td class=\"missing\"><a href=\"$(HTML "${page}:${l}")\">$(_ missing)</a></td>"
76       [ "$rowstate" = "${rowstate%*missing*}" ] && rowstate="${rowstate}${rowstate:+ }missing"
77     fi
78   done
79
80   printf '<tr class="%s">%s</tr>\n' "$rowstate" "$row"
81 done
82
83 printf '</tbody></table>'