#!/bin/mksh # © 2022 mirabilos Ⓕ MirOS unset LANGUAGE export LC_ALL=C if (( $# < 1 )); then print -ru2 "E: syntax: $0 'commit message' [file ...]" exit 255 fi cmsg=$1 shift set -e cwd=$(realpath .) cd "$(realpath "$0/../..")" basedir=$(realpath .) set -A di ndi=0 function dofn { [[ $fn = *.mscx ]] || return 0 ds=$(sed -n '/^ *\([12][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]\)<\/metaTag>$/{s//\1/p;q;}' "$fn") [[ -n $ds ]] || return 0 d=${ds//-} dx= i=-1 while (( ++i < ndi )); do [[ ${di[i]} = "$d $i" ]] || continue dx=$i break done if [[ -z $dx ]]; then dx=$ndi di[ndi++]="$d $dx" eval "set -A dv$dx" fi nameref dvv=dv$dx dvv+=("$fn") } if (( $# )); then for fn in "$@"; do [[ $fn = /* ]] || fn=$cwd/$fn fn=$(realpath "$fn") if [[ $fn != "$basedir"/* ]]; then print -ru2 -- "E: not canonical: $fn" exit 2 fi fn=${fn#"$basedir"/} dofn done else git grep -F -l -z '' |& while IFS= read -pr -d '' fn; do dofn done fi set -sA ds -- "${di[@]}" i=-1 while (( ++i < ndi )); do set -- ${ds[i]} nameref dvv=dv$2 set -- -S --date "${1}T23:59:59Z" -m "$cmsg" -- "${dvv[@]}" git commit --dry-run "$@" || continue git commit "$@" done print -ru2 "I: done"