-
Sudo/Privilege Enforcement
- Expanded NEEDS_ROOT_OPS to cover all
mutating ops (install, uninstall,
remove, upgrade, dist-upgrade,
reinstall, purge, autoremove, reset,
sync) - Made _escalate_if_needed hard-refuse (
exit 1) when no escalator available
instead of continuing unprivileged - Verified needs_privileges() coverage
for every operation
- Progress Bar
- Rewrote Progress class in
dpms_progress.py — self-drawn bar with
TTY inline redraw and non-TTY fallback
(one line per 25% + final done line) - Fixed download_file callback contract (
_on_chunk(delta, size) — 2 args) - Updated dpms_parallel.py docstrings
- Bug Fixes in dpms_core.py
- Arch guard bypass — local-file/URL
installs now check architecture, not
just repo path - Source-tree dump guard —
_STANDARD_INSTALL_DIRS set rejects non-
standard tarball layouts (prevented
atk-style incident) - Symlink-parent escape guard —
_check_symlink_parent() +
created_links tracking prevents writes
through previously-created absolute
symlinks - _install_from_archive delegation — was
a weaker duplicate bypassing all
safety; now delegates to
install_package - Downgrade arch filter — skips foreign-
arch candidates instead of accepting
any - FilterError wrapping — tarfile filter
errors now raise ArchiveError - Partial archive cleanup — failed
downloads remove temp files from ~/
dpms_temp
- Expanded NEEDS_ROOT_OPS to cover all
-
Interactive Prompt Fixes
- purge_package — added noconfirm
parameter to skip confirmation - clean_orphaned — added noconfirm
parameter to skip confirmation - --uninstall non-installed — early exit
with clean error instead of going to
interactive solver - --search --regex — errors cleanly when
no search term provided instead of
launching interactive TUI
- purge_package — added noconfirm
-
Performance Optimizations (~63%
faster startup)- Deferred dlr.http (~110ms compiled C
module) — lazy import in
_stream_download and
_fetch_content_length - Lazy proxy imports in main() — 13
subcommand-only modules (dpms_commit,
dpms_logs, dpms_search, dpms_systemd,
dpms_utils, dpms_plugins, dpms_signing,
dpms_groups, dpms_portcommit,
dpms_config_preserve, dpms_cache,
CommitPolicy, confirm_delete,
ProgressStages) via _LazyModule/
_LazyCallable proxies - Deferred rich.progress in dpms_core —
BarColumn, Progress, TextColumn,
TimeRemainingColumn only imported
inside compress functions - Deferred hooks_mod, CustomProgress,
confirm_delete — only imported inside
install/uninstall/purge/clean functions - Result: warm --list dropped from ~1.
88s → ~0.7s
- Deferred dlr.http (~110ms compiled C