Files
troupe-standup/wizard-work/ledger/CHECK-commit-census
T

57 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# CHECK-commit-census — verify 2026-10-26-commit-census.tsv against git.
# Exits 0 only if every row (date -> count) in the TSV matches a fresh git
# re-derivation and no git day is missing from the table. Non-zero otherwise.
set -u
DIR=$(cd "$(dirname "$0")" && pwd)
tsv="$DIR/2026-10-26-commit-census.tsv"
repo="$DIR/.."
[ -f "$tsv" ] || { echo "FAIL: $tsv missing"; exit 1; }
fail=0
# Re-derive the expected per-day counts from git at a pinned revision
# (the census in this artifact was taken as of commit 957143e). awk 'NF' keeps
# output newline-terminated so sort/uniq cannot drop the final record.
PINNED=957143e
cd "$repo" || { echo "FAIL: cannot cd $repo"; exit 1; }
expected=$(git log "$PINNED" --pretty=format:%ad --date=short | awk 'NF' | sort | uniq -c | sort -k2)
# Per-row comparison: date (col 2 of expected) vs count (col 2 of TSV).
while IFS=$'\t' read -r d c; do
[ -z "$d" ] && continue
case "$d" in date) continue;; esac
exp=$(echo "$expected" | awk -v d="$d" '$2==d {print $1}')
if [ "$exp" != "$c" ]; then
echo "FAIL: $d expected $exp, got $c"
fail=1
fi
done < "$tsv"
# Total comparison.
exp_total=$(echo "$expected" | awk '{s+=$1} END {print s}')
act_total=$(awk -F'\t' 'NR>1 && $2!="" {s+=$2} END {print s}' "$tsv")
if [ "$exp_total" != "$act_total" ]; then
echo "FAIL: total expected $exp_total, got $act_total"
fail=1
fi
# Every git day must appear in the table (no missing rows).
missing=$(comm -23 \
<(echo "$expected" | awk '{print $2}' | sort) \
<(awk -F'\t' 'NR>1 && $2!="" {print $1}' "$tsv" | sort) | tr '\n' ' ')
if [ -n "$missing" ]; then
echo "FAIL: rows missing from table: $missing"
fail=1
fi
if [ "$fail" -eq 0 ]; then
nrows=$(awk -F'\t' 'NR>1 && $2!="" {n++} END {print n+0}' "$tsv")
echo "PASS: $tsv verified against git ($act_total commits, $nrows rows)"
exit 0
else
echo "FAIL: one or more rows mismatch"
exit 1
fi