diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/common/cli.hpp | 28 | ||||
-rw-r--r-- | src/buildtool/main/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/main/cli.cpp | 20 | ||||
-rw-r--r-- | src/buildtool/main/cli.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/main/main.cpp | 6 | ||||
-rw-r--r-- | src/other_tools/just_mr/utils.hpp | 9 |
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, |