summaryrefslogtreecommitdiff
path: root/cli/main.cpp
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-01-25 11:33:55 +0100
committerEugen Wissner <belka@caraus.de>2026-01-25 11:33:55 +0100
commitda02080fc1db3be9275832b7ad929165b1a38e3e (patch)
tree7bf819a1ec95a079254a6894caa657f7bbd88ec4 /cli/main.cpp
parentc9a3ebd623bf2f968f7fbdf5bb2d7dda480b9f1c (diff)
downloadkatja-da02080fc1db3be9275832b7ad929165b1a38e3e.tar.gz
Move more command line parsing into a module
Diffstat (limited to 'cli/main.cpp')
-rw-r--r--cli/main.cpp43
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;
}