From b9e70662dfba7a9b5a674a6ad3c5194e2aec3a09 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Fri, 12 Jul 2024 12:11:02 +0200 Subject: Use a fixed HashFunction in ActionDescription --- src/buildtool/build_engine/target_map/utils.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/buildtool/build_engine/target_map/utils.cpp') diff --git a/src/buildtool/build_engine/target_map/utils.cpp b/src/buildtool/build_engine/target_map/utils.cpp index 79d48ed0..cb7ad42d 100644 --- a/src/buildtool/build_engine/target_map/utils.cpp +++ b/src/buildtool/build_engine/target_map/utils.cpp @@ -185,10 +185,11 @@ auto BuildMaps::Target::Utils::getTainted( } namespace { -auto hash_vector(std::vector const& vec) -> std::string { - auto hasher = HashFunction::Instance().Hasher(); +auto hash_vector(HashFunction hash_function, + std::vector const& vec) -> std::string { + auto hasher = hash_function.Hasher(); for (auto const& s : vec) { - hasher.Update(HashFunction::Instance().ComputeHash(s).Bytes()); + hasher.Update(hash_function.ComputeHash(s).Bytes()); } return std::move(hasher).Finalize().Bytes(); } @@ -204,12 +205,17 @@ auto BuildMaps::Target::Utils::createAction( double timeout_scale, const ExpressionPtr& execution_properties_exp, const ExpressionPtr& inputs_exp) -> ActionDescription::Ptr { - auto hasher = HashFunction::Instance().Hasher(); - hasher.Update(hash_vector(output_files)); - hasher.Update(hash_vector(output_dirs)); - hasher.Update(hash_vector(command)); + // The type of HashFunction is irrelevant here. It is used for + // identification and quick comparison of descriptions. SHA256 is used. + HashFunction hash_function{HashFunction::JustHash::Compatible}; + auto hasher = hash_function.Hasher(); + + hasher.Update(hash_vector(hash_function, output_files)); + hasher.Update(hash_vector(hash_function, output_dirs)); + hasher.Update(hash_vector(hash_function, command)); hasher.Update(env->ToHash()); - hasher.Update(hash_vector(may_fail ? std::vector{*may_fail} + hasher.Update(hash_vector(hash_function, + may_fail ? std::vector{*may_fail} : std::vector{})); hasher.Update(no_cache ? std::string{"N"} : std::string{"Y"}); hasher.Update(fmt::format("{:+24a}", timeout_scale)); -- cgit v1.2.3