diff options
Diffstat (limited to 'src/buildtool/main/main.cpp')
-rw-r--r-- | src/buildtool/main/main.cpp | 29 |
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 |