From 1a4b9282d2480bd7390c3a393191261d5de8417a Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 8 Nov 2023 15:09:42 +0100 Subject: [PATCH] Allow using `makecontainerpkg` in prepare action --- librepomgr/buildactions/buildactionmeta.cpp | 6 ++++++ librepomgr/buildactions/buildactionmeta.h | 1 + librepomgr/buildactions/buildactionprivate.h | 2 ++ librepomgr/buildactions/preparebuild.cpp | 10 ++++++++-- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/librepomgr/buildactions/buildactionmeta.cpp b/librepomgr/buildactions/buildactionmeta.cpp index 1ecc97c..c605865 100644 --- a/librepomgr/buildactions/buildactionmeta.cpp +++ b/librepomgr/buildactions/buildactionmeta.cpp @@ -178,6 +178,12 @@ BuildActionMetaInfo::BuildActionMetaInfo() .desc = "Whether PKGBUILDs from official Arch Linux Git repositories should be downloaded (if not present, the AUR will still be checked; local PKGBUILDs still have precedence)", .param = "fetch-official-pkgbuilds", }, + BuildActionFlagMetaInfo{ + .id = static_cast(ConductBuildFlags::UseContainer), + .name = "Use container", + .desc = "Uses `makecontainerpkg` instead of using `makepkg` when printing source info; eliminates the need to having pacman on the host by using docker/podman instead", + .param = "use-container", + }, }, .settings = { BuildActionSettingMetaInfo{ diff --git a/librepomgr/buildactions/buildactionmeta.h b/librepomgr/buildactions/buildactionmeta.h index fb798ed..0289cc2 100644 --- a/librepomgr/buildactions/buildactionmeta.h +++ b/librepomgr/buildactions/buildactionmeta.h @@ -79,6 +79,7 @@ enum class PrepareBuildFlags : BuildActionFlagType { ResetChrootSettings = (1 << 4), PullingInFurtherDependenciesUnexpected = (1 << 5), FetchOfficialPackageSources = (1 << 6), + UseContainer = (1 << 7), }; enum class ConductBuildFlags : BuildActionFlagType { None, diff --git a/librepomgr/buildactions/buildactionprivate.h b/librepomgr/buildactions/buildactionprivate.h index eb6aad9..717703c 100644 --- a/librepomgr/buildactions/buildactionprivate.h +++ b/librepomgr/buildactions/buildactionprivate.h @@ -496,6 +496,7 @@ private: std::mutex m_mutex; std::string m_workingDirectory; boost::filesystem::path m_makePkgPath; + boost::filesystem::path m_makeContainerPkgPath; std::vector m_pkgbuildsDirs; std::regex m_ignoreLocalPkgbuildsRegex; std::unordered_map m_buildDataByPackage; @@ -516,6 +517,7 @@ private: bool m_pullingInFurtherDependenciesUnexpected = false; bool m_pulledInFurtherDependencies = false; bool m_fetchOfficialSources = false; + bool m_useContainer; }; struct LIBREPOMGR_EXPORT BatchProcessingSession : public MultiSession { diff --git a/librepomgr/buildactions/preparebuild.cpp b/librepomgr/buildactions/preparebuild.cpp index b9aaf68..51b9359 100644 --- a/librepomgr/buildactions/preparebuild.cpp +++ b/librepomgr/buildactions/preparebuild.cpp @@ -77,6 +77,7 @@ void PrepareBuild::run() m_resetChrootSettings = flags & PrepareBuildFlags::ResetChrootSettings; m_pullingInFurtherDependenciesUnexpected = flags & PrepareBuildFlags::PullingInFurtherDependenciesUnexpected; m_fetchOfficialSources = flags & PrepareBuildFlags::FetchOfficialPackageSources; + m_useContainer = flags & PrepareBuildFlags::UseContainer; if (m_forceBumpPackageVersion && m_keepPkgRelAndEpoch) { reportError("Can not force-bump pkgrel and keeping it at the same time."); return; @@ -92,7 +93,11 @@ void PrepareBuild::run() // read values from global config auto setupReadLock = m_setup.lockToRead(); - m_makePkgPath = findExecutable(m_setup.building.makePkgPath); + if (m_useContainer) { + m_makeContainerPkgPath = findExecutable(m_setup.building.makeContainerPkgPath); + } else { + m_makePkgPath = findExecutable(m_setup.building.makePkgPath); + } copySecondVectorIntoFirstVector(m_pkgbuildsDirs, m_setup.building.pkgbuildsDirs); m_ignoreLocalPkgbuildsRegex = m_setup.building.ignoreLocalPkgbuildsRegex; m_workingDirectory = determineWorkingDirectory(buildDataWorkingDirectory); @@ -316,7 +321,8 @@ void PrepareBuild::makeSrcInfo( m_setup.building.ioContext, [multiSession, &sourceDirectory, &packageName](boost::process::child &&child, ProcessResult &&result) { processSrcInfo(*multiSession, sourceDirectory, packageName, std::move(child), std::move(result)); }); - processSession->launch(boost::process::start_dir(sourceDirectory), m_makePkgPath.string(), "--printsrcinfo"); + processSession->launch( + boost::process::start_dir(sourceDirectory), (m_useContainer ? m_makeContainerPkgPath : m_makePkgPath).string(), "--printsrcinfo"); } void PrepareBuild::processSrcInfo(WebClient::AurSnapshotQuerySession &multiSession, const std::string &sourceDirectory,