|
|
2e44c8 |
From e83ff88f8e4604024e4d5f4fd9f2fa4e5d4f03f9 Mon Sep 17 00:00:00 2001
|
|
|
2e44c8 |
From: Jaroslav Mracek <jmracek@redhat.com>
|
|
|
2e44c8 |
Date: Tue, 23 Nov 2021 14:14:23 +0100
|
|
|
2e44c8 |
Subject: [PATCH] Add getLatestModules()
|
|
|
2e44c8 |
|
|
|
2e44c8 |
It returns latest module packages for each module name, stream, and
|
|
|
2e44c8 |
architecture.
|
|
|
2e44c8 |
|
|
|
2e44c8 |
It is an alternative implementation to code base with
|
|
|
2e44c8 |
the old modular solver.
|
|
|
2e44c8 |
|
|
|
2e44c8 |
Alternative to 73868368120ceea97ada628a1aa42236fb42b89d
|
|
|
2e44c8 |
---
|
|
|
2e44c8 |
libdnf/module/ModulePackageContainer.cpp | 39 +++++++++++++++++++++++++++++++++++++++
|
|
|
2e44c8 |
libdnf/module/ModulePackageContainer.hpp | 9 +++++++++
|
|
|
2e44c8 |
2 files changed, 48 insertions(+)
|
|
|
2e44c8 |
|
|
|
2e44c8 |
diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp
|
|
|
2e44c8 |
index efab497..f9f861c 100644
|
|
|
2e44c8 |
--- a/libdnf/module/ModulePackageContainer.cpp
|
|
|
2e44c8 |
+++ b/libdnf/module/ModulePackageContainer.cpp
|
|
|
2e44c8 |
@@ -1037,6 +1037,45 @@ ModulePackageContainer::getLatestModulesPerRepo(ModuleState moduleFilter,
|
|
|
2e44c8 |
return output;
|
|
|
2e44c8 |
}
|
|
|
2e44c8 |
|
|
|
2e44c8 |
+std::vector<ModulePackage *>
|
|
|
2e44c8 |
+ModulePackageContainer::getLatestModules(const std::vector<ModulePackage *> modulePackages, bool activeOnly)
|
|
|
2e44c8 |
+{
|
|
|
2e44c8 |
+ std::vector<ModulePackage *> latestModules;
|
|
|
2e44c8 |
+ if (activeOnly) {
|
|
|
2e44c8 |
+ // When no active module return
|
|
|
2e44c8 |
+ if (!pImpl->activatedModules) {
|
|
|
2e44c8 |
+ return latestModules;
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ std::map<std::string, std::vector<ModulePackage *>> latest;
|
|
|
2e44c8 |
+
|
|
|
2e44c8 |
+ for (auto modulePackage : modulePackages) {
|
|
|
2e44c8 |
+ if (activeOnly && !isModuleActive(modulePackage)) {
|
|
|
2e44c8 |
+ continue;
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ auto nameStreamArch = modulePackage->getNameStream();
|
|
|
2e44c8 |
+ nameStreamArch.append(":");
|
|
|
2e44c8 |
+ nameStreamArch.append(modulePackage->getArchCStr());
|
|
|
2e44c8 |
+ auto & entries = latest[nameStreamArch];
|
|
|
2e44c8 |
+ if (entries.empty()) {
|
|
|
2e44c8 |
+ entries.push_back(modulePackage);
|
|
|
2e44c8 |
+ } else {
|
|
|
2e44c8 |
+ auto version = (*entries.begin())->getVersionNum();
|
|
|
2e44c8 |
+ if (version < modulePackage->getVersionNum()) {
|
|
|
2e44c8 |
+ entries.clear();
|
|
|
2e44c8 |
+ entries.push_back(modulePackage);
|
|
|
2e44c8 |
+ } else if (version == modulePackage->getVersionNum()) {
|
|
|
2e44c8 |
+ entries.push_back(modulePackage);
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ for (auto & entries : latest) {
|
|
|
2e44c8 |
+ for (auto modulePackage : entries.second) {
|
|
|
2e44c8 |
+ latestModules.push_back(modulePackage);
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ }
|
|
|
2e44c8 |
+ return latestModules;
|
|
|
2e44c8 |
+}
|
|
|
2e44c8 |
|
|
|
2e44c8 |
std::pair<std::vector<std::vector<std::string>>, ModulePackageContainer::ModuleErrorType>
|
|
|
2e44c8 |
ModulePackageContainer::resolveActiveModulePackages(bool debugSolver)
|
|
|
2e44c8 |
diff --git a/libdnf/module/ModulePackageContainer.hpp b/libdnf/module/ModulePackageContainer.hpp
|
|
|
2e44c8 |
index 7e5071b..42d5a9e 100644
|
|
|
2e44c8 |
--- a/libdnf/module/ModulePackageContainer.hpp
|
|
|
2e44c8 |
+++ b/libdnf/module/ModulePackageContainer.hpp
|
|
|
2e44c8 |
@@ -132,6 +132,15 @@ public:
|
|
|
2e44c8 |
std::vector<std::vector<std::vector<ModulePackage *>>> getLatestModulesPerRepo(
|
|
|
2e44c8 |
ModuleState moduleFilter, std::vector<ModulePackage *> modulePackages);
|
|
|
2e44c8 |
|
|
|
2e44c8 |
+ /**
|
|
|
2e44c8 |
+ * @brief Return all latest ModulePackages for each module Name, stream and architecture. In case of
|
|
|
2e44c8 |
+ * multiple latest packages, all will be returned. When activeOnly is true, it returns only the latest active
|
|
|
2e44c8 |
+ * packages.
|
|
|
2e44c8 |
+ *
|
|
|
2e44c8 |
+ * @return std::vector<ModulePackage *>
|
|
|
2e44c8 |
+ */
|
|
|
2e44c8 |
+ std::vector<ModulePackage *> getLatestModules(const std::vector<ModulePackage *> modulePackages, bool activeOnly);
|
|
|
2e44c8 |
+
|
|
|
2e44c8 |
std::vector<ModulePackage *> requiresModuleEnablement(const libdnf::PackageSet & packages);
|
|
|
2e44c8 |
|
|
|
2e44c8 |
/**
|
|
|
2e44c8 |
--
|
|
|
2e44c8 |
libgit2 1.1.0
|
|
|
2e44c8 |
|