diff options
| author | Julian Andres Klode <julian.klode@canonical.com> | 2025-03-12 20:21:42 +0100 |
|---|---|---|
| committer | Julian Andres Klode <julian.klode@canonical.com> | 2025-03-13 21:59:09 +0100 |
| commit | 8ae73d1e037a6b9cb258b1ca505abce5681d9931 (patch) | |
| tree | 181d99da8c0dbde0304ca57bd072143bbb97ef56 /apt-pkg | |
| parent | 1bc3055b737f2e9732a009026f4fe2a322ef7607 (diff) | |
solver3: Only hide ver->pkg clauses, not pkg->ver version selection ones
Particularly as Helmut pointed out we need to show which version we
selected for install if there is only one but there is a versioned
conflicts.
Reported-By: Helmut Grohne <helmut@subdivi.de> on IRC
Diffstat (limited to 'apt-pkg')
| -rw-r--r-- | apt-pkg/solver3.cc | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc index cebface27..4030b9de1 100644 --- a/apt-pkg/solver3.cc +++ b/apt-pkg/solver3.cc @@ -249,8 +249,17 @@ std::string APT::Solver::Clause::toString(pkgCache &cache, bool pretty) const out.append(" | "); } } - else if (group == Group::SelectVersion && negative) + else if (pretty && group == Group::SelectVersion && negative) out.append(" conflicts with other versions of itself"); + else if (pretty && group == Group::SelectVersion && reason.Pkg()) { + out.append(solutions.size() > 1 ? " is available in versions " : " is available in version "); + for (auto var : solutions) { + assert(var.Ver()); + if (var != solutions.front()) + out.append(", "); + out.append(var.Ver(cache).VerStr()); + } + } else { out.append(" -> "); @@ -349,8 +358,9 @@ std::string APT::Solver::LongWhyStr(Var var, bool decision, const Clause *rclaus } }; - // Version selection clauses like pkg=ver -> pkg or pkg -> pkg=ver are irrelevant for the user, skip them - if (decision && rclause && rclause->group == Group::SelectVersion) + // Inverse version selection clauses that select the package if the version is selected, + // such as pkg=ver -> pkg, are irrelevant for the user, skip them + if (var.Pkg() && decision && rclause && rclause->group == Group::SelectVersion) { var = rclause->reason; rclause = (*this)[var].reason; @@ -398,7 +408,7 @@ std::string APT::Solver::LongWhyStr(Var var, bool decision, const Clause *rclaus { auto const &state = (*this)[*it]; // Don't print version selection clauses - if (state.reason && state.reason->group == Group::SelectVersion) + if (it->Pkg() && state.reason && state.reason->group == Group::SelectVersion) { --i; continue; |
