diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-24 21:36:34 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-24 21:36:34 +0300 |
| commit | a79e7d77cc6717f6c5bfaaefa5361f396c322de3 (patch) | |
| tree | 1787b7d87a95f9b2a99626837f9b988dd5ee7f9a | |
| parent | fe89919d47296844364323e5b1dd9ce25511f3dd (diff) | |
Fix TARBALL_INCLUDE config default drift (7r0, scoped down)
apply_config_defaults fell back to TARBALL_INCLUDE=no while the user-facing
src/shuriken.default.conf documents (and --init writes) TARBALL_INCLUDE=yes.
The two disagreed, so an album generated from a config that omitted the key
silently dropped the tarball despite the documented default saying otherwise.
'yes' is the authoritative default: the original definition was
`declare -r TARBALL_INCLUDE=yes` (tarball inclusion was on from the start);
the ':-no' fallback was introduced later during a refactor and drifted from
the documented intent. Align apply_config_defaults to ':-yes' and add a
comment explaining the invariant and the history.
Tests: add test_tarball_include_default_matches_init_config asserting the
effective default agrees between a fresh --init config and apply_config_defaults
(and is 'yes'); update the omitted-runtime-defaults --print-config expectation
to the corrected 'yes'. bin/shuriken regenerated via just build.
This is the scoped-down drift fix only. The full CONFIG_SPECS registry plus
cfg_get/SHURIKEN_CFG access-layer rewrite proposed in 7r0 remains DEFERRED.
just test, just shellcheck, just check-generated and git diff --check all pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
| -rwxr-xr-x | bin/shuriken | 6 | ||||
| -rw-r--r-- | src/lib/config.source.sh | 6 | ||||
| -rwxr-xr-x | tests/cli.sh | 44 |
3 files changed, 53 insertions, 3 deletions
diff --git a/bin/shuriken b/bin/shuriken index 30cfa56..280d8b6 100755 --- a/bin/shuriken +++ b/bin/shuriken @@ -4977,7 +4977,11 @@ apply_config_defaults() { THUMB_SUBDIVIDE_PERCENT="${THUMB_SUBDIVIDE_PERCENT:-30}" THUMB_FEATURE_PERCENT="${THUMB_FEATURE_PERCENT:-10}" SYNC_DELETE="${SYNC_DELETE:-yes}" - TARBALL_INCLUDE="${TARBALL_INCLUDE:-no}" + # Default 'yes': a tarball of the incoming dir is included in the dist unless + # disabled. This must match the documented default in shuriken.default.conf + # (TARBALL_INCLUDE=yes) -- it previously drifted to 'no' here. 'yes' is the + # original, authoritative default (tarball inclusion was on from the start). + TARBALL_INCLUDE="${TARBALL_INCLUDE:-yes}" TARBALL_SUFFIX="${TARBALL_SUFFIX:-.tar}" TAR_TIMEOUT="${TAR_TIMEOUT:-120}" if ! declare -p TAR_OPTS >/dev/null 2>&1; then diff --git a/src/lib/config.source.sh b/src/lib/config.source.sh index 67ddade..9dd48ee 100644 --- a/src/lib/config.source.sh +++ b/src/lib/config.source.sh @@ -52,7 +52,11 @@ apply_config_defaults() { THUMB_SUBDIVIDE_PERCENT="${THUMB_SUBDIVIDE_PERCENT:-30}" THUMB_FEATURE_PERCENT="${THUMB_FEATURE_PERCENT:-10}" SYNC_DELETE="${SYNC_DELETE:-yes}" - TARBALL_INCLUDE="${TARBALL_INCLUDE:-no}" + # Default 'yes': a tarball of the incoming dir is included in the dist unless + # disabled. This must match the documented default in shuriken.default.conf + # (TARBALL_INCLUDE=yes) -- it previously drifted to 'no' here. 'yes' is the + # original, authoritative default (tarball inclusion was on from the start). + TARBALL_INCLUDE="${TARBALL_INCLUDE:-yes}" TARBALL_SUFFIX="${TARBALL_SUFFIX:-.tar}" TAR_TIMEOUT="${TAR_TIMEOUT:-120}" if ! declare -p TAR_OPTS >/dev/null 2>&1; then diff --git a/tests/cli.sh b/tests/cli.sh index eae2f19..5d69684 100755 --- a/tests/cli.sh +++ b/tests/cli.sh @@ -251,6 +251,45 @@ test_init_existing_config_fails_without_overwrite() { test::teardown } +# Guards against config DEFAULT DRIFT for TARBALL_INCLUDE: its documented default +# in shuriken.default.conf (written verbatim by --init) MUST agree with the +# fallback applied by apply_config_defaults when the key is unset. These two +# previously disagreed ('yes' in the conf vs 'no' in apply_config_defaults); the +# authoritative default is 'yes' (tarball inclusion has been on since the start). +test_tarball_include_default_matches_init_config() { + local init_default + local applied_default + + test::setup + + # Value a fresh --init config gives the user (the documented default). + ( + cd "$TEST_TMPDIR" + SHURIKEN_DEFAULT_RC="$TEST_TMPDIR/missing" \ + "$TEST_SHURIKEN" --init >/dev/null + ) + init_default=$( + set -euo pipefail + # shellcheck disable=SC1090,SC1091 + source "$TEST_TMPDIR/shuriken.conf" + printf '%s\n' "$TARBALL_INCLUDE" + ) + + # Value apply_config_defaults falls back to when the key is left unset. + applied_default=$( + set -euo pipefail + # shellcheck source=/dev/null + source <(sed '$d' "$TEST_SHURIKEN") + unset -v TARBALL_INCLUDE || true + apply_config_defaults + printf '%s\n' "$TARBALL_INCLUDE" + ) + + test "$init_default" = "$applied_default" + test "$applied_default" = yes + test::teardown +} + test_just_install_and_deinstall_with_destdir() { local stage_dir @@ -1499,7 +1538,7 @@ RANDOM_SEED='' SHUFFLE=no SPLASH_PAGE=yes STATS_PAGE=no -TARBALL_INCLUDE=no +TARBALL_INCLUDE=yes TARBALL_SUFFIX=.tar TAR_TIMEOUT=120 TAR_OPTS=( -c ) @@ -6466,6 +6505,9 @@ main() { '--init refuses existing config without overwrite' \ test_init_existing_config_fails_without_overwrite test::run_case \ + 'TARBALL_INCLUDE default matches between --init config and apply_config_defaults' \ + test_tarball_include_default_matches_init_config + test::run_case \ 'just install and deinstall supports DESTDIR' \ test_just_install_and_deinstall_with_destdir test::run_case '--clean succeeds' test_clean |
