From 2ec3a89555409b43b35a2d5a8f161c41c1a993d9 Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Wed, 14 Mar 2018 14:52:57 +0000 Subject: [PATCH setup] Remove packages not found by scan from solver Remove (not installed) packages not found by scan from solver, as well as from packagemeta, to avoid solutions including them from being proposed. Signed-off-by: Jon Turney --- libsolv.cc | 10 ++++++++++ libsolv.h | 2 ++ package_meta.cc | 3 +++ 3 files changed, 15 insertions(+) diff --git a/libsolv.cc b/libsolv.cc index 674d576..fc4e5ec 100644 --- a/libsolv.cc +++ b/libsolv.cc @@ -304,6 +304,16 @@ SolvableVersion::compareVersions(const SolvableVersion &a, return pool_evrcmp(pool, evra, evrb, EVRCMP_COMPARE); } +void +SolvableVersion::remove() const +{ + if (!id) + return; + + Solvable *solvable = pool_id2solvable(pool, id); + repo_free_solvable(solvable->repo, id, 0); +} + // --------------------------------------------------------------------------- // implements class SolverPool // diff --git a/libsolv.h b/libsolv.h index fc68895..7bb0be2 100644 --- a/libsolv.h +++ b/libsolv.h @@ -88,6 +88,8 @@ class SolvableVersion bool operator > (SolvableVersion const &) const; bool operator >= (SolvableVersion const &) const; + void remove() const; + private: Id id; Pool *pool; diff --git a/package_meta.cc b/package_meta.cc index 8a33bcb..7f8110d 100644 --- a/package_meta.cc +++ b/package_meta.cc @@ -724,7 +724,10 @@ packagemeta::ScanDownloadedFiles (bool mirror_mode) pkg.curr = packageversion (); if (pkg.exp == *i) pkg.exp = packageversion (); + + i->remove(); pkg.versions.erase (i++); + /* For now, leave the source version alone */ } else -- 2.16.2