diff options
Diffstat (limited to 'src/buildtool/main/main.cpp')
-rw-r--r-- | src/buildtool/main/main.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index b2c04be7..8cc81449 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -49,6 +49,8 @@ #include "src/buildtool/graph_traverser/graph_traverser.hpp" #include "src/buildtool/main/serve.hpp" #include "src/buildtool/progress_reporting/progress_reporter.hpp" +#include "src/buildtool/serve_api/remote/config.hpp" +#include "src/buildtool/serve_api/serve_service/serve_server_implementation.hpp" #include "src/buildtool/storage/garbage_collector.hpp" #endif // BOOTSTRAP_BUILD_TOOL #include "src/buildtool/logging/log_config.hpp" @@ -132,6 +134,16 @@ void SetupExecutionConfig(EndpointArguments const& eargs, } } +void SetupServeConfig(ServeArguments const& srvargs) { + using RemoteConfig = RemoteServeConfig; + if (not srvargs.repositories.empty() and + not RemoteConfig::SetKnownRepositories(srvargs.repositories)) { + Logger::Log(LogLevel::Error, + "setting serve service repositories failed."); + std::exit(kExitFailure); + } +} + void SetupAuthConfig(CommonAuthArguments const& authargs, ClientAuthArguments const& client_authargs, ServerAuthArguments const& server_authargs) { @@ -228,6 +240,39 @@ void SetupExecutionServiceConfig(ServiceArguments const& args) { } } +void SetupServeServiceConfig(ServiceArguments const& args) { + if (args.port) { + if (!ServeServerImpl::SetPort(*args.port)) { + Logger::Log(LogLevel::Error, "Invalid port '{}'", *args.port); + std::exit(kExitFailure); + } + } + if (args.info_file) { + if (!ServeServerImpl::SetInfoFile(*args.info_file)) { + Logger::Log(LogLevel::Error, + "Invalid info-file '{}'", + args.info_file->string()); + std::exit(kExitFailure); + } + } + if (args.interface) { + if (!ServeServerImpl::SetInterface(*args.interface)) { + Logger::Log(LogLevel::Error, + "Invalid interface '{}'", + args.info_file->string()); + std::exit(kExitFailure); + } + } + if (args.pid_file) { + if (!ServeServerImpl::SetPidFile(*args.pid_file)) { + Logger::Log(LogLevel::Error, + "Invalid pid-file '{}'", + args.info_file->string()); + std::exit(kExitFailure); + } + } +} + void SetupHashFunction() { HashFunction::SetHashType(Compatibility::IsCompatible() ? HashFunction::JustHash::Compatible @@ -851,6 +896,7 @@ auto main(int argc, char* argv[]) -> int { SetupHashFunction(); SetupExecutionConfig( arguments.endpoint, arguments.build, arguments.rebuild); + SetupServeConfig(arguments.serve); SetupAuthConfig(arguments.auth, arguments.cauth, arguments.sauth); if (arguments.cmd == SubCommand::kGc) { @@ -867,6 +913,14 @@ auto main(int argc, char* argv[]) -> int { } return kExitSuccess; } + + if (arguments.cmd == SubCommand::kServe) { + SetupServeServiceConfig(arguments.service); + if (!ServeServerImpl::Instance().Run()) { + return kExitFailure; + } + return kExitSuccess; + } #endif // BOOTSTRAP_BUILD_TOOL auto jobs = arguments.build.build_jobs > 0 ? arguments.build.build_jobs |