Skip to content

Commit

Permalink
Add getLatestModules()
Browse files Browse the repository at this point in the history
It returns latest module packages for each module name, stream, and
architecture.
  • Loading branch information
j-mracek authored and jrohel committed Sep 10, 2021
1 parent 1f012bb commit 7386836
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
29 changes: 29 additions & 0 deletions libdnf/module/ModulePackageContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1101,6 +1101,35 @@ ModulePackageContainer::getLatestModulesPerRepo(ModuleState moduleFilter,
return output;
}

std::vector<ModulePackage *>
ModulePackageContainer::getLatestModules(const std::vector<ModulePackage *> modulePackages, bool activeOnly)
{
// Because modular sovables uses as name combination of module $name:$stream:$context, we can use to get the lates
// Query
std::vector<ModulePackage *> latestModules;
Query query(pImpl->moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES);
if (activeOnly) {
// When no active module return
if (!pImpl->activatedModules) {
return latestModules;
}
query.addFilter(HY_PKG, HY_EQ, pImpl->activatedModules.get());
}

PackageSet inputModulePackages(pImpl->moduleSack);
for (auto modulePackage : modulePackages) {
inputModulePackages.set(modulePackage->getId());
}
query.addFilter(HY_PKG, HY_EQ, &inputModulePackages);
query.addFilter(HY_PKG_LATEST_PER_ARCH, HY_EQ, 1);
auto set = query.runSet();

Id moduleId = -1;
while ((moduleId = set->next(moduleId)) != -1) {
latestModules.push_back(pImpl->modules.at(moduleId).get());
}
return latestModules;
}

std::pair<std::vector<std::vector<std::string>>, ModulePackageContainer::ModuleErrorType>
ModulePackageContainer::resolveActiveModulePackages(bool debugSolver)
Expand Down
10 changes: 10 additions & 0 deletions libdnf/module/ModulePackageContainer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,16 @@ struct ModulePackageContainer
std::vector<ModulePackage *> getModulePackages();
std::vector<std::vector<std::vector<ModulePackage *>>> getLatestModulesPerRepo(
ModuleState moduleFilter, std::vector<ModulePackage *> modulePackages);

/**
* @brief Return all latest ModulePackages for each module Name, stream, context and architecture. In case of
* multiple latest packages, all will be returned. When activeOnly is true, it returns only the latest active
* packages.
*
* @return std::vector<ModulePackage *>
*/
std::vector<ModulePackage *> getLatestModules(const std::vector<ModulePackage *> modulePackages, bool activeOnly);

ModulePackage * getLatestModule(std::vector<ModulePackage *> modulePackages, bool activeOnly);

std::vector<ModulePackage *> requiresModuleEnablement(const libdnf::PackageSet & packages);
Expand Down

0 comments on commit 7386836

Please sign in to comment.