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",
|
||||
.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,
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue