qget:
- Add QGET_TEST_MODE guard so the script can be sourced for unit
testing without executing the main logic
dh:
- Auto-detect getter tool (qget preferred, quickget fallback) in
set_variables(); export as GETTER
- Add getter_list_os() wrapper using GETTER --list for portable
OS enumeration
- Replace hard-coded quickget calls with $GETTER in
renew_supported_vms(), renew_ready_vms(), and execmd strings
- Fix releases/editions/description parsing (sed instead of cut -f2
which fails on colon-space separators)
- Add DH_TEST_MODE guard to prevent execution when sourcing for tests
action:
- Auto-detect getter tool at startup; export as GETTER
- Add --qget / -q and --quickget / -Q flags to override detection
tests/:
- tests/lib.sh: shared assert helpers (assert_eq, assert_ne,
assert_match, assert_cmd, assert_fn_exists) with pass/fail counting
- tests/test_dh.sh: 31 unit tests covering set_variables, GETTER,
getter_list_os, root_check, wayland_check, and all required
function definitions
- tests/test_qget.sh: 23 unit tests covering os_support,
test_result formatting, is_valid_language, check_hash, and all
utility functions
- tests/test_action_files.sh: 784 structural tests verifying every
action file has OSNAME, PRETTY, HOMEPAGE (valid URL), DESCRIPTION,
releases_() and get_() functions
- tests/run_tests.sh: top-level runner executing all three suites
https://claude.ai/code/session_01M2UXTtQwzcGCNRnFiP2efQ
- dh: fix comment with stray '#TODO' in desktop entry
- dh: fix silent unconditional exit bug in renew_ready() and
renew_ready_vms() (cd || echo; exit 1 → cd || { echo; exit 1; })
- dh: implement distrohopper_about() and help_show() using yad dialogs
- dh: fix renew_supported_vms() logic where execmd was never set when
editions existed and interminal=yes; separate terminal flag from
execmd assignment
- dh: detect available terminal emulator (sakura → xterm → x-terminal-emulator)
instead of hard-coding sakura
- actions/pclinuxos: fix URL variable used before definition in get_()
- actions/: add easyos, fedora, mageia, zorin from TODO/ (complete implementations)
https://claude.ai/code/session_01M2UXTtQwzcGCNRnFiP2efQ