feat(info): show the install reason and drop the indentation
N? and `info PKG` now print three lines, none indented:
PKG: <description>
reason: explicitly installed | installed as a dependency | unknown | not installed
required by: <installed dependents, comma separated> | nothing
The reason comes from a new <be>_reason backend function: apt-mark
showauto / showmanual (dpkg decides for a package in neither list), the
Install Reason of pacman -Qi, dnf repoquery --installed %{reason} (dnf4
and dnf5 words) and the Installed line of zypper info (rpm plus libzypp's
AutoInstalled when zypper is locked). A row whose old version is "-" is
not installed and the backend is not asked. The "(installed)" qualifier
moves to --help, README and DESIGN.
The rpm E2E fixture and e2e_reset now also mark su-dummy-a and su-dummy-c
as user-installed on dnf, which records plain rpm installs as "unknown",
so 1? and 2? show both reasons on all 12 distros. The verified commands
are recorded in discovery/{apt,pacman,rpm}.md.
This commit is contained in:
1 parent
1354db6c39
commit
71d7f87aa3
21 files changed
+589
-48
No files matched your search
@@ -5,7 +5,9 @@
|
||||
# fake dnf (unit tests). FAKE_DNF_MAJOR=4|5 picks the output dialect; FAKE_DNF_CHECK_RC=0|1 simulates
|
||||
# "no updates" / an error; FAKE_DNF_CHECK=obsoletes replays a check-update with only an
|
||||
# "Obsoleting Packages" section; FAKE_DNF_REMOVE_REFUSE=1 makes `--assumeno remove` fail;
|
||||
# removal tables: see the --assumeno remove branch.
|
||||
# removal tables: see the --assumeno remove branch. `repoquery --installed --qf %{reason}`: REASON of
|
||||
# data/rpm/db.bash (dnf5's words with FAKE_DNF_MAJOR=5), FAKE_DNF_REASON="pkg=raw value" overrides
|
||||
# it, FAKE_DNF_REPOQUERY_RC=N makes repoquery fail.
|
||||
# shellcheck source=../fakelib.bash
|
||||
. "${BASH_SOURCE[0]%/*}/../fakelib.bash"
|
||||
# shellcheck source=../../data/rpm/db.bash
|
||||
@@ -41,7 +43,28 @@ case " $* " in
|
||||
;;
|
||||
*' repoquery '*)
|
||||
p=${pos[-1]}
|
||||
rc=$(fake_rc FAKE_DNF_REPOQUERY_RC 0)
|
||||
if ((rc)); then
|
||||
echo "Error: rpmdb open failed" >&2
|
||||
exit "$rc"
|
||||
fi
|
||||
case " $* " in
|
||||
*' --installed '*'%{reason}'*)
|
||||
installed "$p" || exit 0
|
||||
r=${REASON[$p]:-unknown}
|
||||
if ((major == 5)); then
|
||||
case $r in
|
||||
user) r=User ;;
|
||||
dependency) r=Dependency ;;
|
||||
weak-dependency) r='Weak Dependency' ;;
|
||||
group) r=Group ;;
|
||||
unknown) r='External User' ;;
|
||||
esac
|
||||
fi
|
||||
[[ ${FAKE_DNF_REASON:-} != "$p="* ]] || r=${FAKE_DNF_REASON#*=}
|
||||
printf '%s\n' "$r"
|
||||
((major == 5)) || echo
|
||||
;;
|
||||
*' --upgrades '*) case $p in su-dummy-[abc]) printf 'skeptical-updater dummy %s (v2.0)\n' "$p"; ((major == 5)) || echo ;; esac ;;
|
||||
*) case $p in su-dummy-new) printf 'skeptical-updater dummy su-dummy-new (v1.0)\n' ;; esac ;;
|
||||
esac
|
||||
|
||||
Reference in new issue
Block a user