summaryrefslogtreecommitdiff
path: root/src/buildtool/main/main.cpp
diff options
context:
space:
mode:
authorSascha Roloff <sascha.roloff@huawei.com>2022-12-23 15:03:04 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2023-01-20 15:47:43 +0100
commit5129bc284cf2372bfbc87b00d3b9bd1117734c43 (patch)
tree0a9b36478fab08ff55dd854e45f6e262931e2e1b /src/buildtool/main/main.cpp
parent0db0064273920c835342dd168f8213b6a567e8c9 (diff)
downloadjustbuild-5129bc284cf2372bfbc87b00d3b9bd1117734c43.tar.gz
Add gc subcommand
Diffstat (limited to 'src/buildtool/main/main.cpp')
-rw-r--r--src/buildtool/main/main.cpp29
1 files changed, 28 insertions, 1 deletions
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