aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/builds_cmd.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-12-11 10:02:06 +0100
committerGitHub Enterprise <[email protected]>2025-12-11 10:02:06 +0100
commita598cb444f311c39bbf8d83e2004dd3545b9412d (patch)
treee2527cd9c7fcb62e89605d0a3982ce3b052d5fba /src/zen/cmds/builds_cmd.cpp
parentHTTP server API changes for improved extensibility (#684) (diff)
downloadarchived-zen-a598cb444f311c39bbf8d83e2004dd3545b9412d.tar.xz
archived-zen-a598cb444f311c39bbf8d83e2004dd3545b9412d.zip
remove direct console output from code that is used from service mode (#688)
Diffstat (limited to 'src/zen/cmds/builds_cmd.cpp')
-rw-r--r--src/zen/cmds/builds_cmd.cpp165
1 files changed, 90 insertions, 75 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp
index 7060f092a..b1052654d 100644
--- a/src/zen/cmds/builds_cmd.cpp
+++ b/src/zen/cmds/builds_cmd.cpp
@@ -393,7 +393,8 @@ namespace {
return CleanAndRemoveDirectory(WorkerPool, AbortFlag, PauseFlag, Directory);
}
- void ValidateBuildPart(ThreadWorkers& Workers,
+ void ValidateBuildPart(OperationLogOutput& Output,
+ ThreadWorkers& Workers,
BuildStorageBase& Storage,
const Oid& BuildId,
Oid BuildPartId,
@@ -403,9 +404,7 @@ namespace {
ProgressBar::SetLogOperationName(ProgressMode, "Validate Part");
- std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode));
-
- BuildsOperationValidateBuildPart ValidateOp(*Output,
+ BuildsOperationValidateBuildPart ValidateOp(Output,
Storage,
AbortFlag,
PauseFlag,
@@ -428,7 +427,8 @@ namespace {
NiceTimeSpanMs(ValidateOp.m_ValidateStats.ElapsedWallTimeUS / 1000));
}
- void UploadFolder(ThreadWorkers& Workers,
+ void UploadFolder(OperationLogOutput& Output,
+ ThreadWorkers& Workers,
StorageInstance& Storage,
const Oid& BuildId,
const Oid& BuildPartId,
@@ -448,10 +448,8 @@ namespace {
{
Stopwatch UploadTimer;
- std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode));
-
BuildsOperationUploadFolder UploadOp(
- *Output,
+ Output,
Storage,
AbortFlag,
PauseFlag,
@@ -1151,7 +1149,8 @@ namespace {
return Result;
}
- ChunkedFolderContent GetRemoteContent(StorageInstance& Storage,
+ ChunkedFolderContent GetRemoteContent(OperationLogOutput& Output,
+ StorageInstance& Storage,
const Oid& BuildId,
const std::vector<std::pair<Oid, std::string>>& BuildParts,
std::span<const std::string> IncludeWildcards,
@@ -1184,15 +1183,15 @@ namespace {
OutChunkController = CreateChunkingController(ChunkerName, Parameters);
}
- auto ParseBuildPartManifest = [](StorageInstance& Storage,
- const Oid& BuildId,
- const Oid& BuildPartId,
- CbObject BuildPartManifest,
- std::span<const std::string> IncludeWildcards,
- std::span<const std::string> ExcludeWildcards,
- ChunkedFolderContent& OutRemoteContent,
- std::vector<ChunkBlockDescription>& OutBlockDescriptions,
- std::vector<IoHash>& OutLooseChunkHashes) {
+ auto ParseBuildPartManifest = [&Output](StorageInstance& Storage,
+ const Oid& BuildId,
+ const Oid& BuildPartId,
+ CbObject BuildPartManifest,
+ std::span<const std::string> IncludeWildcards,
+ std::span<const std::string> ExcludeWildcards,
+ ChunkedFolderContent& OutRemoteContent,
+ std::vector<ChunkBlockDescription>& OutBlockDescriptions,
+ std::vector<IoHash>& OutLooseChunkHashes) {
std::vector<uint32_t> AbsoluteChunkOrders;
std::vector<uint64_t> LooseChunkRawSizes;
std::vector<IoHash> BlockRawHashes;
@@ -1213,17 +1212,16 @@ namespace {
// TODO: GetBlockDescriptions for all BlockRawHashes in one go - check for local block descriptions when we cache them
{
- std::unique_ptr<OperationLogOutput> OperationLogOutput(CreateConsoleLogOutput(ProgressMode));
- bool AttemptFallback = false;
- OutBlockDescriptions = GetBlockDescriptions(*OperationLogOutput,
- *Storage.BuildStorage,
- Storage.BuildCacheStorage.get(),
- BuildId,
- BuildPartId,
- BlockRawHashes,
- AttemptFallback,
- IsQuiet,
- IsVerbose);
+ bool AttemptFallback = false;
+ OutBlockDescriptions = GetBlockDescriptions(Output,
+ *Storage.BuildStorage,
+ Storage.BuildCacheStorage.get(),
+ BuildId,
+ BuildPartId,
+ BlockRawHashes,
+ AttemptFallback,
+ IsQuiet,
+ IsVerbose);
}
CalculateLocalChunkOrders(AbsoluteChunkOrders,
@@ -1669,7 +1667,8 @@ namespace {
bool AppendNewContent = false;
};
- void DownloadFolder(ThreadWorkers& Workers,
+ void DownloadFolder(OperationLogOutput& Output,
+ ThreadWorkers& Workers,
StorageInstance& Storage,
const Oid& BuildId,
const std::vector<Oid>& BuildPartIds,
@@ -1720,7 +1719,8 @@ namespace {
ProgressBar::SetLogOperationProgress(ProgressMode, TaskSteps::CompareState, TaskSteps::StepCount);
- ChunkedFolderContent RemoteContent = GetRemoteContent(Storage,
+ ChunkedFolderContent RemoteContent = GetRemoteContent(Output,
+ Storage,
BuildId,
AllBuildParts,
Options.IncludeWildcards,
@@ -1875,9 +1875,8 @@ namespace {
ProgressBar::SetLogOperationProgress(ProgressMode, TaskSteps::Download, TaskSteps::StepCount);
- std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode));
- BuildsOperationUpdateFolder Updater(
- *Output,
+ BuildsOperationUpdateFolder Updater(
+ Output,
Storage,
AbortFlag,
PauseFlag,
@@ -1892,24 +1891,24 @@ namespace {
BlockDescriptions,
LooseChunkHashes,
BuildsOperationUpdateFolder::Options{
- .IsQuiet = IsQuiet,
- .IsVerbose = IsVerbose,
- .AllowFileClone = Options.AllowFileClone,
- .UseSparseFiles = UseSparseFiles,
- .SystemRootDir = Options.SystemRootDir,
- .ZenFolderPath = Options.ZenFolderPath,
- .LargeAttachmentSize = LargeAttachmentSize,
- .PreferredMultipartChunkSize = PreferredMultipartChunkSize,
- .PartialBlockRequestMode = Options.PartialBlockRequestMode,
- .WipeTargetFolder = Options.CleanTargetFolder,
- .PrimeCacheOnly = Options.PrimeCacheOnly,
- .EnableOtherDownloadsScavenging = Options.EnableOtherDownloadsScavenging,
- .EnableTargetFolderScavenging = Options.EnableTargetFolderScavenging || Options.AppendNewContent,
- .ValidateCompletedSequences = Options.PostDownloadVerify,
- .ExcludeFolders = DefaultExcludeFolders,
- .ExcludeExtensions = DefaultExcludeExtensions,
- .MaximumInMemoryPayloadSize = Options.MaximumInMemoryPayloadSize,
- .PopulateCache = Options.PopulateCache});
+ .IsQuiet = IsQuiet,
+ .IsVerbose = IsVerbose,
+ .AllowFileClone = Options.AllowFileClone,
+ .UseSparseFiles = UseSparseFiles,
+ .SystemRootDir = Options.SystemRootDir,
+ .ZenFolderPath = Options.ZenFolderPath,
+ .LargeAttachmentSize = LargeAttachmentSize,
+ .PreferredMultipartChunkSize = PreferredMultipartChunkSize,
+ .PartialBlockRequestMode = Options.PartialBlockRequestMode,
+ .WipeTargetFolder = Options.CleanTargetFolder,
+ .PrimeCacheOnly = Options.PrimeCacheOnly,
+ .EnableOtherDownloadsScavenging = Options.EnableOtherDownloadsScavenging,
+ .EnableTargetFolderScavenging = Options.EnableTargetFolderScavenging || Options.AppendNewContent,
+ .ValidateCompletedSequences = Options.PostDownloadVerify,
+ .ExcludeFolders = DefaultExcludeFolders,
+ .ExcludeExtensions = DefaultExcludeExtensions,
+ .MaximumInMemoryPayloadSize = Options.MaximumInMemoryPayloadSize,
+ .PopulateCache = Options.PopulateCache});
{
ProgressBar::PushLogOperation(ProgressMode, "Download");
auto _ = MakeGuard([]() { ProgressBar::PopLogOperation(ProgressMode); });
@@ -3001,6 +3000,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
std::unique_ptr<AuthMgr> Auth;
+ std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode));
+
auto CreateBuildStorage = [&](BuildStorageBase::Statistics& StorageStats,
BuildStorageCache::Statistics& StorageCacheStats,
const std::filesystem::path& TempPath,
@@ -3035,7 +3036,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
m_Verbose);
BuildStorageResolveResult ResolveRes =
- ResolveBuildStorage(ClientSettings, m_Host, m_OverrideHost, m_ZenCacheHost, ZenCacheResolveMode::All, m_Verbose);
+ ResolveBuildStorage(*Output, ClientSettings, m_Host, m_OverrideHost, m_ZenCacheHost, ZenCacheResolveMode::All, m_Verbose);
if (!ResolveRes.HostUrl.empty())
{
ClientSettings.AssumeHttp2 = ResolveRes.HostAssumeHttp2;
@@ -3607,7 +3608,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
const std::filesystem::path TempDir = ZenTempFolderPath(m_ZenFolderPath);
- UploadFolder(Workers,
+ UploadFolder(*Output,
+ Workers,
Storage,
BuildId,
BuildPartId,
@@ -3627,7 +3629,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
{
if (m_PostUploadVerify)
{
- ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
+ ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
}
}
@@ -3743,7 +3745,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
throw OptionParseException("'--append' conflicts with '--clean'", SubOption->help());
}
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
BuildPartIds,
@@ -3889,8 +3892,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
ProgressBar::SetLogOperationName(ProgressMode, "Prime Cache");
- std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode));
-
BuildsOperationPrimeCache PrimeOp(*Output,
Storage,
AbortFlag,
@@ -4019,7 +4020,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
const Oid BuildPartId = m_BuildPartName.empty() ? Oid::Zero : ParseBuildPartId();
- ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
+ ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
if (AbortFlag)
{
@@ -4068,7 +4069,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
{
throw OptionParseException(fmt::format("'--build-id' ('{}') is malformed", BuildIdString), SubOption->help());
}
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{},
@@ -4234,7 +4236,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
const std::filesystem::path UploadTempDir = UploadTempDirectory(m_Path);
// std::filesystem::path UploadTempDir = m_ZenFolderPath / "upload_tmp";
- UploadFolder(Workers,
+ UploadFolder(*Output,
+ Workers,
Storage,
BuildId,
BuildPartId,
@@ -4254,7 +4257,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
throw std::runtime_error("Test aborted. (Upload build)");
}
- ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
+ ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
if (!m_IncludeWildcard.empty() || !m_ExcludeWildcard.empty())
{
@@ -4266,7 +4269,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
std::vector<std::string> ExcludeWildcards;
ParseFileFilters(IncludeWildcards, ExcludeWildcards);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4295,7 +4299,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
BuildPartId,
m_BuildPartName,
DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4320,7 +4325,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nDownload Full Build {}, Part {} ({}) to '{}'", BuildId, BuildPartId, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4346,7 +4352,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}'", BuildId, BuildPartId, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4369,7 +4376,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nRe-download Build {}, Part {} ({}) to '{}' (identical target)", BuildId, BuildPartId, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4484,7 +4492,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
ScrambleDir(DownloadPath);
ZEN_CONSOLE("\nRe-download Build {}, Part {} ({}) to '{}' (scrambled target)", BuildId, BuildPartId, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4518,7 +4527,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
ZEN_CONSOLE("\nUpload scrambled Build {}, Part {} ({})\n{}\n", BuildId2, BuildPartId2, m_BuildPartName, SB.ToView());
}
- UploadFolder(Workers,
+ UploadFolder(*Output,
+ Workers,
Storage,
BuildId2,
BuildPartId2,
@@ -4538,10 +4548,11 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
throw std::runtime_error("Test aborted. (Upload scrambled)");
}
- ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
+ ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName);
ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (original)", BuildId, BuildPartId, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4564,7 +4575,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (scrambled)", BuildId2, BuildPartId2, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId2,
{BuildPartId2},
@@ -4586,7 +4598,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nRe-download Build {}, Part {} ({}) to '{}' (scrambled)", BuildId2, BuildPartId2, m_BuildPartName, DownloadPath);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId2,
{BuildPartId2},
@@ -4608,7 +4621,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (original)", BuildId, BuildPartId, m_BuildPartName, DownloadPath2);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},
@@ -4630,7 +4644,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
}
ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (original)", BuildId, BuildPartId, m_BuildPartName, DownloadPath3);
- DownloadFolder(Workers,
+ DownloadFolder(*Output,
+ Workers,
Storage,
BuildId,
{BuildPartId},