summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/cli.hpp6
-rw-r--r--src/buildtool/main/TARGETS1
-rw-r--r--src/buildtool/main/main.cpp29
-rw-r--r--src/other_tools/just_mr/utils.hpp5
4 files changed, 37 insertions, 4 deletions
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp
index b9c2feb9..7c2cd65c 100644
--- a/src/buildtool/common/cli.hpp
+++ b/src/buildtool/common/cli.hpp
@@ -310,7 +310,7 @@ static inline auto SetupDiagnosticArguments(
->type_name("PATH");
}
-static inline auto SetupEndpointArguments(
+static inline auto SetupCacheArguments(
gsl::not_null<CLI::App*> const& app,
gsl::not_null<EndpointArguments*> const& clargs) {
app->add_option_function<std::string>(
@@ -321,7 +321,11 @@ static inline auto SetupEndpointArguments(
},
"Root for local CAS, cache, and build directories.")
->type_name("PATH");
+}
+static inline auto SetupEndpointArguments(
+ gsl::not_null<CLI::App*> const& app,
+ gsl::not_null<EndpointArguments*> const& clargs) {
app->add_option("-r,--remote-execution-address",
clargs->remote_execution_address,
"Address of the remote execution service.")
diff --git a/src/buildtool/main/TARGETS b/src/buildtool/main/TARGETS
index d139d1d8..46c61343 100644
--- a/src/buildtool/main/TARGETS
+++ b/src/buildtool/main/TARGETS
@@ -10,6 +10,7 @@
, ["src/buildtool/graph_traverser", "graph_traverser"]
, ["src/buildtool/logging", "logging"]
, ["src/buildtool/progress_reporting", "base_progress_reporter"]
+ , ["src/buildtool/execution_api/local", "garbage_collector"]
, ["src/buildtool/build_engine/target_map", "result_map"]
, ["src/buildtool/build_engine/target_map", "target_cache"]
, ["src/buildtool/build_engine/target_map", "target_cache_key"]
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index 5fab02f6..60653651 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -32,6 +32,7 @@
#include "src/buildtool/common/cli.hpp"
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
+#include "src/buildtool/execution_api/local/garbage_collector.hpp"
#include "src/buildtool/main/analyse.hpp"
#include "src/buildtool/main/constants.hpp"
#include "src/buildtool/main/describe.hpp"
@@ -66,7 +67,8 @@ enum class SubCommand {
kInstall,
kRebuild,
kInstallCas,
- kTraverse
+ kTraverse,
+ kGc
};
struct CommandLineArguments {
@@ -102,6 +104,7 @@ auto SetupAnalyseCommandArguments(
SetupCommonArguments(app, &clargs->common);
SetupLogArguments(app, &clargs->log);
SetupAnalysisArguments(app, &clargs->analysis);
+ SetupCacheArguments(app, &clargs->endpoint);
SetupEndpointArguments(app, &clargs->endpoint);
SetupDiagnosticArguments(app, &clargs->diagnose);
SetupCompatibilityArguments(app);
@@ -114,6 +117,7 @@ auto SetupBuildCommandArguments(
SetupCommonArguments(app, &clargs->common);
SetupLogArguments(app, &clargs->log);
SetupAnalysisArguments(app, &clargs->analysis);
+ SetupCacheArguments(app, &clargs->endpoint);
SetupEndpointArguments(app, &clargs->endpoint);
SetupAuthArguments(app, &clargs->auth);
SetupBuildArguments(app, &clargs->build);
@@ -141,6 +145,7 @@ auto SetupInstallCasCommandArguments(
gsl::not_null<CLI::App*> const& app,
gsl::not_null<CommandLineArguments*> const& clargs) {
SetupCompatibilityArguments(app);
+ SetupCacheArguments(app, &clargs->endpoint);
SetupEndpointArguments(app, &clargs->endpoint);
SetupAuthArguments(app, &clargs->auth);
SetupFetchArguments(app, &clargs->fetch);
@@ -153,6 +158,7 @@ auto SetupTraverseCommandArguments(
gsl::not_null<CommandLineArguments*> const& clargs) {
SetupCommonArguments(app, &clargs->common);
SetupLogArguments(app, &clargs->log);
+ SetupCacheArguments(app, &clargs->endpoint);
SetupEndpointArguments(app, &clargs->endpoint);
SetupAuthArguments(app, &clargs->auth);
SetupGraphArguments(app, &clargs->graph); // instead of analysis
@@ -161,6 +167,13 @@ auto SetupTraverseCommandArguments(
SetupCompatibilityArguments(app);
}
+/// \brief Setup arguments for sub command "just gc".
+auto SetupGcCommandArguments(
+ gsl::not_null<CLI::App*> const& app,
+ gsl::not_null<CommandLineArguments*> const& clargs) {
+ SetupCacheArguments(app, &clargs->endpoint);
+}
+
auto ParseCommandLineArguments(int argc, char const* const* argv)
-> CommandLineArguments {
CLI::App app("just, a generic build tool");
@@ -179,6 +192,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_gc =
+ app.add_subcommand("gc", "Trigger garbage collection of local cache.");
auto* cmd_traverse =
app.group("") // group for creating hidden options
->add_subcommand("traverse",
@@ -193,6 +208,7 @@ auto ParseCommandLineArguments(int argc, char const* const* argv)
SetupRebuildCommandArguments(cmd_rebuild, &clargs);
SetupInstallCasCommandArguments(cmd_install_cas, &clargs);
SetupTraverseCommandArguments(cmd_traverse, &clargs);
+ SetupGcCommandArguments(cmd_gc, &clargs);
try {
app.parse(argc, argv);
@@ -227,6 +243,9 @@ auto ParseCommandLineArguments(int argc, char const* const* argv)
else if (*cmd_traverse) {
clargs.cmd = SubCommand::kTraverse;
}
+ else if (*cmd_gc) {
+ clargs.cmd = SubCommand::kGc;
+ }
return clargs;
}
@@ -1142,6 +1161,14 @@ auto main(int argc, char* argv[]) -> int {
arguments.auth,
arguments.build,
arguments.rebuild);
+
+ if (arguments.cmd == SubCommand::kGc) {
+ if (GarbageCollector::TriggerGarbageCollection()) {
+ return kExitSuccess;
+ }
+ return kExitFailure;
+ }
+
#endif
auto jobs = arguments.build.build_jobs > 0 ? arguments.build.build_jobs
diff --git a/src/other_tools/just_mr/utils.hpp b/src/other_tools/just_mr/utils.hpp
index dffed7c1..16274657 100644
--- a/src/other_tools/just_mr/utils.hpp
+++ b/src/other_tools/just_mr/utils.hpp
@@ -57,7 +57,8 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{
{"build", {true, true}},
{"install", {true, true}},
{"rebuild", {true, true}},
- {"install-cas", {false, true}}};
+ {"install-cas", {false, true}},
+ {"gc", {false, true}}};
nlohmann::json const kDefaultConfigLocations = nlohmann::json::array(
{{{"root", "workspace"}, {"path", "repos.json"}},
@@ -172,4 +173,4 @@ auto ResolveRepo(ExpressionPtr const& repo_desc,
} // namespace JustMR
-#endif // INCLUDED_SRC_OTHER_TOOLS_JUST_MR_UTILS_HPP \ No newline at end of file
+#endif // INCLUDED_SRC_OTHER_TOOLS_JUST_MR_UTILS_HPP