#ifndef PAKFIRE_STEP_H
#define PAKFIRE_STEP_H
-#include <solv/pooltypes.h>
-
#include <pakfire/types.h>
-PakfireStep pakfire_step_create(PakfireTransaction transaction, Id id);
+PakfireStep pakfire_step_create(PakfireTransaction transaction,
+ pakfire_step_type_t type, PakfirePackage pkg);
PakfireStep pakfire_step_ref(PakfireStep step);
PakfireStep pakfire_step_unref(PakfireStep step);
#include <stdlib.h>
#include <unistd.h>
-#include <solv/pooltypes.h>
-#include <solv/transaction.h>
-
#include <pakfire/archive.h>
#include <pakfire/constants.h>
#include <pakfire/db.h>
int nrefs;
};
-static pakfire_step_type_t get_type(Transaction* transaction, Id id) {
- int type = transaction_type(transaction, id,
- SOLVER_TRANSACTION_SHOW_ACTIVE|SOLVER_TRANSACTION_CHANGE_IS_REINSTALL);
-
- // Translate solver types into our own types
- switch (type) {
- case SOLVER_TRANSACTION_INSTALL:
- case SOLVER_TRANSACTION_MULTIINSTALL:
- return PAKFIRE_STEP_INSTALL;
-
- case SOLVER_TRANSACTION_REINSTALL:
- case SOLVER_TRANSACTION_MULTIREINSTALL:
- return PAKFIRE_STEP_REINSTALL;
-
- case SOLVER_TRANSACTION_ERASE:
- return PAKFIRE_STEP_ERASE;
-
- case SOLVER_TRANSACTION_DOWNGRADE:
- return PAKFIRE_STEP_DOWNGRADE;
-
- case SOLVER_TRANSACTION_UPGRADE:
- return PAKFIRE_STEP_UPGRADE;
-
- case SOLVER_TRANSACTION_OBSOLETES:
- return PAKFIRE_STEP_OBSOLETE;
-
- // Anything we don't care about
- case SOLVER_TRANSACTION_IGNORE:
- case SOLVER_TRANSACTION_REINSTALLED:
- case SOLVER_TRANSACTION_DOWNGRADED:
- default:
- return PAKFIRE_STEP_IGNORE;
- }
-}
-
static const char* pakfire_step_script_filename(pakfire_script_type script) {
switch (script) {
case PAKFIRE_SCRIPT_PREIN:
return NULL;
}
-PAKFIRE_EXPORT PakfireStep pakfire_step_create(PakfireTransaction transaction, Id id) {
+PAKFIRE_EXPORT PakfireStep pakfire_step_create(PakfireTransaction transaction,
+ pakfire_step_type_t type, PakfirePackage pkg) {
Pakfire pakfire = pakfire_transaction_get_pakfire(transaction);
- Transaction* t = pakfire_transaction_get_transaction(transaction);
PakfireStep step = pakfire_calloc(1, sizeof(*step));
if (step) {
step->pakfire = pakfire_ref(pakfire);
step->nrefs = 1;
- step->type = get_type(t, id);
-
- // Get the package
- step->package = pakfire_package_create(step->pakfire, id);
+ // Save everything
+ step->type = type;
+ step->package = pakfire_package_ref(pkg);
}
pakfire_unref(pakfire);
int nrefs;
};
+static pakfire_step_type_t transaction_get_step_type(Transaction* transaction, Id id) {
+ int type = transaction_type(transaction, id,
+ SOLVER_TRANSACTION_SHOW_ACTIVE|SOLVER_TRANSACTION_CHANGE_IS_REINSTALL);
+
+ // Translate solver types into our own types
+ switch (type) {
+ case SOLVER_TRANSACTION_INSTALL:
+ case SOLVER_TRANSACTION_MULTIINSTALL:
+ return PAKFIRE_STEP_INSTALL;
+
+ case SOLVER_TRANSACTION_REINSTALL:
+ case SOLVER_TRANSACTION_MULTIREINSTALL:
+ return PAKFIRE_STEP_REINSTALL;
+
+ case SOLVER_TRANSACTION_ERASE:
+ return PAKFIRE_STEP_ERASE;
+
+ case SOLVER_TRANSACTION_DOWNGRADE:
+ return PAKFIRE_STEP_DOWNGRADE;
+
+ case SOLVER_TRANSACTION_UPGRADE:
+ return PAKFIRE_STEP_UPGRADE;
+
+ case SOLVER_TRANSACTION_OBSOLETES:
+ return PAKFIRE_STEP_OBSOLETE;
+
+ // Anything we don't care about
+ case SOLVER_TRANSACTION_IGNORE:
+ case SOLVER_TRANSACTION_REINSTALLED:
+ case SOLVER_TRANSACTION_DOWNGRADED:
+ default:
+ return PAKFIRE_STEP_IGNORE;
+ }
+}
+
PAKFIRE_EXPORT PakfireTransaction pakfire_transaction_create(Pakfire pakfire, Transaction* trans) {
PakfireTransaction transaction = pakfire_calloc(1, sizeof(*transaction));
if (transaction) {
// Import all steps
PakfireStep* steps = transaction->steps = pakfire_calloc(transaction->num_steps + 1, sizeof(*steps));
- for (unsigned int i = 0; i < transaction->num_steps; i++)
- *steps++ = pakfire_step_create(transaction, transaction->transaction->steps.elements[i]);
+ for (unsigned int i = 0; i < transaction->num_steps; i++) {
+ Id id = transaction->transaction->steps.elements[i];
+
+ // Get the type
+ pakfire_step_type_t type = transaction_get_step_type(transaction->transaction, id);
+
+ // Fetch the package
+ PakfirePackage pkg = pakfire_package_create(pakfire, id);
+
+ // Append a new step
+ *steps++ = pakfire_step_create(transaction, type, pkg);
+
+ pakfire_package_unref(pkg);
+ }
}
return transaction;