summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-02-27 11:44:05 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-28 13:44:06 +0100
commitda0a7ddf2f84c4afcca144d670d1870506b91fe9 (patch)
tree0e5672210b6dafd6c37d4997f4312f3b4d8356bd
parentfad5d797320c779117460273593f0e5a35be618b (diff)
downloadjustbuild-da0a7ddf2f84c4afcca144d670d1870506b91fe9.tar.gz
Artifact: Use ArtifactDigestFactory
...to remove code duplication.
-rw-r--r--src/buildtool/common/TARGETS9
-rw-r--r--src/buildtool/common/artifact.hpp23
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};
}
};