diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-10-02 12:28:17 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-10-07 13:37:39 +0200 |
commit | e8085c1c209e98a31c32e2032d02d620449006e4 (patch) | |
tree | 63dd86fdce20557d8cc3723a818dc082874167bc /src/buildtool/execution_api/remote/bazel/bazel_action.cpp | |
parent | c461673aad0970bc89f6336c966d2305eaae0dbb (diff) | |
download | justbuild-e8085c1c209e98a31c32e2032d02d620449006e4.tar.gz |
Enable bugprone-unhandled-exception-at-new check.
Diffstat (limited to 'src/buildtool/execution_api/remote/bazel/bazel_action.cpp')
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_action.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_action.cpp b/src/buildtool/execution_api/remote/bazel/bazel_action.cpp index 15ca949f..f805c6fc 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_action.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_action.cpp @@ -69,6 +69,22 @@ auto BazelAction::Execute(Logger const* logger) noexcept action->hash()); } + auto create_response = [](Logger const* logger, + std::string const& action_hash, + auto&&... args) -> IExecutionResponse::Ptr { + try { + return IExecutionResponse::Ptr{new BazelResponse{ + action_hash, std::forward<decltype(args)>(args)...}}; + } catch (...) { + if (logger != nullptr) { + logger->Emit(LogLevel::Error, + "failed to create a response for {}", + action_hash); + } + } + return nullptr; + }; + if (do_cache) { if (auto result = network_->GetCachedActionResult(*action, output_files_)) { @@ -77,8 +93,11 @@ auto BazelAction::Execute(Logger const* logger) noexcept *result, output_files_, output_dirs_) ) { - return IExecutionResponse::Ptr{new BazelResponse{ - action->hash(), network_, {*result, true}}}; + return create_response( + logger, + action->hash(), + network_, + BazelExecutionClient::ExecutionOutput{*result, true}); } } } @@ -101,11 +120,13 @@ auto BazelAction::Execute(Logger const* logger) noexcept } output->cached_result = true; - return IExecutionResponse::Ptr{new BazelResponse{ - action_cached->hash(), network_, std::move(*output)}}; + return create_response(logger, + action_cached->hash(), + network_, + *std::move(output)); } - return IExecutionResponse::Ptr{new BazelResponse{ - action->hash(), network_, std::move(*output)}}; + return create_response( + logger, action->hash(), network_, *std::move(output)); } } |