]> git.ipfire.org Git - pakfire.git/commitdiff
cli: pakfire: Use transaction stuff to install packages
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 25 Sep 2023 15:17:28 +0000 (15:17 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 25 Sep 2023 15:17:28 +0000 (15:17 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/cli/pakfire/install.c

index fea54daabc509acc054fba45b46ec29f5af6be52..5e2c0f6baaffd92363574df1a5200a50ba400d20 100644 (file)
 #include <pakfire/transaction.h>
 
 #include "install.h"
+#include "transaction.h"
 
-static struct config {
+struct config {
        int transaction_flags;
        int job_flags;
-} config;
+};
 
 static void help(void) {
        printf(
@@ -46,7 +47,7 @@ static void help(void) {
        exit(0);
 }
 
-static int parse_argv(int argc, char* argv[]) {
+static int parse_argv(struct config* config, int argc, char* argv[]) {
        enum {
                ARG_BEST,
                ARG_ALLOW_DOWNGRADE,
@@ -74,19 +75,19 @@ static int parse_argv(int argc, char* argv[]) {
                                help();
 
                        case ARG_BEST:
-                               config.job_flags |= PAKFIRE_JOB_BEST;
+                               config->job_flags |= PAKFIRE_JOB_BEST;
                                break;
 
                        case ARG_ALLOW_DOWNGRADE:
-                               config.transaction_flags |= PAKFIRE_TRANSACTION_ALLOW_DOWNGRADE;
+                               config->transaction_flags |= PAKFIRE_TRANSACTION_ALLOW_DOWNGRADE;
                                break;
 
                        case ARG_ALLOW_UNINSTALL:
-                               config.transaction_flags |= PAKFIRE_TRANSACTION_ALLOW_UNINSTALL;
+                               config->transaction_flags |= PAKFIRE_TRANSACTION_ALLOW_UNINSTALL;
                                break;
 
                        case ARG_WITHOUT_RECOMMENDED:
-                               config.transaction_flags |= PAKFIRE_TRANSACTION_WITHOUT_RECOMMENDED;
+                               config->transaction_flags |= PAKFIRE_TRANSACTION_WITHOUT_RECOMMENDED;
                                break;
 
                        case '?':
@@ -100,58 +101,31 @@ static int parse_argv(int argc, char* argv[]) {
        return 0;
 }
 
-int cli_install(struct pakfire* pakfire, int argc, char* argv[]) {
-       struct pakfire_transaction* transaction = NULL;
-       char* problems = NULL;
-       char* dump = NULL;
+static int __cli_install(struct pakfire_transaction* transaction, int argc, char* argv[], void* data) {
+       struct config* config = (struct config*)data;
        int r;
 
-       // Parse CLI options
-       r = parse_argv(argc, argv);
-       if (r)
-               goto ERROR;
-
-       // Create a new transaction
-       r = pakfire_transaction_create(&transaction, pakfire, config.transaction_flags);
-       if (r) {
-               fprintf(stderr, "Could not setup the transaction\n");
-               goto ERROR;
-       }
-
        // Add the remaining command line options as packages
        for (int i = optind; i < argc; i++) {
                r = pakfire_transaction_request(transaction,
-                               PAKFIRE_JOB_INSTALL, argv[i], config.job_flags);
+                               PAKFIRE_JOB_INSTALL, argv[i], config->job_flags);
                if (r) {
                        fprintf(stderr, "Could not find '%s': %m\n", argv[i]);
-                       goto ERROR;
+                       return r;
                }
        }
 
-       // Solve the transaction
-       r = pakfire_transaction_solve(transaction, 0, &problems);
-       if (r) {
-               fprintf(stderr, "Could not solve request:\n%s\n", problems);
-               goto ERROR;
-       }
+       return 0;
+}
 
-       // Dump the transaction
-       dump = pakfire_transaction_dump(transaction, 0);
-       if (dump)
-               printf("%s\n", dump);
+int cli_install(struct pakfire* pakfire, int argc, char* argv[]) {
+       struct config config;
+       int r;
 
-       // Run the transaction
-       r = pakfire_transaction_run(transaction);
+       // Parse CLI options
+       r = parse_argv(&config, argc, argv);
        if (r)
-               goto ERROR;
-
-ERROR:
-       if (transaction)
-               pakfire_transaction_unref(transaction);
-       if (problems)
-               free(problems);
-       if (dump)
-               free(dump);
+               return r;
 
-       return r;
+       return cli_transaction(pakfire, argc, argv, config.transaction_flags, __cli_install, &config);
 }