summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2023-03-24 10:19:00 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2023-03-24 10:47:18 +0100
commitbaa9fca6c850f9fdb3afa6dc43b624b54add7011 (patch)
treee79346fc21b46ee6f33d35cf1ef1bc9f9e110bb5 /src
parent6ac5a7d2e8f6d61b55c4fbea58d76aad3d480180 (diff)
downloadjustbuild-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.hpp8
-rw-r--r--src/buildtool/graph_traverser/graph_traverser.hpp6
-rw-r--r--src/buildtool/main/install_cas.cpp8
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)) {