summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/TARGETS1
-rw-r--r--src/buildtool/common/repository_config.cpp22
-rw-r--r--src/buildtool/common/repository_config.hpp6
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);