diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-27 11:44:05 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-28 13:44:06 +0100 |
commit | da0a7ddf2f84c4afcca144d670d1870506b91fe9 (patch) | |
tree | 0e5672210b6dafd6c37d4997f4312f3b4d8356bd | |
parent | fad5d797320c779117460273593f0e5a35be618b (diff) | |
download | justbuild-da0a7ddf2f84c4afcca144d670d1870506b91fe9.tar.gz |
Artifact: Use ArtifactDigestFactory
...to remove code duplication.
-rw-r--r-- | src/buildtool/common/TARGETS | 9 | ||||
-rw-r--r-- | src/buildtool/common/artifact.hpp | 23 |
2 files changed, 13 insertions, 19 deletions
diff --git a/src/buildtool/common/TARGETS b/src/buildtool/common/TARGETS index adbea038..ed3cb1f7 100644 --- a/src/buildtool/common/TARGETS +++ b/src/buildtool/common/TARGETS @@ -92,8 +92,7 @@ ] , "srcs": ["artifact_digest_factory.cpp"] , "deps": - [ "protocol_traits" - , ["@", "fmt", "", "fmt"] + [ ["@", "fmt", "", "fmt"] , ["@", "json", "", "json"] , ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/crypto", "hash_info"] @@ -104,7 +103,11 @@ , ["src/utils/cpp", "hash_combine"] ] , "private-deps": - ["bazel_digest_factory", "bazel_types", ["@", "gsl", "", "gsl"]] + [ "bazel_digest_factory" + , "bazel_types" + , "protocol_traits" + , ["@", "gsl", "", "gsl"] + ] , "stage": ["src", "buildtool", "common"] } , "artifact_description": diff --git a/src/buildtool/common/artifact.hpp b/src/buildtool/common/artifact.hpp index b1754c70..3f1ecf49 100644 --- a/src/buildtool/common/artifact.hpp +++ b/src/buildtool/common/artifact.hpp @@ -27,10 +27,9 @@ #include "fmt/core.h" #include "nlohmann/json.hpp" #include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/common/artifact_digest_factory.hpp" #include "src/buildtool/common/identifier.hpp" -#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" -#include "src/buildtool/crypto/hash_info.hpp" #include "src/buildtool/file_system/object_type.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -104,22 +103,14 @@ class Artifact { } auto const object_type = FromChar(*type.c_str()); - // TODO(design): The logic of ArtifactDigestFactory::Create is - // duplicated here to avoid a cyclic dependency. A better solution - // is advisable. - auto hash_info = - HashInfo::Create(hash_type, - id, - ProtocolTraits::IsTreeAllowed(hash_type) and - IsTreeObject(object_type)); - if (not hash_info) { - Logger::Log( - LogLevel::Debug, "{}", std::move(hash_info).error()); + auto digest = ArtifactDigestFactory::Create( + hash_type, id, size, IsTreeObject(object_type)); + if (not digest) { + Logger::Log(LogLevel::Debug, "{}", std::move(digest).error()); return std::nullopt; } - return ObjectInfo{ - .digest = ArtifactDigest{*std::move(hash_info), size}, - .type = object_type}; + return ObjectInfo{.digest = *std::move(digest), + .type = object_type}; } }; |