Merge PR #290 (4fe8c0dc) into the 2026-09-24 integration wave

This commit is contained in:
Edward Langley
2026-09-24 02:44:20 -07:00
3 changed files with 46 additions and 5 deletions
+5 -5
View File
@@ -13,8 +13,8 @@ exit 0 every cited id is a ticket bd lists
exit 1 at least one cited id is not; each is printed
exit 3 bd could not answer: missing, failing, or listing nothing
exit 4 usage error, not inside a git repository, or a cited file
could not be read or is absent (only a file `git ls-files -d`
reports as deleted is skipped)
could not be read or is absent (only a file `git diff
--diff-filter=D` reports as deleted is skipped)
The comparison is POSITIVE: a cited id passes only by appearing in what
`bd list --all` returns. The recipe this replaced looked for bd's "not found"
@@ -43,13 +43,13 @@ top=$(git rev-parse --show-toplevel 2>/dev/null) || {
exit 4
}
cd "$top"
# A deleted tracked file is skipped ON PURPOSE: its ids are leaving the tree.
# Only `ls-files -d` says deleted; any other absent path is exit 4 (lqs0, tdfd).
# A deleted tracked file is skipped ON PURPOSE: its ids are leaving the tree. Only
# `diff --diff-filter=D` says deleted; any other absent path is exit 4 (tdfd, cota).
: > "$work/absent"
git ls-files -z --cached --others --exclude-standard -- "${ROOTS[@]}" |
while IFS= read -r -d '' f; do
if [ -e "$f" ] || [ -L "$f" ]; then printf '%s\0' "$f"
elif [ -z "$(git --literal-pathspecs ls-files -d -- "$f")" ]; then
elif [ -z "$(git --literal-pathspecs diff --name-only --diff-filter=D -- "$f")" ]; then
printf '%s\n' "$f" >> "$work/absent"
fi
done > "$work/files"
+12
View File
@@ -132,6 +132,18 @@ git -C "$r2" update-index --no-skip-worktree context/b.md
&& ok "a skip-worktree file missing from the tree is exit 4, and named" \
|| bad "a skip-worktree file missing from the tree is exit 4, and named" "exit $got: $(head -c 200 "$work/out")"
# ls-files -d DOES list an absent assume-unchanged path, yet status hides it and
# commit -a never records the deletion (improvise-cota).
git -C "$r2" update-index --assume-unchanged context/b.md
mv "$r2/context/b.md" "$work/b.md.away"
(cd "$r2" && "$AUDIT") > "$work/out" 2>&1
got=$?
mv "$work/b.md.away" "$r2/context/b.md"
git -C "$r2" update-index --no-assume-unchanged context/b.md
[ "$got" = 4 ] && grep -q 'context/b.md' "$work/out" \
&& ok "an assume-unchanged file missing from the tree is exit 4, and named" \
|| bad "an assume-unchanged file missing from the tree is exit 4, and named" "exit $got: $(head -c 200 "$work/out")"
mkdir -p "$work/not-a-repo"
(cd "$work/not-a-repo" && GIT_CEILING_DIRECTORIES="$work" "$AUDIT") > "$work/out" 2>&1
got=$?