summaryrefslogtreecommitdiff
path: root/cli/main.cpp
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-01-18 18:44:22 +0100
committerEugen Wissner <belka@caraus.de>2026-01-18 18:44:22 +0100
commitc9a3ebd623bf2f968f7fbdf5bb2d7dda480b9f1c (patch)
treee1a1837c62ffcf7cd0255395cdc449430cb9f352 /cli/main.cpp
parent2485d00c4c40713b6cb3c39595d69ea2cf497b47 (diff)
downloadkatja-c9a3ebd623bf2f968f7fbdf5bb2d7dda480b9f1c.tar.gz
Parse command line with boost program_options
Diffstat (limited to 'cli/main.cpp')
-rw-r--r--cli/main.cpp36
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>());
}
}