int _main()

in include/poac/subcmd/cleanup.hpp [24:66]


        int _main([[maybe_unused]] VS&& argv) {
            namespace yaml = io::file::yaml;
            namespace resolver = core::resolver;
            namespace lock = core::lock;
            namespace naming = core::naming;
            namespace fs = boost::filesystem;
            namespace cli = io::cli;


            // create resolved deps
            resolver::Resolved resolved_deps{};
            if (const auto locked_deps = lock::load()) {
                resolved_deps = *locked_deps;
            }
            else { // poac.lock does not exist
                const auto deps_node = yaml::load_config("deps").at("deps").as<std::map<std::string, YAML::Node>>();
                const resolver::Deps deps = _install::resolve_packages(deps_node);
                resolved_deps = resolver::resolve(deps);
            }

            std::vector<std::string> package_names;
            for (const auto& [name, dep] : resolved_deps.backtracked) {
                const auto package_name = naming::to_current(dep.source, name, dep.version);
                package_names.push_back(package_name);
            }

            // iterate directory
            const auto first = package_names.begin();
            const auto last = package_names.end();
            for (const auto& e : boost::make_iterator_range( fs::directory_iterator("deps"), {} )) {
                const auto found = std::find(first, last, e.path().filename().string());
                if (found == last) { // not found
                    fs::remove_all(e.path());
                    const auto info_state = "Remove unused package " + e.path().filename().string();
                    cli::echo(cli::to_info(info_state));
                }
            }

            return EXIT_SUCCESS;

            // TODO: cleanup _build directory
            // TODO: auto cleanup in install sub-command
        }