From: Michael Tremer Date: Mon, 25 Sep 2023 15:17:28 +0000 (+0000) Subject: cli: pakfire: Use transaction stuff to install packages X-Git-Tag: 0.9.30~1650 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=976ce512d3aa513dcd49dca006412c476b943a07;p=pakfire.git cli: pakfire: Use transaction stuff to install packages Signed-off-by: Michael Tremer --- diff --git a/src/cli/pakfire/install.c b/src/cli/pakfire/install.c index fea54daab..5e2c0f6ba 100644 --- a/src/cli/pakfire/install.c +++ b/src/cli/pakfire/install.c @@ -26,11 +26,12 @@ #include #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); }