summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/cli.hpp28
-rw-r--r--src/buildtool/main/TARGETS1
-rw-r--r--src/buildtool/main/cli.cpp20
-rw-r--r--src/buildtool/main/cli.hpp2
-rw-r--r--src/buildtool/main/main.cpp6
-rw-r--r--src/other_tools/just_mr/utils.hpp9
6 files changed, 66 insertions, 0 deletions
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp
index 7b4f3987..6b6be63a 100644
--- a/src/buildtool/common/cli.hpp
+++ b/src/buildtool/common/cli.hpp
@@ -607,6 +607,34 @@ static inline auto SetupFetchArguments(
"--remember", clargs->remember, "Copy object to local CAS first");
}
+static inline auto SetupToAddArguments(
+ gsl::not_null<CLI::App*> const& app,
+ gsl::not_null<ToAddArguments*> const& clargs) {
+ app->add_option_function<std::string>(
+ "location",
+ [clargs](auto const& path_raw) {
+ std::filesystem::path in = ToNormalPath(path_raw);
+ if (not in.is_absolute()) {
+ try {
+ in = std::filesystem::absolute(in);
+ } catch (std::exception const& e) {
+ Logger::Log(LogLevel::Error,
+ "Failed to convert input path {} ({})",
+ path_raw,
+ e.what());
+ throw e;
+ }
+ }
+ clargs->location = in;
+ },
+ "The path on the local file system to be added to CAS")
+ ->required();
+ app->add_flag("--follow-symlinks",
+ clargs->follow_symlinks,
+ "Resolve the positional argument to not be a symbolic link "
+ "before adding it to CAS.");
+}
+
static inline auto SetupGraphArguments(
gsl::not_null<CLI::App*> const& app,
gsl::not_null<GraphArguments*> const& clargs) {
diff --git a/src/buildtool/main/TARGETS b/src/buildtool/main/TARGETS
index 7f293ee5..1dc35eaa 100644
--- a/src/buildtool/main/TARGETS
+++ b/src/buildtool/main/TARGETS
@@ -37,6 +37,7 @@
, "cli"
, "version"
, "analyse"
+ , "add_to_cas"
, "install_cas"
, "describe"
, "diagnose"
diff --git a/src/buildtool/main/cli.cpp b/src/buildtool/main/cli.cpp
index 449e12fd..39f0a17e 100644
--- a/src/buildtool/main/cli.cpp
+++ b/src/buildtool/main/cli.cpp
@@ -105,6 +105,20 @@ auto SetupInstallCasCommandArguments(
SetupRetryArguments(app, &clargs->retry);
}
+/// \brief Setup arguments for sub command "just install-cas".
+auto SetupAddToCasCommandArguments(
+ gsl::not_null<CLI::App*> const& app,
+ gsl::not_null<CommandLineArguments*> const& clargs) {
+ SetupCompatibilityArguments(app);
+ SetupCacheArguments(app, &clargs->endpoint);
+ SetupExecutionEndpointArguments(app, &clargs->endpoint);
+ SetupCommonAuthArguments(app, &clargs->auth);
+ SetupClientAuthArguments(app, &clargs->cauth);
+ SetupLogArguments(app, &clargs->log);
+ SetupRetryArguments(app, &clargs->retry);
+ SetupToAddArguments(app, &clargs->to_add);
+}
+
/// \brief Setup arguments for sub command "just traverse".
auto SetupTraverseCommandArguments(
gsl::not_null<CLI::App*> const& app,
@@ -173,6 +187,8 @@ auto ParseCommandLineArguments(int argc, char const* const* argv)
"rebuild", "Rebuild and compare artifacts to cached build.");
auto* cmd_install_cas =
app.add_subcommand("install-cas", "Fetch and stage artifact from CAS.");
+ auto* cmd_add_to_cas = app.add_subcommand(
+ "add-to-cas", "Add a local file or directory to CAS.");
auto* cmd_gc =
app.add_subcommand("gc", "Trigger garbage collection of local cache.");
auto* cmd_execution = app.add_subcommand(
@@ -192,6 +208,7 @@ auto ParseCommandLineArguments(int argc, char const* const* argv)
SetupInstallCommandArguments(cmd_install, &clargs);
SetupRebuildCommandArguments(cmd_rebuild, &clargs);
SetupInstallCasCommandArguments(cmd_install_cas, &clargs);
+ SetupAddToCasCommandArguments(cmd_add_to_cas, &clargs);
SetupTraverseCommandArguments(cmd_traverse, &clargs);
SetupGcCommandArguments(cmd_gc, &clargs);
SetupExecutionServiceCommandArguments(cmd_execution, &clargs);
@@ -226,6 +243,9 @@ auto ParseCommandLineArguments(int argc, char const* const* argv)
else if (*cmd_install_cas) {
clargs.cmd = SubCommand::kInstallCas;
}
+ else if (*cmd_add_to_cas) {
+ clargs.cmd = SubCommand::kAddToCas;
+ }
else if (*cmd_traverse) {
clargs.cmd = SubCommand::kTraverse;
}
diff --git a/src/buildtool/main/cli.hpp b/src/buildtool/main/cli.hpp
index 04ae2a16..e03e9bec 100644
--- a/src/buildtool/main/cli.hpp
+++ b/src/buildtool/main/cli.hpp
@@ -26,6 +26,7 @@ enum class SubCommand {
kInstall,
kRebuild,
kInstallCas,
+ kAddToCas,
kTraverse,
kGc,
kExecute,
@@ -53,6 +54,7 @@ struct CommandLineArguments {
ServeArguments serve;
RetryArguments retry;
GcArguments gc;
+ ToAddArguments to_add;
};
auto ParseCommandLineArguments(int argc, char const* const* argv)
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index ea17e9ea..0c5c0c15 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -41,6 +41,7 @@
#include "src/buildtool/logging/log_sink_cmdline.hpp"
#include "src/buildtool/logging/log_sink_file.hpp"
#include "src/buildtool/logging/logger.hpp"
+#include "src/buildtool/main/add_to_cas.hpp"
#include "src/buildtool/main/analyse.hpp"
#include "src/buildtool/main/build_utils.hpp"
#include "src/buildtool/main/cli.hpp"
@@ -953,6 +954,11 @@ auto main(int argc, char* argv[]) -> int {
? kExitSuccess
: kExitFailure;
}
+ if (arguments.cmd == SubCommand::kAddToCas) {
+ return AddArtifactsToCas(arguments.to_add, traverser.GetRemoteApi())
+ ? kExitSuccess
+ : kExitFailure;
+ }
#endif // BOOTSTRAP_BUILD_TOOL
auto [main_repo, main_ws_root] =
diff --git a/src/other_tools/just_mr/utils.hpp b/src/other_tools/just_mr/utils.hpp
index f35495c8..909918bd 100644
--- a/src/other_tools/just_mr/utils.hpp
+++ b/src/other_tools/just_mr/utils.hpp
@@ -111,6 +111,15 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{
.remote_props = true,
.serve = true,
.dispatch = true}},
+ {"add-to-cas",
+ {.config = false,
+ .build_root = true,
+ .launch = false,
+ .defines = false,
+ .remote = true,
+ .remote_props = false,
+ .serve = false,
+ .dispatch = false}},
{"install-cas",
{.config = false,
.build_root = true,