From 05ff6cd00f9b249d43094a457b7fd2db2e901185 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 1 May 2021 23:11:20 +0200 Subject: [PATCH] Do not set packages in conduct build actions when creating it form task Usually this doesn't make sense because we want to build all packages which were determined in the previous prepare action. When specifying the packages again in the conduct build action we'd skip packages which are pulled into the build as dependencies which is normally not desired. --- librepomgr/buildactions/buildactionmeta.cpp | 1 + librepomgr/buildactions/buildactionmeta.h | 1 + librepomgr/webapi/routes_buildaction.cpp | 15 +++++++++------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/librepomgr/buildactions/buildactionmeta.cpp b/librepomgr/buildactions/buildactionmeta.cpp index d748395..57d4a45 100644 --- a/librepomgr/buildactions/buildactionmeta.cpp +++ b/librepomgr/buildactions/buildactionmeta.cpp @@ -220,6 +220,7 @@ BuildActionMetaInfo::BuildActionMetaInfo() .sourceDb = false, .destinationDb = false, .packageNames = true, + .implyPackagesFromPrevAction = true, }, BuildActionTypeMetaInfo{ .id = BuildActionType::MakeLicenseInfo, diff --git a/librepomgr/buildactions/buildactionmeta.h b/librepomgr/buildactions/buildactionmeta.h index c13a91f..92c4be8 100644 --- a/librepomgr/buildactions/buildactionmeta.h +++ b/librepomgr/buildactions/buildactionmeta.h @@ -109,6 +109,7 @@ struct LIBREPOMGR_EXPORT BuildActionTypeMetaInfo : public ReflectiveRapidJSON::J const bool sourceDb = true; const bool destinationDb = true; const bool packageNames = true; + const bool implyPackagesFromPrevAction = false; }; struct LIBREPOMGR_EXPORT BuildActionStatusMetaInfo : public ReflectiveRapidJSON::JsonSerializable { const BuildActionStatus id = BuildActionStatus::Created; diff --git a/librepomgr/webapi/routes_buildaction.cpp b/librepomgr/webapi/routes_buildaction.cpp index 21ed13a..86f6911 100644 --- a/librepomgr/webapi/routes_buildaction.cpp +++ b/librepomgr/webapi/routes_buildaction.cpp @@ -318,7 +318,7 @@ struct SequencedBuildActions { static std::string allocateNewBuildAction(const BuildActionMetaInfo &metaInfo, const std::string &taskName, const std::vector &packageNames, const std::string &directory, const std::unordered_map &actionTemplates, SequencedBuildActions &newActionSequence, - std::vector> &allocatedActions, const std::string &actionTemplateToAllocate) + std::vector> &allocatedActions, const std::string &actionTemplateToAllocate, bool asFirstActions) { const auto actionTemplateIterator = actionTemplates.find(actionTemplateToAllocate); if (actionTemplateIterator == actionTemplates.end()) { @@ -339,7 +339,9 @@ static std::string allocateNewBuildAction(const BuildActionMetaInfo &metaInfo, c buildAction->type = buildActionType; buildAction->sourceDbs = actionTemplate.sourceDbs; buildAction->destinationDbs = actionTemplate.destinationDbs; - buildAction->packageNames = !typeInfo.packageNames || packageNames.empty() ? actionTemplate.packageNames : packageNames; + if (asFirstActions || !typeInfo.implyPackagesFromPrevAction) { + buildAction->packageNames = !typeInfo.packageNames || packageNames.empty() ? actionTemplate.packageNames : packageNames; + } buildAction->flags = actionTemplate.flags; buildAction->settings = actionTemplate.settings; return std::string(); @@ -348,18 +350,19 @@ static std::string allocateNewBuildAction(const BuildActionMetaInfo &metaInfo, c static std::string allocateNewBuildActionSequence(const BuildActionMetaInfo &metaInfo, const std::string &taskName, const std::vector &packageNames, const std::string &directory, const std::unordered_map &actionTemplates, SequencedBuildActions &newActionSequence, - std::vector> &allocatedActions, const BuildActionSequence &actionSequenceToAllocate) + std::vector> &allocatedActions, const BuildActionSequence &actionSequenceToAllocate, bool asFirstActions = true) { auto error = std::string(); newActionSequence.name = actionSequenceToAllocate.name; newActionSequence.concurrent = actionSequenceToAllocate.concurrent; for (const auto &actionNode : actionSequenceToAllocate.actions) { if (const auto *const actionTemplateName = std::get_if(&actionNode)) { - error = allocateNewBuildAction( - metaInfo, taskName, packageNames, directory, actionTemplates, newActionSequence, allocatedActions, *actionTemplateName); + error = allocateNewBuildAction(metaInfo, taskName, packageNames, directory, actionTemplates, newActionSequence, allocatedActions, + *actionTemplateName, newActionSequence.concurrent ? asFirstActions : newActionSequence.actions.empty()); } else if (const auto *const actionSequence = std::get_if(&actionNode)) { error = allocateNewBuildActionSequence(metaInfo, taskName, packageNames, directory, actionTemplates, - std::get(newActionSequence.actions.emplace_back(SequencedBuildActions())), allocatedActions, *actionSequence); + std::get(newActionSequence.actions.emplace_back(SequencedBuildActions())), allocatedActions, *actionSequence, + newActionSequence.concurrent ? asFirstActions : false); } if (!error.empty()) { return error;