diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-01-14 18:08:37 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-01-21 09:58:36 +0100 |
commit | 1109e8df28be88ff865231339560b371ebbc4a24 (patch) | |
tree | 3a7ca43fa2a392dad4878abf22287e789118a789 /src | |
parent | 58830989428eaf9151177abeb756f31c47755596 (diff) | |
download | justbuild-1109e8df28be88ff865231339560b371ebbc4a24.tar.gz |
TreeStructure: use FileRoot as a result of resolution
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/computed_roots/evaluate.cpp | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/buildtool/computed_roots/evaluate.cpp b/src/buildtool/computed_roots/evaluate.cpp index a7898413..52dff542 100644 --- a/src/buildtool/computed_roots/evaluate.cpp +++ b/src/buildtool/computed_roots/evaluate.cpp @@ -381,7 +381,7 @@ void ComputeTreeStructureAndFill( ? substitution_storage_config.value() : *storage_config; - std::optional<std::string> resolved_hash; + std::optional<FileRoot> resolved_root; std::vector known_repositories{native_storage_config.GitRoot()}; if (not ref_root.IsAbsent()) { auto const path_to_git_cas = ref_root.GetGitCasRoot(); @@ -401,7 +401,8 @@ void ComputeTreeStructureAndFill( *digest, known_repositories, native_storage_config, git_lock)) { std::optional<ArtifactDigest> const& tree_structure = *from_local; if (tree_structure.has_value()) { - resolved_hash = tree_structure->hash(); + resolved_root = FileRoot::FromGit(native_storage_config.GitRoot(), + tree_structure->hash()); } } else { @@ -410,7 +411,7 @@ void ComputeTreeStructureAndFill( return; } - if (not resolved_hash) { + if (not resolved_root) { std::invoke(*logger, fmt::format("Failed to calculate tree structure for {}", key.ToString()), @@ -418,23 +419,14 @@ void ComputeTreeStructureAndFill( return; } - auto const root_result = - FileRoot::FromGit(native_storage_config.GitRoot(), *resolved_hash); - if (not root_result) { - (*logger)( - fmt::format("Failed to create git root for {}", *resolved_hash), - /*fatal=*/true); - return; - } - { // For setting, we need an exclusive lock; so get one after we // dropped the shared one std::unique_lock setting{*config_lock}; repository_config->SetPrecomputedRoot(PrecomputedRoot{key}, - *root_result); + *resolved_root); } - (*setter)(*std::move(resolved_hash)); + (*setter)(*std::move(resolved_root)->GetTreeHash()); } auto FillRoots( |