struct _PakfireStep {
PakfirePool pool;
- PakfireTransaction transaction;
PakfirePackage package;
Id id;
+ pakfire_step_type_t type;
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;
+ }
+}
+
PAKFIRE_EXPORT PakfireStep pakfire_step_create(PakfireTransaction transaction, Id id) {
+ Transaction* t = pakfire_transaction_get_transaction(transaction);
+
PakfireStep step = pakfire_calloc(1, sizeof(*step));
if (step) {
DEBUG("Allocated Step at %p\n", step);
step->nrefs = 1;
step->pool = pakfire_transaction_get_pool(transaction);
- step->transaction = pakfire_transaction_ref(transaction);
step->id = id;
+ step->type = get_type(t, step->id);
// Get the package
step->package = pakfire_package_create(step->pool, step->id);
static void pakfire_step_free(PakfireStep step) {
pakfire_package_unref(step->package);
- pakfire_transaction_unref(step->transaction);
pakfire_pool_unref(step->pool);
pakfire_free(step);
}
PAKFIRE_EXPORT pakfire_step_type_t pakfire_step_get_type(PakfireStep step) {
- Transaction* trans = pakfire_transaction_get_transaction(step->transaction);
-
- int type = transaction_type(trans, step->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;
- }
+ return step->type;
}
PAKFIRE_EXPORT const char* pakfire_step_get_type_string(PakfireStep step) {