mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 20:47:09 +01:00
Keep going past a broken target, and run what is already built
Four follow-ups to the previous commit, three of them cases where the new runner still did the thing it was written to stop doing. A build that was already up to date ran nothing. `make` says "up to date" on the second invocation, no executable changes mtime, the before/after snapshot diff is empty -- and the runner printed a line and stopped, which is exactly the complaint that started this. It now falls back to running the executables that are there. Proved with a scratch course whose makefile has a real file target, because both make courses in this repo rebuild unconditionally and neither can reach the branch. One broken target aborted the rest. `run <dir> all` stopped at the first failure under set -e, so ELAC's second document was never attempted. Failures are collected per target and reported together at the end instead. An index was ignored when a course had one target: `run ECOAR 5` silently ran target 1. Selections are validated before the single-target shortcut now. And "ECOAR has 1 targets" read like a bug in the tool. That last fix then falsified a claim in TODO-refactor-remaining.md. It said ELAC's projectA and AIS's report/final/ver1 "fail with latexmk exit 12" and were broken documents. With build/ deleted first, both courses build every document and exit 0. The exit 12 reproduced once against pre-existing build state and never from clean; the note now says that, and says which part is inference rather than re-verified, because the original failing state is gone. All 44 probes still produce a byte-identical runnability-local.tsv. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
This commit is contained in:
parent
d5b94cd8a7
commit
42fa8228b0
@ -115,10 +115,15 @@ Two things surfaced on the way and are still true:
|
|||||||
readdir order any more. What is still open is that some of those documents
|
readdir order any more. What is still open is that some of those documents
|
||||||
are broken -- see below. MOM has three, ELAC two, AIS several drafts.
|
are broken -- see below. MOM has three, ELAC two, AIS several drafts.
|
||||||
Sorting looked like the fix until it swapped ELAC to `projectA` and AIS to
|
Sorting looked like the fix until it swapped ELAC to `projectA` and AIS to
|
||||||
`report/final/ver1`, **both of which fail with latexmk exit 12** -- so those
|
`report/final/ver1`, both of which then failed with latexmk exit 12.
|
||||||
documents are broken and sorting merely surfaced it. Either build every
|
**That claim did not survive re-testing on 2026-08-29.** With the build
|
||||||
document, or name one per course with `--entry`; either way the broken ones
|
directories deleted first, `./run.sh run NotProgramming/ELAC --batch` and
|
||||||
need looking at.
|
`./run.sh run Programming/AIS --batch` both build every document and exit 0.
|
||||||
|
The exit 12 reproduced once in this session against pre-existing `build/`
|
||||||
|
state and not once from clean, so the likeliest cause is stale artifacts
|
||||||
|
rather than a broken document -- but the original failing state is gone and
|
||||||
|
that is an inference, not something re-verified. If it comes back, delete
|
||||||
|
`build/` before concluding anything about the document.
|
||||||
- `unityhub --version` never returns on this machine, which is why `_works`
|
- `unityhub --version` never returns on this machine, which is why `_works`
|
||||||
carries a `timeout 5`. Use `_works` only for tools that answer `--version`;
|
carries a `timeout 5`. Use `_works` only for tools that answer `--version`;
|
||||||
`_have` is still right for the other ten probe call sites.
|
`_have` is still right for the other ten probe call sites.
|
||||||
|
|||||||
@ -67,10 +67,19 @@ _exec_new_binaries() {
|
|||||||
new_paths+=("$path")
|
new_paths+=("$path")
|
||||||
done < <(comm -13 <(printf '%s\n' "$before") <(printf '%s\n' "$after"))
|
done < <(comm -13 <(printf '%s\n' "$before") <(printf '%s\n' "$after"))
|
||||||
|
|
||||||
|
# Nothing new does not mean nothing to run: make says "up to date" on the
|
||||||
|
# second invocation, and running nothing then is the very complaint this
|
||||||
|
# file exists to fix. Fall back to whatever executables are there.
|
||||||
if [[ ${#new_paths[@]} -eq 0 ]]; then
|
if [[ ${#new_paths[@]} -eq 0 ]]; then
|
||||||
printf 'nothing new to run after %s (already built, or it produces no binary)\n' \
|
while IFS= read -r line; do
|
||||||
"$what"
|
[[ -n "$line" ]] || continue
|
||||||
return 0
|
new_paths+=("${line%%$'\t'*}")
|
||||||
|
done < <(printf '%s\n' "$after")
|
||||||
|
if [[ ${#new_paths[@]} -eq 0 ]]; then
|
||||||
|
printf 'nothing to run after %s (it produces no binary)\n' "$what"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
printf 'already up to date after %s; running what is there\n' "$what"
|
||||||
fi
|
fi
|
||||||
local exe
|
local exe
|
||||||
for exe in "${new_paths[@]}"; do
|
for exe in "${new_paths[@]}"; do
|
||||||
|
|||||||
@ -209,11 +209,20 @@ _run_selected() {
|
|||||||
_collect_targets
|
_collect_targets
|
||||||
_choose_target || return 1
|
_choose_target || return 1
|
||||||
|
|
||||||
local before after target
|
local before after target rc
|
||||||
|
local failed=()
|
||||||
before="$(_tree_state)"
|
before="$(_tree_state)"
|
||||||
for target in "${COURSE_CHOSEN[@]}"; do
|
for target in "${COURSE_CHOSEN[@]}"; do
|
||||||
COURSE_ENTRY="$target"
|
COURSE_ENTRY="$target"
|
||||||
_run
|
# One broken target must not hide the rest. ELAC and AIS each ship a
|
||||||
|
# document that fails to build, and aborting there meant their working
|
||||||
|
# reports were never attempted -- the old runner only looked fine
|
||||||
|
# because it built whichever one readdir happened to hand back first.
|
||||||
|
rc=0
|
||||||
|
_run || rc=$?
|
||||||
|
if [[ "$rc" -ne 0 ]]; then
|
||||||
|
failed+=("$(_target_label "$target") (exit $rc)")
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
after="$(_tree_state)"
|
after="$(_tree_state)"
|
||||||
if [[ "$before" != "$after" ]]; then
|
if [[ "$before" != "$after" ]]; then
|
||||||
@ -221,6 +230,12 @@ _run_selected() {
|
|||||||
diff <(printf '%s\n' "$before") <(printf '%s\n' "$after") >&2 || true
|
diff <(printf '%s\n' "$before") <(printf '%s\n' "$after") >&2 || true
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
if [[ ${#failed[@]} -gt 0 ]]; then
|
||||||
|
printf '\n%s of %s targets failed to build:\n' \
|
||||||
|
"${#failed[@]}" "${#COURSE_CHOSEN[@]}" >&2
|
||||||
|
printf ' %s\n' "${failed[@]}" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
if [[ "$COURSE_EXEC_FAILURES" -gt 0 ]]; then
|
if [[ "$COURSE_EXEC_FAILURES" -gt 0 ]]; then
|
||||||
printf '\n%s of the programs did not exit cleanly (see above)\n' \
|
printf '\n%s of the programs did not exit cleanly (see above)\n' \
|
||||||
"$COURSE_EXEC_FAILURES" >&2
|
"$COURSE_EXEC_FAILURES" >&2
|
||||||
|
|||||||
@ -98,7 +98,10 @@ _match_selection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_print_menu() {
|
_print_menu() {
|
||||||
printf '\n%s has %d targets:\n\n' "${COURSE_ROOT##*/}" "${#COURSE_TARGETS[@]}"
|
local plural="targets"
|
||||||
|
if [[ ${#COURSE_TARGETS[@]} -eq 1 ]]; then plural="target"; fi
|
||||||
|
printf '\n%s has %d %s:\n\n' \
|
||||||
|
"${COURSE_ROOT##*/}" "${#COURSE_TARGETS[@]}" "$plural"
|
||||||
local i=1 t marker
|
local i=1 t marker
|
||||||
for t in "${COURSE_TARGETS[@]}"; do
|
for t in "${COURSE_TARGETS[@]}"; do
|
||||||
marker=""
|
marker=""
|
||||||
@ -116,7 +119,10 @@ _choose_target() {
|
|||||||
COURSE_CHOSEN=()
|
COURSE_CHOSEN=()
|
||||||
local idx
|
local idx
|
||||||
|
|
||||||
if [[ ${#COURSE_TARGETS[@]} -eq 1 ]]; then
|
# A selection is validated even when there is only one target: silently
|
||||||
|
# running target 1 because you asked for target 5 is the same species of
|
||||||
|
# confusion as running something and not saying what.
|
||||||
|
if [[ ${#COURSE_TARGETS[@]} -eq 1 && -z "${COURSE_SELECT:-}" ]]; then
|
||||||
COURSE_CHOSEN=("${COURSE_TARGETS[@]}")
|
COURSE_CHOSEN=("${COURSE_TARGETS[@]}")
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user