void activate()

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"}, {} });
            }
        }
    }