in include/poac/core/resolver.hpp [302:338]
void activate(Resolved& new_deps,
Activated prev_activated_deps,
Activated& activated_deps,
const std::string& name,
const std::string& interval)
{
for (const auto& version : resolver::decide_versions(name, interval)) {
// {}なのは,依存先の依存先までは必要無く,依存先で十分なため
activated_deps.push_back({ {name}, {version}, {"poac"}, {} });
const auto lambda = [&](auto d) { return d.name == name && d.version == version; };
// Circulating
auto result = std::find_if(prev_activated_deps.begin(), prev_activated_deps.end(), lambda);
if (result != prev_activated_deps.end()) {
break;
}
// Resolved
auto result2 = std::find_if(new_deps.activated.begin(), new_deps.activated.end(), lambda);
if (result2 != new_deps.activated.end()) {
break;
}
prev_activated_deps.push_back({ {name}, {version}, {"poac"}, {} });
if (const auto current_deps = io::network::api::deps(name, version)) {
Activated activated_deps2;
for (const auto& current_dep : *current_deps) {
const auto[dep_name, dep_interval] = get_from_dep(current_dep.second);
activate(new_deps, prev_activated_deps, activated_deps2, dep_name, dep_interval);
}
new_deps.activated.push_back({ {name}, {version}, {"poac"}, {activated_deps2} });
}
else {
new_deps.activated.push_back({ {name}, {version}, {"poac"}, {} });
}
}
}