diff options
| author | Danilo M. <danix@danix.xyz> | 2026-07-13 10:26:01 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-07-13 10:26:01 +0200 |
| commit | 368023455770538ad0f7568ee83cf4cef0a4eabc (patch) | |
| tree | e2c5adabee31da3333666b176b33ffc106644906 /.extras | |
| parent | b8281632a92d3b85db0beab8f43022180000720d (diff) | |
| download | sbo-slackbuilds-368023455770538ad0f7568ee83cf4cef0a4eabc.tar.gz sbo-slackbuilds-368023455770538ad0f7568ee83cf4cef0a4eabc.zip | |
test-build: current-vs-stable override engine
Diffstat (limited to '.extras')
| -rw-r--r-- | .extras/overrides.example | 13 | ||||
| -rwxr-xr-x | .extras/test-build | 60 | ||||
| -rw-r--r-- | .extras/test-logic.sh | 37 |
3 files changed, 110 insertions, 0 deletions
diff --git a/.extras/overrides.example b/.extras/overrides.example new file mode 100644 index 0000000..706d6ea --- /dev/null +++ b/.extras/overrides.example @@ -0,0 +1,13 @@ +# current-vs-stable dep overrides for test-build. +# Copy to ~/.config/sbo-testbuild/overrides and edit. Applied only when +# targeting -current (15.0 is the SBo baseline). One rule per line. +# +# drop: <prog> dep is in 15.0 but already in the -current base +# rename: <old> -> <new> dep was renamed on -current +# fetch: <prog> dep was removed from the -current tree; pull via sbopkg +# +# Start light: add rules only when a real package needs them. + +# drop: rust +# rename: python3-foo -> foo +# fetch: somelib diff --git a/.extras/test-build b/.extras/test-build index fa24fa6..a7e796e 100755 --- a/.extras/test-build +++ b/.extras/test-build @@ -178,6 +178,7 @@ declare -A UNMET=() declare -a CYCLES=() declare -A HAS_README=() declare -A _vstate=() +declare -A FETCH_DEPS=() # prog -> 1: resolve via sbopkg in-container # Is a prog already present in the container base? Overridden at build time to # consult the image; in resolution we treat "in base" as a callback so the pure @@ -203,6 +204,11 @@ _resolve_visit() { HAS_README["$dir"]=1 continue fi + tok="$(apply_rename "$tok")" + if [[ "${OV_FETCH[$tok]:-}" == "1" ]]; then + FETCH_DEPS["$tok"]=1 + continue + fi if depdir="$(find_slackbuild_dir "$tok")"; then _resolve_visit "$depdir" "$key" || rc=1 elif installed_in_base "$tok"; then @@ -223,15 +229,69 @@ resolve_target() { RESOLVED_ORDER=() CYCLES=() UNMET=() + FETCH_DEPS=() _vstate=() _resolve_visit "$dir" "(top)" } +# ============================================================================= +# current-vs-stable overrides. Parsed from $TB_OVERRIDES. Applied only when +# targeting -current (15.0 is the SBo baseline, no deltas). +# ============================================================================= +declare -A OV_DROP=() # prog -> 1 +declare -A OV_RENAME=() # old -> new +declare -A OV_FETCH=() # prog -> 1 + +load_overrides() { + OV_DROP=(); OV_RENAME=(); OV_FETCH=() + # 15.0 is the baseline: no overrides. + [[ "$VERSION_ID" == "15.0" ]] && return + [[ -f "$TB_OVERRIDES" ]] || return + local line kind rest + while IFS= read -r line; do + line="${line%%#*}" # strip comments + line="${line#"${line%%[![:space:]]*}"}" # ltrim + [[ -z "$line" ]] && continue + kind="${line%%:*}"; rest="${line#*:}" + kind="${kind//[[:space:]]/}" + rest="${rest#"${rest%%[![:space:]]*}"}" # ltrim value + case "$kind" in + drop) OV_DROP["${rest//[[:space:]]/}"]=1 ;; + fetch) OV_FETCH["${rest//[[:space:]]/}"]=1 ;; + rename) + # rest is "old -> new" + local old new + old="${rest%%->*}"; new="${rest##*->}" + old="${old//[[:space:]]/}"; new="${new//[[:space:]]/}" + [[ -n "$old" && -n "$new" ]] && OV_RENAME["$old"]="$new" ;; + *) echo "WARN: unknown override rule: $line" >&2 ;; + esac + done < "$TB_OVERRIDES" +} + +# Map a dep token through rename rules (identity if no rule). +apply_rename() { + local tok="$1" + echo "${OV_RENAME[$tok]:-$tok}" +} + +# Remove dropped packages from RESOLVED_ORDER in place. +apply_overrides_to_order() { + local d prog keep=() + for d in "${RESOLVED_ORDER[@]}"; do + prog="$(basename "$d")" + [[ "${OV_DROP[$prog]:-}" == "1" ]] && continue + keep+=("$d") + done + RESOLVED_ORDER=("${keep[@]:-}") +} + main() { parse_args "$@" init_color require_config SBO_TREE_ROOTS=("$ACTIVE_TREE") + load_overrides } main "$@" diff --git a/.extras/test-logic.sh b/.extras/test-logic.sh index 027fdb9..e48586e 100644 --- a/.extras/test-logic.sh +++ b/.extras/test-logic.sh @@ -70,6 +70,43 @@ resolve_target "$T/cat/d" resolve_target "$T/cat/e" [[ ${#CYCLES[@]} -ge 1 ]] && ok "cycle caught" || bad "cycle missed" +# --- overrides -------------------------------------------------------------- +VERSION_ID="current" # reset: left at 15.0 by the version-selection checks above +OV=$(mktemp) +cat > "$OV" <<'EOF' +# comment ignored +drop: dropme +rename: oldname -> newname +fetch: fetchme +EOF +TB_OVERRIDES="$OV" +load_overrides + +[[ "${OV_DROP[dropme]:-}" == "1" ]] && ok "override drop parsed" || bad "drop not parsed" +[[ "${OV_RENAME[oldname]:-}" == "newname" ]] && ok "override rename parsed" || bad "rename not parsed" +[[ "${OV_FETCH[fetchme]:-}" == "1" ]] && ok "override fetch parsed" || bad "fetch not parsed" + +# rename maps a token +[[ "$(apply_rename oldname)" == "newname" ]] && ok "apply_rename maps" || bad "apply_rename wrong: [$(apply_rename oldname)]" +[[ "$(apply_rename untouched)" == "untouched" ]] && ok "apply_rename passthrough" || bad "apply_rename mangled untouched" + +# drop filters the order (build a fake order of dirs; dropme is removed) +mk dropme "" +mk keepme "" +RESOLVED_ORDER=("$T/cat/dropme" "$T/cat/keepme") +apply_overrides_to_order +kept=""; for x in "${RESOLVED_ORDER[@]}"; do kept+="$(basename "$x") "; done +kept="${kept% }" +[[ "$kept" == "keepme" ]] && ok "drop removes from order" || bad "drop failed, order=[$kept]" +rm -f "$OV" + +# overrides only apply on current; on 15.0 they are a no-op +VERSION_ID="15.0" +TB_OVERRIDES="$OV" # file gone; must not error, must clear maps +load_overrides +[[ ${#OV_DROP[@]} -eq 0 ]] && ok "overrides inert on 15.0" || bad "overrides applied on 15.0" +VERSION_ID="current" + echo echo "$pass passed, $fail failed" [[ $fail -eq 0 ]] || exit 1 |
