diff --git a/librepomgr/buildactions/buildactionmeta.cpp b/librepomgr/buildactions/buildactionmeta.cpp index a975a4a..c70fc0d 100644 --- a/librepomgr/buildactions/buildactionmeta.cpp +++ b/librepomgr/buildactions/buildactionmeta.cpp @@ -197,6 +197,12 @@ BuildActionMetaInfo::BuildActionMetaInfo() .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", }, + BuildActionFlagMetaInfo{ + .id = static_cast(PrepareBuildFlags::AurOnly), + .name = "AUR-only", + .desc = "Consider it an error when a PKGBUILD was found locally and thus was not downloaded from the AUR", + .param = "aur-only", + }, }, .settings = { BuildActionSettingMetaInfo{ diff --git a/librepomgr/buildactions/buildactionmeta.h b/librepomgr/buildactions/buildactionmeta.h index 0e5ef34..77b4542 100644 --- a/librepomgr/buildactions/buildactionmeta.h +++ b/librepomgr/buildactions/buildactionmeta.h @@ -88,6 +88,7 @@ enum class PrepareBuildFlags : BuildActionFlagType { PullingInFurtherDependenciesUnexpected = (1 << 5), FetchOfficialPackageSources = (1 << 6), UseContainer = (1 << 7), + AurOnly = (1 << 8), }; enum class ConductBuildFlags : BuildActionFlagType { None, diff --git a/librepomgr/buildactions/buildactionprivate.h b/librepomgr/buildactions/buildactionprivate.h index 163e1ef..54cd1c0 100644 --- a/librepomgr/buildactions/buildactionprivate.h +++ b/librepomgr/buildactions/buildactionprivate.h @@ -520,6 +520,7 @@ private: bool m_pulledInFurtherDependencies = false; bool m_fetchOfficialSources = false; bool m_useContainer = false; + bool m_aurOnly = false; }; struct LIBREPOMGR_EXPORT BatchProcessingSession : public MultiSession { diff --git a/librepomgr/buildactions/preparebuild.cpp b/librepomgr/buildactions/preparebuild.cpp index 7d2f5d9..a183de9 100644 --- a/librepomgr/buildactions/preparebuild.cpp +++ b/librepomgr/buildactions/preparebuild.cpp @@ -78,6 +78,7 @@ void PrepareBuild::run() m_pullingInFurtherDependenciesUnexpected = flags & PrepareBuildFlags::PullingInFurtherDependenciesUnexpected; m_fetchOfficialSources = flags & PrepareBuildFlags::FetchOfficialPackageSources; m_useContainer = flags & PrepareBuildFlags::UseContainer; + m_aurOnly = flags & PrepareBuildFlags::AurOnly; if (m_forceBumpPackageVersion && m_keepPkgRelAndEpoch) { reportError("Can not force-bump pkgrel and keeping it at the same time."); return; @@ -890,14 +891,22 @@ void PrepareBuild::computeDependencies(WebClient::AurSnapshotQuerySession::Conta } // check for errors - set failedPackages; + auto failedPackages = std::set(); + auto localPackages = std::set(); + auto errorMessage = std::string(); for (const auto &buildData : m_buildDataByPackage) { if (!buildData.second.error.empty()) { failedPackages.emplace(buildData.first); + } else if (m_aurOnly && !buildData.second.originalSourceDirectory.empty()) { + localPackages.emplace(buildData.first); } } if (!failedPackages.empty()) { - auto errorMessage = "Unable to retrieve the following packages (see result data for details): " + joinStrings(failedPackages, " "); + errorMessage = "Unable to retrieve the following packages (see result data for details): " + joinStrings(failedPackages, " "); + } else if (!localPackages.empty()) { + errorMessage = "The following packages have a local override but the AUR-only flag was set: " + joinStrings(localPackages, " "); + } + if (!errorMessage.empty()) { m_buildAction->appendOutput(Phrases::ErrorMessage, errorMessage, '\n'); auto resultData = makeResultData(std::move(errorMessage)); auto buildActionWriteLock = m_setup.building.lockToWrite();