diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-27 10:52:37 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-27 10:52:37 +0300 |
| commit | 1d6a00fd71cb8ea093da2f217f1724f4d5df1c85 (patch) | |
| tree | 08afaa1a82801d46f3b510f156f2e5726015cbeb /tests | |
| parent | bde6e6d0f5910477c2d47f1bc3a28b39b6c7f3da (diff) | |
Fix src/shuriken.sh lib source list missing 5 modules
Running `bash src/shuriken.sh --generate ...` directly from a source
checkout printed "command not found" for camera_label_from_make_model,
photo_exif_values_to and cached_photo_identify_output for every photo,
silently emptying EXIF tooltips/details and, with STATS_PAGE=yes,
omitting the whole stats/ tree. The hand-maintained source list inside
the SHURIKEN_LIB_SOURCES_BEGIN/END marker block had drifted from the
authoritative Justfile LIB_SOURCES, missing metadata-label,
metadata-cache, stats-aggregate, stats-render and stats-filter-album.
`just build` replaces the marker block with LIB_SOURCES when generating
bin/shuriken, so the installed binary and the bin-based test suite never
noticed; only direct src execution was affected.
- Add the 5 missing `source` lines to the marker block in the same order
as Justfile LIB_SOURCES, so the two lists now match exactly.
- Add tests/cli.sh case test_lib_sources_match_justfile_lib_sources that
extracts the marker-block module names and asserts they equal the
Justfile LIB_SOURCES (same set and order) to prevent future drift.
- shellcheck --check-sourced now follows the 5 newly-sourced libs;
suppress the cross-module nameref false positives (SC2178/SC2128/
SC2154) with explained directives and genuinely fix SC2004
(counts_ref[$key] -> [key]) and quote the TITLE default (${TITLE:-}).
bin/shuriken changes only by these propagated lib edits; the marker-block
source list it generates is unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/cli.sh | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/cli.sh b/tests/cli.sh index 3ce8939..28aacbb 100755 --- a/tests/cli.sh +++ b/tests/cli.sh @@ -6701,6 +6701,59 @@ test_camera_label_from_make_model() { _assert_camera_label 'canon Canon EOS 5D' 'canon' 'Canon EOS 5D' } +# Guards against drift between the hand-maintained 'source ...' lines inside the +# SHURIKEN_LIB_SOURCES_BEGIN/END marker block of src/shuriken.sh and the +# authoritative Justfile LIB_SOURCES list. 'just build' regenerates bin/shuriken +# by replacing that marker block with LIB_SOURCES, so the installed bin/ never +# reveals divergence; only direct execution of src/shuriken.sh sources the +# hand-maintained list. This test asserts both lists carry the same module names +# in the same order, so a missing or misordered source line fails CI. +test_lib_sources_match_justfile_lib_sources() { + local src_modules justfile_modules + + # Module basenames from the marker block in src/shuriken.sh, in file order. + src_modules=$( + awk ' + /# SHURIKEN_LIB_SOURCES_BEGIN/ { inside = 1; next } + /# SHURIKEN_LIB_SOURCES_END/ { inside = 0 } + inside && /^source / { + line = $0 + sub(/.*\/lib\//, "", line) + sub(/".*/, "", line) + print line + } + ' "$TEST_REPO_ROOT/src/shuriken.sh" + ) + + # Module basenames from the Justfile LIB_SOURCES assignment, in list order. + justfile_modules=$( + awk ' + /^LIB_SOURCES :=/ { + n = split($0, parts, /"/) + list = parts[2] + m = split(list, words, /[ \t]+/) + for (i = 1; i <= m; i++) { + word = words[i] + if (word == "") continue + sub(/.*\/lib\//, "", word) + print word + } + exit + } + ' "$TEST_REPO_ROOT/Justfile" + ) + + if [ "$src_modules" != "$justfile_modules" ]; then + echo 'FAIL: src/shuriken.sh lib source list diverged from Justfile LIB_SOURCES' >&2 + echo '--- src/shuriken.sh marker block ---' >&2 + echo "$src_modules" >&2 + echo '--- Justfile LIB_SOURCES ---' >&2 + echo "$justfile_modules" >&2 + diff <(echo "$src_modules") <(echo "$justfile_modules") >&2 || true + exit 1 + fi +} + main() { trap test::teardown EXIT @@ -7119,6 +7172,9 @@ main() { test::run_case \ 'GNU-tool guard rejects non-GNU stat' \ test_gnu_tool_guard_rejects_non_gnu_stat + test::run_case \ + 'src/shuriken.sh lib source list matches Justfile LIB_SOURCES' \ + test_lib_sources_match_justfile_lib_sources } main "$@" |
