#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(
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,
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 '?':
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);
}