Allow specifying output path for license info
This commit is contained in:
parent
13cccd3bc9
commit
83c7426fce
|
@ -254,7 +254,13 @@ BuildActionMetaInfo::BuildActionMetaInfo()
|
||||||
.name = "Make license info",
|
.name = "Make license info",
|
||||||
.type = "make-license-info",
|
.type = "make-license-info",
|
||||||
.flags = {},
|
.flags = {},
|
||||||
.settings = {},
|
.settings = {
|
||||||
|
BuildActionSettingMetaInfo{
|
||||||
|
.name = "Output file path",
|
||||||
|
.desc = "The path of the output file",
|
||||||
|
.param = "output-file-path",
|
||||||
|
},
|
||||||
|
},
|
||||||
.directory = true,
|
.directory = true,
|
||||||
.sourceDb = false,
|
.sourceDb = false,
|
||||||
.destinationDb = false,
|
.destinationDb = false,
|
||||||
|
|
|
@ -96,6 +96,7 @@ enum class ReloadLibraryDependenciesSettings : std::size_t { PackageExcludeRegex
|
||||||
enum class CheckForProblemsSettings : std::size_t { IgnoreDeps, IgnoreLibDeps };
|
enum class CheckForProblemsSettings : std::size_t { IgnoreDeps, IgnoreLibDeps };
|
||||||
enum class PrepareBuildSettings : std::size_t { PKGBUILDsDirs };
|
enum class PrepareBuildSettings : std::size_t { PKGBUILDsDirs };
|
||||||
enum class ConductBuildSettings : std::size_t { ChrootDir, ChrootDefaultUser, CCacheDir, PackageCacheDir, TestFilesDir, GpgKey };
|
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 };
|
enum class CustomCommandSettings : std::size_t { Command, SharedLocks, ExclusiveLocks };
|
||||||
|
|
||||||
struct LIBREPOMGR_EXPORT BuildActionFlagMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionFlagMetaInfo> {
|
struct LIBREPOMGR_EXPORT BuildActionFlagMetaInfo : public ReflectiveRapidJSON::JsonSerializable<BuildActionFlagMetaInfo> {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <c++utilities/conversion/stringbuilder.h>
|
#include <c++utilities/conversion/stringbuilder.h>
|
||||||
#include <c++utilities/io/misc.h>
|
#include <c++utilities/io/misc.h>
|
||||||
|
#include <c++utilities/io/path.h>
|
||||||
|
|
||||||
using namespace CppUtilities;
|
using namespace CppUtilities;
|
||||||
|
|
||||||
|
@ -17,13 +18,22 @@ MakeLicenseInfo::MakeLicenseInfo(ServiceSetup &setup, const std::shared_ptr<Buil
|
||||||
void MakeLicenseInfo::run()
|
void MakeLicenseInfo::run()
|
||||||
{
|
{
|
||||||
// determine output file path
|
// determine output file path
|
||||||
if (m_buildAction->directory.empty()) {
|
auto &metaInfo = m_setup.building.metaInfo;
|
||||||
reportError("Unable to create working directory: no directory name specified");
|
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;
|
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
|
// validate params and acquire read lock
|
||||||
auto configReadLock = init(BuildActionAccess::ReadConfig, RequiredDatabases::None, RequiredParameters::Packages);
|
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);
|
auto result = m_setup.config.computeLicenseInfo(m_buildAction->packageNames);
|
||||||
std::get<std::shared_lock<std::shared_mutex>>(configReadLock).unlock();
|
std::get<std::shared_lock<std::shared_mutex>>(configReadLock).unlock();
|
||||||
auto wroteOutputFile = false;
|
auto wroteOutputFile = false;
|
||||||
auto outputFilePath = outputDir % '/' % m_buildAction->id + "-summary.md";
|
if (outputFilePath.empty()) {
|
||||||
|
outputFilePath = outputDir % '/' % m_buildAction->id + "-summary.md";
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
std::filesystem::create_directories(outputDir);
|
std::filesystem::create_directories(outputDir);
|
||||||
writeFile(outputFilePath, result.licenseSummary);
|
writeFile(outputFilePath, result.licenseSummary);
|
||||||
|
|
Loading…
Reference in New Issue