arch-repo-manager/librepomgr/buildactions/buildactionmeta.h
Martchus 05ff6cd00f 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.
2021-05-01 23:28:30 +02:00

187 lines
6.4 KiB
C++

#ifndef LIBREPOMGR_BUILD_ACTION_META_H
#define LIBREPOMGR_BUILD_ACTION_META_H
#include "../global.h"
#include "../../libpkg/data/lockable.h"
#include <c++utilities/misc/flagenumclass.h>
#include <reflective_rapidjson/json/serializable.h>
#include <cstdint>
#include <string_view>
#include <unordered_map>
#include <vector>
namespace LibRepoMgr {
enum class BuildActionStatus : std::uint64_t {
Created,
Enqueued,
AwaitingConfirmation,
Running,
Finished,
};
enum class BuildActionResult : std::uint64_t {
None,
Success,
Failure,
ConfirmationDeclined,
Aborted,
};
enum class BuildActionType : std::uint64_t {
Invalid,
RemovePackages,
MovePackages,
CheckForUpdates,
ReloadDatabase,
ReloadLibraryDependencies,
PrepareBuild,
ConductBuild,
MakeLicenseInfo,
ReloadConfiguration,
CheckForProblems,
CleanRepository,
DummyBuildAction,
CustomCommand,
};
using BuildActionFlagType = std::uint64_t;
constexpr BuildActionFlagType noBuildActionFlags = 0;
enum class CheckForUpdatesFlags : BuildActionFlagType {
None,
ConsiderRegularPackage = (1 << 0), // be consistent with LibPkg::UpdateCheckOptions here
};
enum class ReloadLibraryDependenciesFlags : BuildActionFlagType {
None,
ForceReload = (1 << 0),
SkipDependencies = (1 << 1),
};
enum class PrepareBuildFlags : BuildActionFlagType {
None,
ForceBumpPkgRel = (1 << 0),
CleanSrcDir = (1 << 1),
KeepOrder = (1 << 2),
KeepPkgRelAndEpoch = (1 << 3),
};
enum class ConductBuildFlags : BuildActionFlagType {
None,
BuildAsFarAsPossible = (1 << 0),
SaveChrootOfFailures = (1 << 1),
UpdateChecksums = (1 << 2),
AutoStaging = (1 << 3),
};
enum class CheckForProblemsFlags : BuildActionFlagType {
None,
RequirePackageSignatures = (1 << 0),
};
enum class CleanRepositoryFlags : BuildActionFlagType {
None,
DryRun = (1 << 0),
};
enum class CheckForProblemsSettings : std::size_t { IgnoreDeps, IgnoreLibDeps };
enum class PrepareBuildSettings : std::size_t { PKGBUILDsDirs };
enum class ConductBuildSettings : std::size_t { ChrootDir, ChrootDefaultUser, CCacheDir, PackageCacheDir, TestFilesDir, GpgKey };
enum class CustomCommandSettings : std::size_t { Command, SharedLocks, ExclusiveLocks };
struct LIBREPOMGR_EXPORT BuildActionFlagMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionFlagMetaInfo> {
const BuildActionFlagType id = 0;
const std::string_view name;
const std::string_view desc;
const std::string_view param;
};
struct LIBREPOMGR_EXPORT BuildActionSettingMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionSettingMetaInfo> {
const std::string_view name;
const std::string_view desc;
const std::string_view param;
};
struct LIBREPOMGR_EXPORT BuildActionTypeMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionTypeMetaInfo> {
const BuildActionType id = BuildActionType::Invalid;
const std::string_view category;
const std::string_view name;
const std::string_view type;
const std::vector<BuildActionFlagMetaInfo> flags;
const std::vector<BuildActionSettingMetaInfo> settings;
const bool directory = true;
const bool sourceDb = true;
const bool destinationDb = true;
const bool packageNames = true;
const bool implyPackagesFromPrevAction = false;
};
struct LIBREPOMGR_EXPORT BuildActionStatusMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionStatusMetaInfo> {
const BuildActionStatus id = BuildActionStatus::Created;
const std::string_view name;
};
struct LIBREPOMGR_EXPORT BuildActionResultMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionResultMetaInfo> {
const BuildActionResult id = BuildActionResult::None;
const std::string_view name;
};
struct BuildActionMetaInfo;
struct LIBREPOMGR_EXPORT BuildActionTypeMetaMapping {
using FlagMap = std::unordered_map<std::string_view, std::reference_wrapper<const BuildActionFlagMetaInfo>>;
using SettingMap = std::unordered_map<std::string_view, std::reference_wrapper<const BuildActionSettingMetaInfo>>;
explicit BuildActionTypeMetaMapping(const BuildActionTypeMetaInfo &typeInfo);
const FlagMap flagInfoByName;
const SettingMap settingInfoByName;
};
struct LIBREPOMGR_EXPORT BuildActionMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionMetaInfo>, public LibPkg::Lockable {
using TypeInfoByName = std::unordered_map<std::string_view, std::reference_wrapper<const BuildActionTypeMetaInfo>>;
using MetaMappingsForTypes = std::vector<BuildActionTypeMetaMapping>;
explicit BuildActionMetaInfo();
const TypeInfoByName &typeInfoByName() const;
const MetaMappingsForTypes &mappings() const;
bool isTypeIdValid(BuildActionType id) const;
const BuildActionTypeMetaInfo &typeInfoForId(BuildActionType id) const;
const BuildActionTypeMetaInfo &typeInfoForName(std::string_view name) const;
const BuildActionTypeMetaMapping &mappingForId(BuildActionType id) const;
const std::vector<BuildActionTypeMetaInfo> types;
const std::vector<BuildActionStatusMetaInfo> states;
const std::vector<BuildActionResultMetaInfo> results;
private:
const TypeInfoByName m_typeInfoByName;
const MetaMappingsForTypes m_mappings;
};
inline const BuildActionMetaInfo::TypeInfoByName &BuildActionMetaInfo::typeInfoByName() const
{
return m_typeInfoByName;
}
inline const BuildActionMetaInfo::MetaMappingsForTypes &BuildActionMetaInfo::mappings() const
{
return m_mappings;
}
inline bool BuildActionMetaInfo::isTypeIdValid(BuildActionType id) const
{
return static_cast<std::size_t>(id) < types.size();
}
inline const BuildActionTypeMetaInfo &BuildActionMetaInfo::typeInfoForId(BuildActionType id) const
{
return types[static_cast<std::size_t>(id)];
}
inline const BuildActionTypeMetaMapping &BuildActionMetaInfo::mappingForId(BuildActionType id) const
{
return m_mappings[static_cast<std::size_t>(id)];
}
} // namespace LibRepoMgr
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(LibRepoMgr, LibRepoMgr::ReloadLibraryDependenciesFlags)
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(LibRepoMgr, LibRepoMgr::PrepareBuildFlags)
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(LibRepoMgr, LibRepoMgr::ConductBuildFlags)
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(LibRepoMgr, LibRepoMgr::CleanRepositoryFlags)
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(LibRepoMgr, LibRepoMgr::CheckForProblemsFlags)
#endif // LIBREPOMGR_BUILD_ACTION_META_H