#!/usr/bin/env bash
set -uo pipefail
ROOT=""
while [ $# -gt 0 ]; do
case "$1" in
--root) ROOT="${2:-}"; shift 2 ;;
*) echo "[tool-pins] 用法: $0 [--root <仓根>]" >&2; exit 2 ;;
esac
done
[ -n "$ROOT" ] || ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
[ -d "$ROOT/.xuanwu" ] || { echo "[tool-pins] 器之自败: 域不可读 $ROOT/.xuanwu" >&2; exit 2; }
SELF_SHA="$(sha256sum "$0" | awk '{print $1}')"
echo "== tool-pins · 面 =="
if git -C "$ROOT" rev-parse --git-dir >/dev/null 2>&1; then
echo " 支 = $(git -C "$ROOT" rev-parse --abbrev-ref HEAD)"
echo " 尖 = $(git -C "$ROOT" rev-parse HEAD)"
echo " 树 = $(git -C "$ROOT" rev-parse 'HEAD^{tree}')"
else
echo " 支/尖/树 = n/a(非 git 工作树 · 对照副本态)"
fi
echo " 器 sha256 = $SELF_SHA"
scan() {
local r="$1"
find "$r/.xuanwu" -type f -name '*.md' -prune -o -type f -print 2>/dev/null \
| sort \
| while IFS= read -r f; do
awk -v F="${f#"$r"/}" '
function emit(s, pos, rel, ci, head, nl, s1, out) {
pos = 1
while ((rel = index(substr(s, pos), "cargo install")) > 0) {
ci = pos + rel - 1
head = substr(s, 1, ci - 1)
nl = gsub(/\n/, "\n", head)
s1 = substr(s, ci)
if (match(s1, /&&|\|\||;/)) s1 = substr(s1, 1, RSTART - 1)
out = s1; gsub(/\n/, " ", out)
printf "%s:%d:%s\n", F, start + nl, out
pos = ci + 1
}
}
{ if ($0 ~ /^[[:space:]]*#/) { # ★ 注释物理行: 不参与拼接
if (buf != "") buf = buf "\n" # (续接态下补 `\n` 以保行号)
next
}
if (buf == "") start = NR
line = $0
if (line ~ /\\$/) { sub(/\\$/, "", line); buf = buf line "\n"; next }
emit(buf line); buf = ""
}
END { if (buf != "") emit(buf) }
' "$f"
done \
| grep -vE ':[0-9]+:[[:space:]]*#'
}
CHECK_OUT="$(mktemp)"; trap 'rm -f "$CHECK_OUT"' EXIT
audit() {
local r="$1" n=0
while IFS= read -r row; do
[ -z "$row" ] && continue
local args; args="${row#*cargo install }"
local ver; ver="$(grep -oP -- '--version[= ]+\K[^ ]+' <<<"$args" | head -1)"
if [ -z "$ver" ]; then
printf ' 违规① 无 --version: %s\n' "$row"
n=$((n + 1)); continue
fi
if ! grep -qP '^=?[0-9]+\.[0-9]+\.[0-9]+([-+.][0-9A-Za-z.-]+)?$' <<<"$ver"; then
printf ' 违规② 非精确钉: %s(--version %s)\n' "$row" "$ver"
n=$((n + 1)); continue
fi
done < <(scan "$r" | grep -F 'cargo install')
return "$n"
}
echo
echo "-- 判据① 归零 + 判据② 精确(域: .xuanwu/** 活码 · 拼接续行后)"
echo "-- 存量(★ 先量存量: 违者逐处具名 · 承 absent-claim-needs-a-named-list)"
N_VIOL=0
audit "$ROOT" > "$CHECK_OUT"; N_VIOL=$?
cat "$CHECK_OUT"
N_SCAN="$(scan "$ROOT" | grep -cF 'cargo install')"
echo " 分母(活码内 cargo install 之处数)= $N_SCAN"
echo " 违规处数 = $N_VIOL"
RC=0
if [ "$N_VIOL" -eq 0 ] && [ "$N_SCAN" -ge 1 ]; then
echo "[tool-pins] PASS 判据①②($N_SCAN 处皆带精确 --version)"
else
[ "$N_SCAN" -lt 1 ] && echo "[tool-pins] FAIL 判据①: 分母 = 0 ⇒ 谓词【恒真】之险(域内无 cargo install 可判)" >&2
[ "$N_VIOL" -gt 0 ] && echo "[tool-pins] FAIL 判据①②: $N_VIOL 处违规(上列具名)" >&2
RC=1
fi
echo
echo "-- 判据③ 对照(仓外副本 · 先归一为【全钉形】⇒ 与现面形无关)"
TMPD="$(mktemp -d)"; trap 'rm -f "$CHECK_OUT"; rm -rf "$TMPD"' EXIT
mkdir -p "$TMPD/base" && cp -a "$ROOT/.xuanwu" "$TMPD/base/.xuanwu"
while IFS= read -r f; do
sed -i -E -e 's/(cargo install +[A-Za-z0-9_-]+)( +--version +[^ ]+)?/\1/g' \
-e 's/(cargo install +[A-Za-z0-9_-]+)/\1 --version 9.9.9/g' "$f"
done < <(find "$TMPD/base/.xuanwu" -type f ! -name '*.md')
audit "$TMPD/base" >/dev/null 2>&1; N_FIXED=$?
if [ "$N_FIXED" -eq 0 ]; then
echo " 对照甲(全钉形)⇒ 违规 0 ✓(谓词能绿)"
else
echo " 对照甲(全钉形)⇒ 违规 $N_FIXED ✗ —— 谓词【恒红】之险(全钉形亦不绿)" >&2
audit "$TMPD/base" >&2; RC=1
fi
cp -a "$TMPD/base" "$TMPD/red" && cp -a "$TMPD/base" "$TMPD/rng"
FIRST_OF() { grep -rlE -- '--version +[0-9]' "$1/.xuanwu" 2>/dev/null | sort | head -1; }
F_B="$(FIRST_OF "$TMPD/red")"; F_C="$(FIRST_OF "$TMPD/rng")"
if [ -z "$F_B" ] || [ -z "$F_C" ]; then
echo " ✗ 乙/丙 不可造: 全钉形内无钉可撤/可改 ⇒ **记 CTL**(★ 非绿 · 非静默)" >&2
RC=1
else
sed -i -E '0,/ --version +[0-9][^ ]*/s// /' "$F_B"
audit "$TMPD/red" >/dev/null 2>&1; N_FLIP=$?
if [ "$N_FLIP" -ge 1 ]; then
echo " 对照乙(撤一处钉)⇒ 违规 $N_FLIP ✓(谓词能红 · 翻转得证)"
audit "$TMPD/red" | sed 's/^/ /'
else
echo " 对照乙(撤一处钉)⇒ 违规 0 ✗ —— 谓词【恒绿】之险(撤一处竟不红 = 零证力)" >&2
RC=1
fi
sed -i -E '0,/ --version +[0-9][^ ]*/s// --version "^9.9"/' "$F_C"
audit "$TMPD/rng" >/dev/null 2>&1; N_RANGE=$?
if [ "$N_RANGE" -ge 1 ]; then
echo " 对照丙(范围钉 ^9.9)⇒ 违规 $N_RANGE ✓(判据② 有判别力)"
else
echo " 对照丙(范围钉 ^9.9)⇒ 违规 0 ✗ —— 判据② 无判别力(范围钉竟绿)" >&2
RC=1
fi
fi
rm -rf "$TMPD"
echo
echo "== 判据(★ 唯载【不变量】· 读数唯见上列各行 · 禁由本块推)=="
echo " · 判据① = 活码内 cargo install 之处数【= 0】;"
echo " · 判据② = --version 之值形为 \`X.Y.Z\`(可 = 前缀 / 预发布尾缀);"
echo " · 判据③ = 器须【能绿】(**全钉形**)∧【能红】(撤一处钉 / 范围钉); ★ 对照造法**先归一** ⇒ 与现面形无关;"
echo " · 域 = .xuanwu/** 活码(剔整行注释 ∧ 剔 *.md)· 续行先拼接;"
echo " · 本器【不】判「钉值是否等于某权威源」—— 该面须另有权威表(现无 ⇒ 不判 · 照实)。"
exit "$RC"