Allow specifying output path for license info

This commit is contained in:
Martchus 2022-03-15 22:23:34 +01:00
parent 13cccd3bc9
commit 83c7426fce
3 changed files with 26 additions and 7 deletions

View File

@ -254,7 +254,13 @@ BuildActionMetaInfo::BuildActionMetaInfo()
.name = "Make license info",
.type = "make-license-info",
.flags = {},
.settings = {},
.settings = {
BuildActionSettingMetaInfo{
.name = "Output file path",
.desc = "The path of the output file",
.param = "output-file-path",
},
},
.directory = true,
.sourceDb = false,
.destinationDb = false,

View File

@ -96,6 +96,7 @@ enum class ReloadLibraryDependenciesSettings : std::size_t { PackageExcludeRegex
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 MakeLicenseInfoSettings : std::size_t { OutputFilePath };
enum class CustomCommandSettings : std::size_t { Command, SharedLocks, ExclusiveLocks };
struct LIBREPOMGR_EXPORT BuildActionFlagMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionFlagMetaInfo> {

View File

@ -4,6 +4,7 @@
#include <c++utilities/conversion/stringbuilder.h>
#include <c++utilities/io/misc.h>
#include <c++utilities/io/path.h>
using namespace CppUtilities;
@ -17,13 +18,22 @@ MakeLicenseInfo::MakeLicenseInfo(ServiceSetup &setup, const std::shared_ptr<Buil
void MakeLicenseInfo::run()
{
// determine output file path
if (m_buildAction->directory.empty()) {
reportError("Unable to create working directory: no directory name specified");
auto &metaInfo = m_setup.building.metaInfo;
auto metaInfoLock = metaInfo.lockToRead();
const auto &typeInfo = metaInfo.typeInfoForId(BuildActionType::MakeLicenseInfo);
const auto outputFilePathSetting = typeInfo.settings[static_cast<std::size_t>(MakeLicenseInfoSettings::OutputFilePath)].param;
metaInfoLock.unlock();
auto outputFilePath = findSetting(outputFilePathSetting);
auto outputDir = std::string();
if (!outputFilePath.empty()) {
outputDir = directory(outputFilePath);
} else if (!m_buildAction->directory.empty()) {
const auto setupReadLock = m_setup.lockToRead();
outputDir = m_setup.building.workingDirectory % "/license-info/" + m_buildAction->directory;
} else {
reportError("Unable to create working directory: no directory name or output file path specified");
return;
}
auto setupReadLock = m_setup.lockToRead();
auto outputDir = m_setup.building.workingDirectory % "/license-info/" + m_buildAction->directory;
setupReadLock.unlock();
// validate params and acquire read lock
auto configReadLock = init(BuildActionAccess::ReadConfig, RequiredDatabases::None, RequiredParameters::Packages);
@ -34,7 +44,9 @@ void MakeLicenseInfo::run()
auto result = m_setup.config.computeLicenseInfo(m_buildAction->packageNames);
std::get<std::shared_lock<std::shared_mutex>>(configReadLock).unlock();
auto wroteOutputFile = false;
auto outputFilePath = outputDir % '/' % m_buildAction->id + "-summary.md";
if (outputFilePath.empty()) {
outputFilePath = outputDir % '/' % m_buildAction->id + "-summary.md";
}
try {
std::filesystem::create_directories(outputDir);
writeFile(outputFilePath, result.licenseSummary);