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::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)
|
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
|
// determine new provides
|
||||||
DependencySet newProvides;
|
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
|
// check whether all required dependencies are still provided
|
||||||
for (const auto &requiredDep : requiredDeps) {
|
for (const auto &requiredDep : requiredDeps) {
|
||||||
const auto &[dependencyName, dependencyDetail] = requiredDep;
|
const auto &[dependencyName, dependencyDetail] = requiredDep;
|
||||||
|
@ -239,18 +249,10 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// skip if dependency is provided by a database this database depends on
|
// skip if dependency is provided by a database this database depends on or the protected version of this db
|
||||||
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;
|
|
||||||
};
|
|
||||||
auto providedByAnotherDb = false;
|
auto providedByAnotherDb = false;
|
||||||
for (const auto &dbName : dependencies) {
|
for (const auto *db : deps) {
|
||||||
if ((providedByAnotherDb = checkDb(dbName))) {
|
if ((providedByAnotherDb = db->providedDeps.provides(requiredDep.first, requiredDep.second))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -258,11 +260,6 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
||||||
continue;
|
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
|
// add packages to list of unresolved packages
|
||||||
for (const auto &affectedPackage : affectedPackages) {
|
for (const auto &affectedPackage : affectedPackages) {
|
||||||
unresolvedPackages[affectedPackage].deps.emplace_back(Dependency(dependencyName, dependencyDetail.version, dependencyDetail.mode));
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// skip if dependency is provided by a database this database depends on
|
// skip if dependency is provided by a database this database depends on or the protected version of this db
|
||||||
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;
|
|
||||||
};
|
|
||||||
auto providedByAnotherDb = false;
|
auto providedByAnotherDb = false;
|
||||||
for (const auto &dbName : dependencies) {
|
for (const auto *db : deps) {
|
||||||
if ((providedByAnotherDb = checkDb(dbName))) {
|
if ((providedByAnotherDb = db->providedLibs.find(requiredLib) != db->providedLibs.end())) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -306,11 +295,6 @@ std::unordered_map<std::shared_ptr<Package>, UnresolvedDependencies> Database::d
|
||||||
continue;
|
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
|
// add packages to list of unresolved packages
|
||||||
for (const auto &affectedPackage : affectedPackages) {
|
for (const auto &affectedPackage : affectedPackages) {
|
||||||
unresolvedPackages[affectedPackage].libs.emplace_back(requiredLib);
|
unresolvedPackages[affectedPackage].libs.emplace_back(requiredLib);
|
||||||
|
|
Loading…
Reference in New Issue