]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Don't keep a reference to Transaction in Step
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Jan 2018 14:35:50 +0000 (15:35 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Jan 2018 14:35:50 +0000 (15:35 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/step.c

index ff1ec35f77da627328d7f29adc718d1a28b0a603..c45ba832555d9d1f7dbf7f495788dc21663417a6 100644 (file)
 
 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);
@@ -68,7 +105,6 @@ PAKFIRE_EXPORT PakfireStep pakfire_step_ref(PakfireStep step) {
 
 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);
 
@@ -91,40 +127,7 @@ PAKFIRE_EXPORT PakfirePackage pakfire_step_get_package(PakfireStep 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) {