Fix dependency lookup in Database::replacePackages()
This commit is contained in:
parent
5127ca351f
commit
7a8601010e
|
@ -204,7 +204,7 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
|||
const std::vector<std::shared_ptr<Package>> &newPackages, const DependencySet &removedProvides,
|
||||
const std::unordered_set<std::string_view> &depsToIgnore, const std::unordered_set<std::string_view> &libsToIgnore)
|
||||
{
|
||||
std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> unresolvedPackages;
|
||||
auto unresolvedPackages = std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies>();
|
||||
|
||||
// determine new provides
|
||||
DependencySet newProvides;
|
||||
|
@ -219,6 +219,16 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
|||
}
|
||||
}
|
||||
|
||||
// determine dependencies and "protected" database
|
||||
auto deps = std::vector<Database *>();
|
||||
const auto depOrder = config.computeDatabaseDependencyOrder(*this);
|
||||
if (auto *const dbs = std::get_if<std::vector<Database *>>(&depOrder)) {
|
||||
deps = std::move(*dbs);
|
||||
}
|
||||
if (auto *const protectedDb = config.findDatabase(name + "-protected", arch)) {
|
||||
deps.emplace_back(protectedDb);
|
||||
}
|
||||
|
||||
// check whether all required dependencies are still provided
|
||||
for (const auto &requiredDep : requiredDeps) {
|
||||
const auto &[dependencyName, dependencyDetail] = requiredDep;
|
||||
|
@ -239,18 +249,10 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
|||
continue;
|
||||
}
|
||||
|
||||
// skip if dependency is provided by a database this database depends on
|
||||
const auto checkDb = [this, &config, &requiredDep](const std::string &dbName) {
|
||||
if (const auto *const db = config.findDatabase(dbName, arch)) {
|
||||
if (db->providedDeps.provides(requiredDep.first, requiredDep.second)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
// skip if dependency is provided by a database this database depends on or the protected version of this db
|
||||
auto providedByAnotherDb = false;
|
||||
for (const auto &dbName : dependencies) {
|
||||
if ((providedByAnotherDb = checkDb(dbName))) {
|
||||
for (const auto *db : deps) {
|
||||
if ((providedByAnotherDb = db->providedDeps.provides(requiredDep.first, requiredDep.second))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -258,11 +260,6 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
|||
continue;
|
||||
}
|
||||
|
||||
// skip if dependency is provided by the protected version of this db
|
||||
if (checkDb(name + "-protected")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// add packages to list of unresolved packages
|
||||
for (const auto &affectedPackage : affectedPackages) {
|
||||
unresolvedPackages[affectedPackage].deps.emplace_back(Dependency(dependencyName, dependencyDetail.version, dependencyDetail.mode));
|
||||
|
@ -287,18 +284,10 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
|||
continue;
|
||||
}
|
||||
|
||||
// skip if dependency is provided by a database this database depends on
|
||||
const auto checkDb = [this, &config, &requiredLib = requiredLib](const std::string &dbName) {
|
||||
if (const auto *const db = config.findDatabase(dbName, arch)) {
|
||||
if (db->providedLibs.find(requiredLib) != db->providedLibs.end()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
// skip if dependency is provided by a database this database depends on or the protected version of this db
|
||||
auto providedByAnotherDb = false;
|
||||
for (const auto &dbName : dependencies) {
|
||||
if ((providedByAnotherDb = checkDb(dbName))) {
|
||||
for (const auto *db : deps) {
|
||||
if ((providedByAnotherDb = db->providedLibs.find(requiredLib) != db->providedLibs.end())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -306,11 +295,6 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
|||
continue;
|
||||
}
|
||||
|
||||
// skip if library is provided by the protected version of this db
|
||||
if (checkDb(name + "-protected")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// add packages to list of unresolved packages
|
||||
for (const auto &affectedPackage : affectedPackages) {
|
||||
unresolvedPackages[affectedPackage].libs.emplace_back(requiredLib);
|
||||
|
|
Loading…
Reference in New Issue