summaryrefslogtreecommitdiff
path: root/src/buildtool/file_system/file_root.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/file_system/file_root.hpp')
-rw-r--r--src/buildtool/file_system/file_root.hpp23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/buildtool/file_system/file_root.hpp b/src/buildtool/file_system/file_root.hpp
index 08779e8e..eff4d450 100644
--- a/src/buildtool/file_system/file_root.hpp
+++ b/src/buildtool/file_system/file_root.hpp
@@ -225,17 +225,15 @@ class FileRoot {
if (std::holds_alternative<tree_t>(data_)) {
try {
auto const& data = std::get<tree_t>(data_);
- // check if tree is ignore_special
- if (data->RawHash().empty()) {
- return std::nullopt;
- }
- auto const& id = data->Hash();
- auto const& size = data->Size();
- if (size) {
- return ArtifactDescription{
- ArtifactDigest{id, *size, /*is_tree=*/true},
- ObjectType::Tree,
- repository};
+ // only consider tree if we have it unmodified
+ if (auto id = data->Hash()) {
+ auto const& size = data->Size();
+ if (size) {
+ return ArtifactDescription{
+ ArtifactDigest{*id, *size, /*is_tree=*/true},
+ ObjectType::Tree,
+ repository};
+ }
}
} catch (...) {
return std::nullopt;
@@ -351,7 +349,8 @@ class FileRoot {
nlohmann::json j;
j.push_back(ignore_special_ ? kGitTreeIgnoreSpecialMarker
: kGitTreeMarker);
- j.push_back(std::get<git_root_t>(root_).tree->Hash());
+ // we need the root tree id, irrespective of ignore_special flag
+ j.push_back(std::get<git_root_t>(root_).tree->FileRootHash());
return j;
}
if (std::holds_alternative<absent_root_t>(root_)) {