/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #include #include #include #include import katja.database; import katja.repository; import katja.sbo; import katja.configuration; import katja.command_line; static void get_updates(std::shared_ptr repository, katja::package_database&& installed_database) { const std::vector packages = repository->get_updates(installed_database); for (const auto& package_identifier : packages) { std::cout << package_identifier.to_string() << std::endl; } std::cout << std::endl << "Updates " << '(' << packages.size() << ')' << std::endl; } static void search_names(std::shared_ptr repository, const std::string& needle) { const std::vector packages = repository->search_names("x86-64", needle); for (const auto& package_identifier : packages) { std::cout << package_identifier.to_string() << std::endl; } } int main(int argc, const char **argv) { katja::configuration configuration = katja::read_configuration("katja.toml"); katja::package_database installed_database = katja::read_installed_database(); katja::command_line command_line = katja::parse_command_line(argc, argv); if (command_line.type == katja::command::updates) { for (const auto& [repository_name, repository_configuration] : configuration) { std::filesystem::path slackbuild_repository{ repository_configuration.path }; auto repository = std::make_shared(slackbuild_repository); get_updates(repository, std::move(installed_database)); } } else if (command_line.type == katja::command::search) { boost::program_options::options_description search_description("Search packages"); search_description .add_options()("name", "Find packages by name"); boost::program_options::positional_options_description positional_arguments; positional_arguments.add("name", 1); boost::program_options::variables_map option_map; auto command_parser = boost::program_options::command_line_parser(command_line.arguments) .options(search_description).positional(positional_arguments); boost::program_options::store(command_parser.run(), option_map); boost::program_options::notify(option_map); if (!option_map.count("name")) { std::cerr << search_description; return EXIT_FAILURE; } for (const auto& [repository_name, repository_configuration] : configuration) { std::filesystem::path slackbuild_repository{ repository_configuration.path }; auto repository = std::make_shared(slackbuild_repository); search_names(repository, option_map["name"].as()); } } return EXIT_SUCCESS; }