mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 22:34:02 +01:00
Two levels of pure taxonomy carrying no information, and a 2-directory
cap leaves no room for them. Categories now sit directly under
linux_configuration/: features, fixes, utils, misc, fresh-install,
installers, diagnostics, gaming, boot_recovery, periodic_background, lib,
meta, tests. A script's own lib/ and tests/ are exempt from the cap, so
those stay put.
Depth violations 248 -> 139; roughly 40 of the remainder are inside
digital_wellbeing and hosts, deferred until the guard-lib repoint.
The moves are the easy half. What breaks is every path that counted
levels, and three classes of it had to be found by resolving paths rather
than reading diffs:
- 52 relative `source` lines for lib/common.sh and lib/android.sh. The
correct prefix differs per file: 40 were ../../ and 12 were ../../../,
so a blanket replace would have fixed one set and broken the other.
- REPO_ROOT in 7 fixes/lib/tests harnesses and setup_syncyomi_guard.sh,
each walking up four levels from a directory now two levels shallower.
This caused a real regression -- the fixes suite went red with
"log_warn: command not found" -- caught by running it and comparing
against the pre-move baseline worktree.
- conftest.py's sys.path entries, which took the pytest gate down with
14 collection errors, and the `# shellcheck source=` directives, which
took shellcheck down with SC1091.
16 symlinks in $HOME broke, including the entire i3blocks bar. All
repointed, and cpu_monitor/memory/disk/time/volume were run to confirm
they emit real output rather than merely resolving.
Verified: 1798 tests pass at 100% coverage, 8 of 9 lib/tests suites pass
(the ninth needs the coverage jail, identically at baseline), pre-commit
is clean, and the two untracked secret configs are still ignored after
their gitignore paths changed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
67 lines
2.5 KiB
Bash
Executable File
67 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# lib/tests/lib_test_path.sh — _t_hide and the shim farm it builds.
|
|
#
|
|
# Split out of lib_test_core.sh on 2026-08-23 to hold both files under the
|
|
# repo's 250-line cap. Sourced by lib_test_core.sh, not directly by tests.
|
|
set -uo pipefail
|
|
|
|
# _t_hide TOOL... — make TOOL genuinely unfindable, so has_cmd/command -v
|
|
# report it absent.
|
|
#
|
|
# A prepended stub dir cannot do this: every tool these libs probe for
|
|
# (usbreset, pactl, wpctl) really exists on an Arch desktop, so PATH has to
|
|
# stop resolving it. Dropping PATH to $FAKE_BIN alone is NOT the answer
|
|
# either -- that also hides grep, head, awk and sort, which these libs use
|
|
# on the very branch under test, turning a "not installed" case into a
|
|
# cascade of "command not found".
|
|
#
|
|
# Instead a shim dir is built containing a symlink to every real executable
|
|
# on PATH EXCEPT the hidden ones, and PATH is pointed at it.
|
|
_t_hide() {
|
|
# Keyed by the tool list and reused, and deliberately cached OUTSIDE
|
|
# $TEST_TMPDIR so the farm survives across test files: each file gets a
|
|
# fresh tmpdir, so a per-file cache rebuilt the farm ~16 times per run.
|
|
# The farm holds a symlink per executable on PATH (~13.5k on this host)
|
|
# and costs ~4.6s to build, which was the single largest cost in the
|
|
# suite. Its contents are a pure function of the tool list and
|
|
# $LIB_TEST_ORIG_PATH, so sharing it changes no behaviour.
|
|
#
|
|
# $LIB_TEST_HIDE_CACHE is set by run_all.sh for a whole-suite run and
|
|
# falls back to the per-file tmpdir when a test file is run on its own.
|
|
local key="${*}"
|
|
local hide_dir="${LIB_TEST_HIDE_CACHE:-${TEST_TMPDIR}/hidden_path}/${key// /_}"
|
|
if [[ -d "$hide_dir" ]]; then
|
|
PATH="${FAKE_BIN}:${hide_dir}"
|
|
hash -r
|
|
return 0
|
|
fi
|
|
# Build the FULL farm once, then copy it per tool set and delete just the
|
|
# hidden names. Walking PATH and creating ~13.5k symlinks is the whole
|
|
# cost; `cp -al` hard-links the symlinks instead of recreating them, which
|
|
# turns each additional tool set from seconds into milliseconds.
|
|
local full="${LIB_TEST_HIDE_CACHE:-${TEST_TMPDIR}/hidden_path}/__all"
|
|
if [[ ! -d "$full" ]]; then
|
|
mkdir -p "$full"
|
|
local dir entry name
|
|
local IFS=':'
|
|
for dir in ${LIB_TEST_ORIG_PATH}; do
|
|
[[ -d "$dir" ]] || continue
|
|
for entry in "$dir"/*; do
|
|
name="${entry##*/}"
|
|
[[ -x "$entry" && ! -d "$entry" ]] || continue
|
|
[[ -e "${full}/${name}" ]] && continue
|
|
ln -s "$entry" "${full}/${name}" 2>/dev/null || true
|
|
done
|
|
done
|
|
fi
|
|
|
|
cp -al "$full" "$hide_dir"
|
|
local tool
|
|
for tool in "$@"; do
|
|
rm -f "${hide_dir}/${tool}"
|
|
done
|
|
|
|
PATH="${FAKE_BIN}:${hide_dir}"
|
|
hash -r
|
|
}
|