]> git.ipfire.org Git - pakfire.git/commitdiff
cli: pakfire: Implement enabling/disabling repos on CLI
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 25 Sep 2023 14:13:11 +0000 (14:13 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 25 Sep 2023 14:13:11 +0000 (14:13 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/cli/pakfire/main.c

index fd1bc5806048787a9ee4392aeb29b47cf78a6999..e4a67d48455389724f30c7abffe9ba27a7c595d1 100644 (file)
@@ -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);