summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-11-18 15:35:49 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-11-21 11:05:48 +0100
commit306408dc0b0e182dd78e2170b168e5bbefda7036 (patch)
tree2552e6764329e1e50dccb08f5ed6e4f7a2c77ac9 /src
parentf669da058b501b479e8b687f563605287aec944e (diff)
downloadjustbuild-306408dc0b0e182dd78e2170b168e5bbefda7036.tar.gz
RepositoryConfig: support setting a computed root
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/repository_config.cpp25
-rw-r--r--src/buildtool/common/repository_config.hpp3
2 files changed, 28 insertions, 0 deletions
diff --git a/src/buildtool/common/repository_config.cpp b/src/buildtool/common/repository_config.cpp
index 78f7b8a4..933d48b2 100644
--- a/src/buildtool/common/repository_config.cpp
+++ b/src/buildtool/common/repository_config.cpp
@@ -150,3 +150,28 @@ auto RepositoryConfig::AddToGraphAndGetId(
}
return std::nullopt;
}
+
+void RepositoryConfig::SetComputedRoot(FileRoot::ComputedRoot const& root,
+ FileRoot const& value) {
+ for (auto const& [name, desc] : repos_) {
+ auto new_info = desc.info;
+ bool changed = false;
+ auto set_root_if_matching =
+ [&changed, &root, &value](auto* candidate_root) {
+ auto croot = candidate_root->GetComputedDescription();
+ if (croot) {
+ if (*croot == root) {
+ *candidate_root = value;
+ changed = true;
+ }
+ }
+ };
+ set_root_if_matching(&new_info.workspace_root);
+ set_root_if_matching(&new_info.target_root);
+ set_root_if_matching(&new_info.rule_root);
+ set_root_if_matching(&new_info.expression_root);
+ if (changed) {
+ SetInfo(name, std::move(new_info));
+ }
+ }
+}
diff --git a/src/buildtool/common/repository_config.hpp b/src/buildtool/common/repository_config.hpp
index cffd4971..0060152d 100644
--- a/src/buildtool/common/repository_config.hpp
+++ b/src/buildtool/common/repository_config.hpp
@@ -66,6 +66,9 @@ class RepositoryConfig {
return static_cast<bool>(git_cas_);
}
+ void SetComputedRoot(FileRoot::ComputedRoot const& root,
+ FileRoot const& value);
+
[[nodiscard]] auto Info(std::string const& repo) const noexcept
-> RepositoryInfo const* {
if (auto const* data = Data(repo)) {