diff options
Diffstat (limited to 'src')
6 files changed, 24 insertions, 14 deletions
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index f4d0f566..0063e9bd 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -867,8 +867,14 @@ auto main(int argc, char* argv[]) -> int { if (arguments.cmd == SubCommand::kServe) { SetupServeServiceConfig(arguments.service); + std::optional<gsl::not_null<const ServeApi*>> serve; + if (RemoteServeConfig::Instance().RemoteAddress()) { + serve = &ServeApi::Instance(); + } + if (!ServeServerImpl::Instance().Run( RemoteServeConfig::Instance(), + serve, !RemoteExecutionConfig::RemoteAddress())) { return kExitFailure; } diff --git a/src/buildtool/serve_api/serve_service/TARGETS b/src/buildtool/serve_api/serve_service/TARGETS index fe9e2b7f..ede2bb68 100644 --- a/src/buildtool/serve_api/serve_service/TARGETS +++ b/src/buildtool/serve_api/serve_service/TARGETS @@ -48,6 +48,7 @@ , "deps": [ ["src/buildtool/logging", "logging"] , ["src/buildtool/serve_api/remote", "config"] + , ["src/buildtool/serve_api/remote", "serve_api"] ] , "stage": ["src", "buildtool", "serve_api", "serve_service"] , "private-deps": diff --git a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp index eee4c5cc..b8b092f8 100644 --- a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp +++ b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp @@ -60,8 +60,10 @@ auto TryWrite(std::string const& file, T const& content) noexcept -> bool { } } // namespace -auto ServeServerImpl::Run(RemoteServeConfig const& serve_config, - bool with_execute) -> bool { +auto ServeServerImpl::Run( + RemoteServeConfig const& serve_config, + std::optional<gsl::not_null<const ServeApi*>> const& serve, + bool with_execute) -> bool { // make sure the git root directory is properly initialized if (not FileSystemManager::CreateDirectory(StorageConfig::GitRoot())) { Logger::Log(LogLevel::Error, @@ -77,7 +79,7 @@ auto ServeServerImpl::Run(RemoteServeConfig const& serve_config, } SourceTreeService sts{serve_config}; - TargetService ts{serve_config}; + TargetService ts{serve_config, serve}; ConfigurationService cs{}; grpc::ServerBuilder builder; diff --git a/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp b/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp index 0e1ea905..f9eea2f6 100644 --- a/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp +++ b/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp @@ -19,6 +19,7 @@ #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/serve_api/remote/config.hpp" +#include "src/buildtool/serve_api/remote/serve_api.hpp" class ServeServerImpl { public: @@ -50,9 +51,12 @@ class ServeServerImpl { /// \brief Start the serve service. /// \param serve_config RemoteServeConfig to be used. + /// \param serve ServeApi to be used. /// \param with_execute Flag specifying if just serve should act also as /// just execute (i.e., start remote execution services with same interface) - auto Run(RemoteServeConfig const& serve_config, bool with_execute) -> bool; + auto Run(RemoteServeConfig const& serve_config, + std::optional<gsl::not_null<const ServeApi*>> const& serve, + bool with_execute) -> bool; ~ServeServerImpl() = default; private: diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index b34a7a63..024e5bae 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -38,7 +38,6 @@ #include "src/buildtool/multithreading/task_system.hpp" #include "src/buildtool/progress_reporting/progress.hpp" #include "src/buildtool/progress_reporting/progress_reporter.hpp" -#include "src/buildtool/serve_api/remote/serve_api.hpp" #include "src/buildtool/serve_api/serve_service/target_utils.hpp" #include "src/buildtool/storage/config.hpp" #include "src/buildtool/storage/storage.hpp" @@ -453,13 +452,8 @@ auto TargetService::ServeTarget( AnalyseContext analyse_ctx{.repo_config = &repository_config, .target_cache = tc, .statistics = &stats, - .progress = &progress}; - -#ifndef BOOTSTRAP_BUILD_TOOL - if (RemoteServeConfig::Instance().RemoteAddress()) { - analyse_ctx.serve = &ServeApi::Instance(); - } -#endif // BOOTSTRAP_BUILD_TOOL + .progress = &progress, + .serve = serve_}; // analyse the configured target auto result = AnalyseTarget(&analyse_ctx, diff --git a/src/buildtool/serve_api/serve_service/target.hpp b/src/buildtool/serve_api/serve_service/target.hpp index 54ca107b..7e94c919 100644 --- a/src/buildtool/serve_api/serve_service/target.hpp +++ b/src/buildtool/serve_api/serve_service/target.hpp @@ -34,12 +34,14 @@ #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/serve_api/remote/config.hpp" +#include "src/buildtool/serve_api/remote/serve_api.hpp" // The target-level cache service. class TargetService final : public justbuild::just_serve::Target::Service { public: - explicit TargetService(RemoteServeConfig const& serve_config) noexcept - : serve_config_{serve_config} {} + TargetService(RemoteServeConfig const& serve_config, + std::optional<gsl::not_null<const ServeApi*>> serve) noexcept + : serve_config_{serve_config}, serve_(std::move(serve)) {} // Given a target-level caching key, returns the computed value. In doing // so, it can build on the associated endpoint passing the @@ -118,6 +120,7 @@ class TargetService final : public justbuild::just_serve::Target::Service { private: RemoteServeConfig const& serve_config_; + std::optional<gsl::not_null<const ServeApi*>> serve_; std::shared_ptr<Logger> logger_{std::make_shared<Logger>("target-service")}; // type of dispatch list; reduces verbosity |