diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-01-25 11:33:55 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-01-25 11:33:55 +0100 |
| commit | da02080fc1db3be9275832b7ad929165b1a38e3e (patch) | |
| tree | 7bf819a1ec95a079254a6894caa657f7bbd88ec4 /cli/main.cpp | |
| parent | c9a3ebd623bf2f968f7fbdf5bb2d7dda480b9f1c (diff) | |
| download | katja-da02080fc1db3be9275832b7ad929165b1a38e3e.tar.gz | |
Move more command line parsing into a module
Diffstat (limited to 'cli/main.cpp')
| -rw-r--r-- | cli/main.cpp | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/cli/main.cpp b/cli/main.cpp index da0d1b8..4964498 100644 --- a/cli/main.cpp +++ b/cli/main.cpp @@ -6,6 +6,7 @@ #include <filesystem> #include <memory> #include <iostream> +#include <variant> #include <boost/program_options.hpp> @@ -36,14 +37,13 @@ static void search_names(std::shared_ptr<katja::repository> repository, const st } } -int main(int argc, const char **argv) +static void handle_subcommand(const katja::configuration& configuration, + const katja::subcommand& command) { - 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) + if (std::holds_alternative<katja::updates_command>(command)) { + katja::package_database installed_database = katja::read_installed_database(); + for (const auto& [repository_name, repository_configuration] : configuration) { std::filesystem::path slackbuild_repository{ repository_configuration.path }; @@ -52,34 +52,25 @@ int main(int argc, const char **argv) get_updates(repository, std::move(installed_database)); } } - else if (command_line.type == katja::command::search) + else if (std::holds_alternative<katja::search_command>(command)) { - 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<katja::sbo_repository>(slackbuild_repository); - search_names(repository, option_map["name"].as<std::string>()); + search_names(repository, std::get<katja::search_command>(command).needle); } } +} + +int main(int argc, const char **argv) +{ + katja::configuration configuration = katja::read_configuration("katja.toml"); + katja::command_line command_line = katja::parse_command_line(argc, argv); + katja::subcommand subcommand = katja::parse_subcommand(command_line); + + handle_subcommand(configuration, subcommand); return EXIT_SUCCESS; } |
