diff options
-rw-r--r-- | src/buildtool/build_engine/expression/target_result.cpp | 52 | ||||
-rw-r--r-- | src/buildtool/build_engine/target_map/target_cache.cpp | 32 | ||||
-rw-r--r-- | src/buildtool/main/version.cpp | 2 |
3 files changed, 50 insertions, 36 deletions
diff --git a/src/buildtool/build_engine/expression/target_result.cpp b/src/buildtool/build_engine/expression/target_result.cpp index cfc8b1fe..33df5dfb 100644 --- a/src/buildtool/build_engine/expression/target_result.cpp +++ b/src/buildtool/build_engine/expression/target_result.cpp @@ -138,8 +138,28 @@ auto SerializeTargetResultWithReplacement( } else if (expr->IsResult()) { provided_results->emplace_back(id); - json = SerializeTargetResultWithReplacement(expr->Result(), - replacements); + auto const& result = expr->Result(); + auto artifact_stage = SerializeExpression(nodes, + provided_artifacts, + provided_nodes, + provided_results, + result.artifact_stage, + replacements); + auto runfiles = SerializeExpression(nodes, + provided_artifacts, + provided_nodes, + provided_results, + result.runfiles, + replacements); + auto provides = SerializeExpression(nodes, + provided_artifacts, + provided_nodes, + provided_results, + result.provides, + replacements); + json = nlohmann::json({{"artifact_stage", artifact_stage}, + {"runfiles", runfiles}, + {"provides", provides}}); } else if (expr->IsArtifact()) { provided_artifacts->emplace_back(id); @@ -217,11 +237,29 @@ auto SerializeTargetResultWithReplacement( return ExpressionPtr{nullptr}; } if (provided_results.contains(id)) { - auto result = TargetResult::FromJson(json); - if (result) { - auto result_exp = ExpressionPtr{*result}; - sofar->emplace(id, result_exp); - return result_exp; + auto artifact_stage = DeserializeExpression(json["artifact_stage"], + nodes, + provided_artifacts, + provided_nodes, + provided_results, + sofar); + auto runfiles = DeserializeExpression(json["runfiles"], + nodes, + provided_artifacts, + provided_nodes, + provided_results, + sofar); + auto provides = DeserializeExpression(json["provides"], + nodes, + provided_artifacts, + provided_nodes, + provided_results, + sofar); + if (artifact_stage and runfiles and provides) { + return ExpressionPtr{TargetResult{std::move(artifact_stage), + std::move(provides), + std::move(runfiles), + /*is_cacheable=*/true}}; } return ExpressionPtr{nullptr}; } diff --git a/src/buildtool/build_engine/target_map/target_cache.cpp b/src/buildtool/build_engine/target_map/target_cache.cpp index f1a0c750..b2f3b209 100644 --- a/src/buildtool/build_engine/target_map/target_cache.cpp +++ b/src/buildtool/build_engine/target_map/target_cache.cpp @@ -92,12 +92,6 @@ auto TargetCache::Entry::ToResult() const noexcept return true; } -// Function prototype for recursive call in ScanProvidesMap -auto ScanTargetResult( - gsl::not_null<std::vector<Artifact::ObjectInfo>*> const& /*infos*/, - nlohmann::json const& /*json*/) -> bool; - -// NOLINTNEXTLINE(misc-no-recursion) [[nodiscard]] auto ScanProvidesMap( gsl::not_null<std::vector<Artifact::ObjectInfo>*> const& infos, nlohmann::json const& json) -> bool { @@ -105,8 +99,6 @@ auto ScanTargetResult( return false; } auto const& nodes = json["nodes"]; - - // Process provided artifacts auto const& provided_artifacts = json["provided_artifacts"]; infos->reserve(infos->size() + provided_artifacts.size()); std::transform( @@ -116,32 +108,16 @@ auto ScanTargetResult( [&nodes](auto const& item) { return ToObjectInfo(nodes[item.template get<std::string>()]); }); - - // Process provided results - auto const& provided_results = json["provided_results"]; - return std::all_of(provided_results.begin(), - provided_results.end(), - // NOLINTNEXTLINE(misc-no-recursion) - [&infos, &nodes](auto const& item) { - return ScanTargetResult( - infos, nodes[item.template get<std::string>()]); - }); -} - -// NOLINTNEXTLINE(misc-no-recursion) -[[nodiscard]] auto ScanTargetResult( - gsl::not_null<std::vector<Artifact::ObjectInfo>*> const& infos, - nlohmann::json const& result) -> bool { - return ScanArtifactMap(infos, result["artifacts"]) and - ScanArtifactMap(infos, result["runfiles"]) and - ScanProvidesMap(infos, result["provides"]); + return true; } auto TargetCache::Entry::ToArtifacts( gsl::not_null<std::vector<Artifact::ObjectInfo>*> const& infos) const noexcept -> bool { try { - if (ScanTargetResult(infos, desc_)) { + if (ScanArtifactMap(infos, desc_["artifacts"]) and + ScanArtifactMap(infos, desc_["runfiles"]) and + ScanProvidesMap(infos, desc_["provides"])) { return true; } } catch (std::exception const& ex) { diff --git a/src/buildtool/main/version.cpp b/src/buildtool/main/version.cpp index 08da2cf3..748c491c 100644 --- a/src/buildtool/main/version.cpp +++ b/src/buildtool/main/version.cpp @@ -21,7 +21,7 @@ auto version() -> std::string { std::size_t major = 1; std::size_t minor = 0; std::size_t revision = 0; - std::string suffix = "~beta3"; + std::string suffix = "~beta4"; #ifdef VERSION_EXTRA_SUFFIX suffix += VERSION_EXTRA_SUFFIX; #endif |