X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;ds=sidebyside;f=macros%2Fchanges;h=54f4782cf0bc0fc895b21578f9c4a3c5f03b12e5;hb=87830ec8c62831988b985b90c1a6790e6b906e5d;hp=be4dfec868ce86348c5b4e518d1b2f16d1c30dec;hpb=f8aef4eba181cf0ff368b96ffd26bdc30bd67852;p=shellwiki diff --git a/macros/changes b/macros/changes index be4dfec..54f4782 100755 --- a/macros/changes +++ b/macros/changes @@ -1,48 +1,83 @@ #!/bin/sh +# Copyright 2023 Paul Hänsch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + . "$_EXEC/cgilite/cgilite.sh" . "$_EXEC/tools.sh" . "$_EXEC/acl.sh" -LANGUAGES='' +_(){ printf %s\\n "$*"; } +[ "${LANGUAGE}" -a -r "${_EXEC}/l10n/${LANGUAGE}.sh" ] && . "${_EXEC}/l10n/${LANGUAGE}.sh" -glob="/" depth=-1 +LANGUAGES='' glob="/" depth=-1 +set -- "$@" -- while [ $# -gt 0 ]; do case $1 in --system) glob_system_pages=true; shift 1;; :*) LANGUAGES="${LANGUAGES}${LANGUAGES:+ }${1#:}"; shift 1;; --depth) depth="$2"; shift 2;; - *) glob="$1"; shift 1;; + --) shift 1; break;; + *) set -- "$@" "$1"; shift 1;; esac; done +[ "$*" ] || set -- / + +page='' page_abs='' ostamp='' odate='' lstamp='' ldate='' row='' rowstate='' -printf '\n' +printf '
Page
\n' for l in $LANGUAGES; do printf '' "$l"; done printf '\n\n' -page_glob "$glob" "$depth" |while read page; do - acl_read "$page" || continue +for glob in "$@"; do + page_glob "$glob" "$depth" +done \ +| sort -u \ +| while read page; do + page_abs="$(page_abs "$page")" + acl_read "${page_abs}" || continue - printf '' read ostamp odate <<-EOF - $(git -C "$_DATA" log --pretty="format:%at %ar" -- "pages/${page}#page.md") + $([ "$REV_PAGES" = true ] \ + && git -C "$_DATA" log --pretty="format:%at %ai" -- "pages${page_abs}#page.md" \ + || stat -c "%Y %y" -- "$_DATA/pages${page_abs}#page.md" 2>&- \ + || printf "0 %s\n" "$(_ "(never edited)")" + ) EOF - printf '' "$(HTML "$page")" "$(HTML "$page")" "${odate}" + row="" + rowstate='' for l in $LANGUAGES; do if [ -f "${_DATA}/pages/${page}:${l}/#page.md" ]; then read lstamp ldate <<-EOF - $(git -C "$_DATA" log --pretty="format:%at %ar" -- "pages/${page}:${l}/#page.md") + $([ "$REV_PAGES" = true ] \ + && git -C "$_DATA" log --pretty="format:%at %ai" -- "pages$(page_abs "${page_abs}:${l}")/#page.md" \ + || stat -c "%Y %y" -- "$_DATA/pages$(page_abs "${page_abs}:${l}")/#page.md" + ) EOF - if [ $lstamp -lt $ostamp ]; then - printf '' "$(HTML "${page}:${l}")" "$ldate" + if [ $lstamp -lt $ostamp ] 2>&-; then + row="${row}" + [ "$rowstate" = "${rowstate%*outdated*}" ] && rowstate="${rowstate}${rowstate:+ }outdated" else - printf '' "$(HTML "${page}:${l}")" "$ldate" + row="${row}" + [ "$rowstate" = "${rowstate%*current*}" ] && rowstate="${rowstate}${rowstate:+ }current" fi else - printf '' "$(HTML "${page}:${l}")" + row="${row}" + [ "$rowstate" = "${rowstate%*missing*}" ] && rowstate="${rowstate}${rowstate:+ }missing" fi done - printf '\n' + printf '%s\n' "$rowstate" "$row" done printf '
Page%s
%s%s$(HTML "$page")${odate%%[+.]*}outdated%s$(_ outdated)${ldate%%[+.]*}current%s$(_ current)${ldate%%[+.]*}missing$(_ missing)
'