Resolved resolve()

in include/poac/core/resolver.hpp [367:399]


    Resolved resolve(const Deps& deps) {
        Deps poac_deps;
        Deps others_deps;

        // Divide poac and others only when src is poac, solve dependency.
        for (const auto& dep : deps) {
            if (dep.source == "poac") {
                poac_deps.emplace_back(dep);
            }
            else {
                others_deps.emplace_back(dep);
            }
        }

        // 木の末端からpush_backされていくため,依存が無いものが一番最初の要素になる.
        // つまり,配列のループのそのままの順番でインストールやビルドを行うと不具合は起きない
        const Resolved activated_deps = activate_deps_loop(poac_deps);
        Resolved resolved_deps;
        // 全ての依存関係が一つのパッケージ,一つのバージョンに依存する時はbacktrackが不要
        if (duplicate_loose(activated_deps.activated)) {
            resolved_deps = backtrack_loop(activated_deps.activated);
        }
        else {
            resolved_deps = activated_to_backtracked(activated_deps);
        }

        // Merge others_deps into resolved_deps
        for (const auto& dep : others_deps) {
            resolved_deps.activated.push_back({ {dep.name}, {dep.interval}, {dep.source}, {} });
            resolved_deps.backtracked[dep.name] = { {dep.interval}, {dep.source} };
        }
        return resolved_deps;
    }