diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-03-24 10:19:00 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-03-24 10:47:18 +0100 |
commit | baa9fca6c850f9fdb3afa6dc43b624b54add7011 (patch) | |
tree | e79346fc21b46ee6f33d35cf1ef1bc9f9e110bb5 /src | |
parent | 6ac5a7d2e8f6d61b55c4fbea58d76aad3d480180 (diff) | |
download | justbuild-baa9fca6c850f9fdb3afa6dc43b624b54add7011.tar.gz |
just install{,-cas}: add --remember option
... asking just to transfer everyting installed to the local CAS first.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/common/cli.hpp | 8 | ||||
-rw-r--r-- | src/buildtool/graph_traverser/graph_traverser.hpp | 6 | ||||
-rw-r--r-- | src/buildtool/main/install_cas.cpp | 8 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp index 5a7c5882..9f5974d3 100644 --- a/src/buildtool/common/cli.hpp +++ b/src/buildtool/common/cli.hpp @@ -104,6 +104,7 @@ struct BuildArguments { /// \brief Arguments required for staging. struct StageArguments { std::filesystem::path output_dir{}; + bool remember{false}; }; /// \brief Arguments required for rebuilding. @@ -116,6 +117,7 @@ struct RebuildArguments { struct FetchArguments { std::string object_id{}; std::optional<std::filesystem::path> output_path{}; + bool remember{false}; bool raw_tree{}; }; @@ -424,6 +426,9 @@ static inline auto SetupStageArguments( "Path of the directory where outputs will be copied.") ->type_name("PATH") ->required(); + + app->add_flag( + "--remember", clargs->remember, "Copy object to local CAS first"); } static inline auto SetupRebuildArguments( @@ -463,6 +468,9 @@ static inline auto SetupFetchArguments( app->add_flag("--raw-tree", clargs->raw_tree, "Dump raw tree object (omit pretty printing)"); + + app->add_flag( + "--remember", clargs->remember, "Copy object to local CAS first"); } static inline auto SetupGraphArguments( diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp index 1d5b821d..05ac3a82 100644 --- a/src/buildtool/graph_traverser/graph_traverser.hpp +++ b/src/buildtool/graph_traverser/graph_traverser.hpp @@ -141,6 +141,12 @@ class GraphTraverser { failed_artifacts}; } + if (clargs_.stage->remember) { + if (not remote_api_->RetrieveToCas(*object_infos, GetLocalApi())) { + Logger::Log(LogLevel::Warning, "Failed to copy objects to CAS"); + } + } + auto output_paths = RetrieveOutputs(rel_paths, *object_infos); if (not output_paths) { return std::nullopt; diff --git a/src/buildtool/main/install_cas.cpp b/src/buildtool/main/install_cas.cpp index b56a1069..4566a1bb 100644 --- a/src/buildtool/main/install_cas.cpp +++ b/src/buildtool/main/install_cas.cpp @@ -67,6 +67,14 @@ auto FetchAndInstallArtifacts( FetchArguments const& clargs) -> bool { auto object_info = ObjectInfoFromLiberalString(clargs.object_id); + if (clargs.remember) { + if (not api->RetrieveToCas({object_info}, alternative_api)) { + Logger::Log(LogLevel::Warning, + "Failed to copy artifact {} to local CAS", + object_info.ToString()); + } + } + if (clargs.output_path) { auto output_path = (*clargs.output_path / "").parent_path(); if (FileSystemManager::IsDirectory(output_path)) { |