diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-01-18 18:44:22 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-01-18 18:44:22 +0100 |
| commit | c9a3ebd623bf2f968f7fbdf5bb2d7dda480b9f1c (patch) | |
| tree | e1a1837c62ffcf7cd0255395cdc449430cb9f352 /cli/main.cpp | |
| parent | 2485d00c4c40713b6cb3c39595d69ea2cf497b47 (diff) | |
| download | katja-c9a3ebd623bf2f968f7fbdf5bb2d7dda480b9f1c.tar.gz | |
Parse command line with boost program_options
Diffstat (limited to 'cli/main.cpp')
| -rw-r--r-- | cli/main.cpp | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/cli/main.cpp b/cli/main.cpp index 8a8a377..da0d1b8 100644 --- a/cli/main.cpp +++ b/cli/main.cpp @@ -3,18 +3,17 @@ * 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/. */ -module; - #include <filesystem> #include <memory> #include <iostream> -#include <toml.hpp> +#include <boost/program_options.hpp> import katja.database; import katja.repository; import katja.sbo; import katja.configuration; +import katja.command_line; static void get_updates(std::shared_ptr<katja::repository> repository, katja::package_database&& installed_database) { @@ -39,14 +38,11 @@ static void search_names(std::shared_ptr<katja::repository> repository, const st int main(int argc, const char **argv) { - katja::configuration configuration = katja::read_configuration(); + katja::configuration configuration = katja::read_configuration("katja.toml"); katja::package_database installed_database = katja::read_installed_database(); - if (argc == 1) - { - return EXIT_FAILURE; - } - if (strcmp("updates", argv[1]) == 0) + 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) { @@ -56,14 +52,32 @@ int main(int argc, const char **argv) get_updates(repository, std::move(installed_database)); } } - else if (strcmp("search", argv[1]) == 0 && argc == 3) + 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<katja::sbo_repository>(slackbuild_repository); - search_names(repository, std::string(argv[2])); + search_names(repository, option_map["name"].as<std::string>()); } } |
