Allow resetting chroot settings as well when preparing build

This commit is contained in:
Martchus 2021-05-16 15:45:53 +02:00
parent efbcef5e6e
commit 9359004a10
6 changed files with 40 additions and 17 deletions

View File

@ -84,7 +84,8 @@ enum class PackageStagingNeeded {
struct LIBREPOMGR_EXPORT PackageBuildProgress : public ReflectiveRapidJSON::JsonSerializable<PackageBuildProgress>, struct LIBREPOMGR_EXPORT PackageBuildProgress : public ReflectiveRapidJSON::JsonSerializable<PackageBuildProgress>,
public ReflectiveRapidJSON::BinarySerializable<PackageBuildProgress> { public ReflectiveRapidJSON::BinarySerializable<PackageBuildProgress> {
bool hasBeenAnyProgressMade() const; bool hasBeenAnyProgressMade() const;
void reset(); void resetProgress();
void resetChrootSettings();
CppUtilities::DateTime started; CppUtilities::DateTime started;
CppUtilities::DateTime finished; CppUtilities::DateTime finished;

View File

@ -140,6 +140,12 @@ BuildActionMetaInfo::BuildActionMetaInfo()
.desc = "Never bumps pkgrel and epoch", .desc = "Never bumps pkgrel and epoch",
.param = "keep-pkgrel-and-epoch", .param = "keep-pkgrel-and-epoch",
}, },
BuildActionFlagMetaInfo{
.id = static_cast<BuildActionFlagType>(PrepareBuildFlags::ResetChrootSettings),
.name = "Reset chroot settings",
.desc = "Resets chroot dir, chroot user and related flags",
.param = "keep-pkgrel-and-epoch",
},
}, },
.settings = { .settings = {
BuildActionSettingMetaInfo{ BuildActionSettingMetaInfo{

View File

@ -66,6 +66,7 @@ enum class PrepareBuildFlags : BuildActionFlagType {
CleanSrcDir = (1 << 1), CleanSrcDir = (1 << 1),
KeepOrder = (1 << 2), KeepOrder = (1 << 2),
KeepPkgRelAndEpoch = (1 << 3), KeepPkgRelAndEpoch = (1 << 3),
ResetChrootSettings = (1 << 4),
}; };
enum class ConductBuildFlags : BuildActionFlagType { enum class ConductBuildFlags : BuildActionFlagType {
None, None,

View File

@ -505,6 +505,7 @@ private:
bool m_cleanSourceDirectory = false; bool m_cleanSourceDirectory = false;
bool m_keepOrder = false; bool m_keepOrder = false;
bool m_keepPkgRelAndEpoch = false; bool m_keepPkgRelAndEpoch = false;
bool m_resetChrootSettings = false;
}; };
struct LIBREPOMGR_EXPORT BatchProcessingSession : public MultiSession<std::string> { struct LIBREPOMGR_EXPORT BatchProcessingSession : public MultiSession<std::string> {

View File

@ -39,20 +39,6 @@ using namespace CppUtilities::EscapeCodes;
namespace LibRepoMgr { namespace LibRepoMgr {
bool PackageBuildProgress::hasBeenAnyProgressMade() const
{
return checksumsUpdated || hasSources || !finished.isNull() || addedToRepo || stagingNeeded != PackageStagingNeeded::Undetermined;
}
void PackageBuildProgress::reset()
{
checksumsUpdated = false;
hasSources = false;
finished = DateTime();
addedToRepo = false;
stagingNeeded = PackageStagingNeeded::Undetermined;
}
void RebuildInfo::add(const LibPkg::DependencySet &deps, const std::unordered_set<std::string> &libs) void RebuildInfo::add(const LibPkg::DependencySet &deps, const std::unordered_set<std::string> &libs)
{ {
for (const auto &dep : deps) { for (const auto &dep : deps) {

View File

@ -34,6 +34,27 @@ using namespace CppUtilities::EscapeCodes;
namespace LibRepoMgr { namespace LibRepoMgr {
bool PackageBuildProgress::hasBeenAnyProgressMade() const
{
return checksumsUpdated || hasSources || !finished.isNull() || addedToRepo || stagingNeeded != PackageStagingNeeded::Undetermined;
}
void PackageBuildProgress::resetProgress()
{
checksumsUpdated = false;
hasSources = false;
finished = DateTime();
addedToRepo = false;
stagingNeeded = PackageStagingNeeded::Undetermined;
}
void PackageBuildProgress::resetChrootSettings()
{
chrootDirectory.clear();
chrootUser.clear();
skipChrootUpgrade = skipChrootCleanup = keepPreviousSourceTree = false;
}
PrepareBuild::PrepareBuild(ServiceSetup &setup, const std::shared_ptr<BuildAction> &buildAction) PrepareBuild::PrepareBuild(ServiceSetup &setup, const std::shared_ptr<BuildAction> &buildAction)
: InternalBuildAction(setup, buildAction) : InternalBuildAction(setup, buildAction)
{ {
@ -53,6 +74,7 @@ void PrepareBuild::run()
m_cleanSourceDirectory = flags & PrepareBuildFlags::CleanSrcDir; m_cleanSourceDirectory = flags & PrepareBuildFlags::CleanSrcDir;
m_keepOrder = flags & PrepareBuildFlags::KeepOrder; m_keepOrder = flags & PrepareBuildFlags::KeepOrder;
m_keepPkgRelAndEpoch = flags & PrepareBuildFlags::KeepPkgRelAndEpoch; m_keepPkgRelAndEpoch = flags & PrepareBuildFlags::KeepPkgRelAndEpoch;
m_resetChrootSettings = flags & PrepareBuildFlags::ResetChrootSettings;
if (m_forceBumpPackageVersion && m_keepPkgRelAndEpoch) { if (m_forceBumpPackageVersion && m_keepPkgRelAndEpoch) {
reportError("Can not force-bump pkgrel and keeping it at the same time."); reportError("Can not force-bump pkgrel and keeping it at the same time.");
return; return;
@ -1039,7 +1061,10 @@ BuildPreparation PrepareBuild::makeResultData(std::string &&error)
continue; continue;
} }
if (buildProgress.buildDirectory.empty()) { if (buildProgress.buildDirectory.empty()) {
buildProgress.reset(); buildProgress.resetProgress();
if (m_resetChrootSettings) {
buildProgress.resetChrootSettings();
}
continue; continue;
} }
const std::filesystem::path srcDirPkgbuild = buildData.sourceDirectory + "/PKGBUILD"; const std::filesystem::path srcDirPkgbuild = buildData.sourceDirectory + "/PKGBUILD";
@ -1047,7 +1072,10 @@ BuildPreparation PrepareBuild::makeResultData(std::string &&error)
try { try {
if (!std::filesystem::exists(buildDirPkgbuild) if (!std::filesystem::exists(buildDirPkgbuild)
|| std::filesystem::last_write_time(srcDirPkgbuild) > std::filesystem::last_write_time(buildDirPkgbuild)) { || std::filesystem::last_write_time(srcDirPkgbuild) > std::filesystem::last_write_time(buildDirPkgbuild)) {
buildProgress.reset(); buildProgress.resetProgress();
if (m_resetChrootSettings) {
buildProgress.resetChrootSettings();
}
} }
} catch (const std::filesystem::filesystem_error &e) { } catch (const std::filesystem::filesystem_error &e) {
m_buildAction->appendOutput( m_buildAction->appendOutput(