From: Michael Tremer Date: Mon, 25 Sep 2023 14:13:11 +0000 (+0000) Subject: cli: pakfire: Implement enabling/disabling repos on CLI X-Git-Tag: 0.9.30~1652 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8aac21f130aab5beb818134ab69658a12f4468ab;p=pakfire.git cli: pakfire: Implement enabling/disabling repos on CLI Signed-off-by: Michael Tremer --- diff --git a/src/cli/pakfire/main.c b/src/cli/pakfire/main.c index fd1bc5806..e4a67d484 100644 --- a/src/cli/pakfire/main.c +++ b/src/cli/pakfire/main.c @@ -39,6 +39,8 @@ #include "sync.h" #include "update.h" +#define MAX_REPOS 16 + struct config { char* file; char* arch; @@ -46,6 +48,12 @@ struct config { int flags; int loglevel; int yes; + + // Repos + const char* enable_repos[MAX_REPOS]; + unsigned int num_enable_repos; + const char* disable_repos[MAX_REPOS]; + unsigned int num_disable_repos; }; static int cli_main(struct pakfire* pakfire, int argc, char* argv[]) { @@ -167,7 +175,19 @@ static int parse_argv(struct config* config, int argc, char* argv[]) { case ARG_VERSION: version(); - // XXX Handle enable/disable repo + case ARG_ENABLE_REPO: + if (config->num_enable_repos >= MAX_REPOS) + return -ENOBUFS; + + config->enable_repos[config->num_enable_repos++] = optarg; + break; + + case ARG_DISABLE_REPO: + if (config->num_disable_repos >= MAX_REPOS) + return -ENOBUFS; + + config->disable_repos[config->num_disable_repos++] = optarg; + break; case '?': return -EINVAL; @@ -180,6 +200,21 @@ static int parse_argv(struct config* config, int argc, char* argv[]) { return 0; } +static void cli_set_repo_enabled(struct pakfire* pakfire, const char* name, int enabled) { + struct pakfire_repo* repo = NULL; + + // Find the repository + repo = pakfire_get_repo(pakfire, name); + + // Ignore if the repository could not be found + if (!repo) + return; + + // Set status + pakfire_repo_set_enabled(repo, enabled); + pakfire_repo_unref(repo); +} + int main(int argc, char* argv[]) { struct pakfire* pakfire = NULL; FILE* f = NULL; @@ -214,6 +249,14 @@ int main(int argc, char* argv[]) { if (r) goto ERROR; + // Enable repositories + for (unsigned int i = 0; i < config.num_enable_repos; i++) + cli_set_repo_enabled(pakfire, config.enable_repos[i], 1); + + // Disable repositories + for (unsigned int i = 0; i < config.num_disable_repos; i++) + cli_set_repo_enabled(pakfire, config.disable_repos[i], 0); + // Run a command r = cli_main(pakfire, argc - optind, argv + optind);