diff options
-rw-r--r-- | src/buildtool/common/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/common/repository_config.cpp | 22 | ||||
-rw-r--r-- | src/buildtool/common/repository_config.hpp | 6 |
3 files changed, 29 insertions, 0 deletions
diff --git a/src/buildtool/common/TARGETS b/src/buildtool/common/TARGETS index 4a802b82..1e18f09c 100644 --- a/src/buildtool/common/TARGETS +++ b/src/buildtool/common/TARGETS @@ -164,6 +164,7 @@ , ["src/buildtool/file_system", "file_root"] , ["src/buildtool/file_system", "git_cas"] , ["src/buildtool/file_system", "git_tree"] + , ["src/buildtool/file_system", "precomputed_root"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/multithreading", "atomic_value"] , ["src/buildtool/storage", "storage"] diff --git a/src/buildtool/common/repository_config.cpp b/src/buildtool/common/repository_config.cpp index 933d48b2..9561f10b 100644 --- a/src/buildtool/common/repository_config.cpp +++ b/src/buildtool/common/repository_config.cpp @@ -14,6 +14,8 @@ #include "src/buildtool/common/repository_config.hpp" +#include <initializer_list> + #include "src/utils/automata/dfa_minimizer.hpp" auto RepositoryConfig::RepositoryInfo::BaseContentDescription() const @@ -151,6 +153,26 @@ auto RepositoryConfig::AddToGraphAndGetId( return std::nullopt; } +void RepositoryConfig::SetPrecomputedRoot(PrecomputedRoot const& root, + FileRoot const& value) { + for (auto const& [name, desc] : repos_) { + auto new_info = desc.info; + bool changed = false; + for (gsl::not_null<FileRoot*> candidate : {&new_info.workspace_root, + &new_info.target_root, + &new_info.rule_root, + &new_info.expression_root}) { + if (candidate->GetPrecomputedDescription() == root) { + *candidate = value; + changed = true; + } + } + if (changed) { + SetInfo(name, std::move(new_info)); + } + } +} + void RepositoryConfig::SetComputedRoot(FileRoot::ComputedRoot const& root, FileRoot const& value) { for (auto const& [name, desc] : repos_) { diff --git a/src/buildtool/common/repository_config.hpp b/src/buildtool/common/repository_config.hpp index 1d4a7ce6..a4b61b9e 100644 --- a/src/buildtool/common/repository_config.hpp +++ b/src/buildtool/common/repository_config.hpp @@ -31,6 +31,7 @@ #include "src/buildtool/file_system/file_root.hpp" #include "src/buildtool/file_system/git_cas.hpp" #include "src/buildtool/file_system/git_tree.hpp" +#include "src/buildtool/file_system/precomputed_root.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/multithreading/atomic_value.hpp" #include "src/buildtool/storage/storage.hpp" @@ -68,6 +69,11 @@ class RepositoryConfig { return static_cast<bool>(git_cas_); } + /// \brief Replace all entries of the precomputed root with an exact root. + /// \param root Root to be replaced. + /// \param value Root to be used as a replacement. + void SetPrecomputedRoot(PrecomputedRoot const& root, FileRoot const& value); + void SetComputedRoot(FileRoot::ComputedRoot const& root, FileRoot const& value); |