summaryrefslogtreecommitdiff
path: root/src/buildtool/common/repository_config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/common/repository_config.cpp')
-rw-r--r--src/buildtool/common/repository_config.cpp22
1 files changed, 22 insertions, 0 deletions
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_) {