]> git.ipfire.org Git - pakfire.git/commitdiff
packages: Allow passing a repository for faster caching
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 30 Jan 2025 21:00:50 +0000 (21:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 30 Jan 2025 21:25:31 +0000 (21:25 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/package.c
src/pakfire/package.h
src/pakfire/packagelist.c
src/pakfire/repo.c
src/pakfire/transaction.c

index 7f35204ce0a47b679bc8ccdd4f12b8555da59479..1426bae09599061b23087e424a9692ed959f7d12 100644 (file)
@@ -167,7 +167,7 @@ static int pakfire_package_add_self_provides(struct pakfire_package* pkg) {
 }
 
 int pakfire_package_create_from_solvable(struct pakfire_package** package,
-               struct pakfire* pakfire, Id id) {
+               struct pakfire* pakfire, struct pakfire_repo* repo, Id id) {
        struct pakfire_package* pkg = NULL;
 
        // Allocate some memory
@@ -187,6 +187,10 @@ int pakfire_package_create_from_solvable(struct pakfire_package** package,
        // Store the ID
        pkg->id = id;
 
+       // Store a reference to the repository
+       if (repo)
+               pkg->repo = pakfire_repo_ref(repo);
+
        // Success
        *package = pkg;
 
@@ -228,13 +232,10 @@ int pakfire_package_create(struct pakfire_package** package,
        }
 
        // Create a new package object
-       r = pakfire_package_create_from_solvable(package, pakfire, id);
+       r = pakfire_package_create_from_solvable(package, pakfire, repo, id);
        if (r)
                goto ERROR;
 
-       // Reference the repository
-       (*package)->repo = pakfire_repo_ref(repo);
-
        // Set the name
        r = pakfire_package_set_string(*package, PAKFIRE_PKG_NAME, name);
        if (r) {
index 1e0c3ddffe0a7876e73d59f8f3016af35ea96614..08e39e9151423d38c18965627b8d44001191bd6d 100644 (file)
@@ -158,7 +158,7 @@ enum pakfire_package_dump_flags {
 int pakfire_package_installcheck(struct pakfire_package* pkg, char** problem, int flags);
 
 int pakfire_package_create_from_solvable(struct pakfire_package** package,
-       struct pakfire* pakfire, Id id);
+       struct pakfire* pakfire, struct pakfire_repo* repo, Id id);
 
 int pakfire_package_set_strings_from_string(struct pakfire_package* pkg,
        const enum pakfire_package_key key, const char* value);
index 5c1614cabc097def7f732aecb9afccb405baf167..242d4a5c96780da4d449ffb99657d108fa64c0da 100644 (file)
@@ -196,7 +196,7 @@ int pakfire_packagelist_import_solvables(struct pakfire_packagelist* self,
 
        // Walk through all elements on the queue
        for (int i = 0; i < q->count; i++) {
-               r = pakfire_package_create_from_solvable(&pkg, pakfire, q->elements[i]);
+               r = pakfire_package_create_from_solvable(&pkg, pakfire, NULL, q->elements[i]);
                if (r)
                        return r;
 
index 31c8a651d9f18f8de8afa62521ceb8164580e1c3..43dcd9f5e99d3654c44cc3bf11515c0418491743 100644 (file)
@@ -1033,7 +1033,7 @@ static int pakfire_repo_to_packagelist(
                id = pool_solvable2id(self->repo->pool, s);
 
                // Create a new package
-               r = pakfire_package_create_from_solvable(&pkg, self->pakfire, id);
+               r = pakfire_package_create_from_solvable(&pkg, self->pakfire, self, id);
                if (r < 0)
                        goto ERROR;
 
@@ -1593,7 +1593,7 @@ static int pakfire_repo_delete_all_packages(
                Id id = pool_solvable2id(pool, s);
 
                // Allocate package
-               r = pakfire_package_create_from_solvable(&pkg, repo->pakfire, id);
+               r = pakfire_package_create_from_solvable(&pkg, repo->pakfire, repo, id);
                if (r)
                        return 1;
 
index 380f8720e87dfdcd25b393ef7690b88a19641462..03899a79cbef382ee726c78e60280e812453928d 100644 (file)
@@ -212,7 +212,7 @@ static int pakfire_transaction_import_transaction(struct pakfire_transaction* tr
        // Create all packages
        for (unsigned int i = 0; i < transaction->num; i++) {
                r = pakfire_package_create_from_solvable(&transaction->packages[i],
-                       transaction->pakfire, transaction->transaction->steps.elements[i]);
+                       transaction->pakfire, NULL, transaction->transaction->steps.elements[i]);
                if (r < 0)
                        goto ERROR;
        }
@@ -223,7 +223,7 @@ static int pakfire_transaction_import_transaction(struct pakfire_transaction* tr
        // Store all newly installed and overall all installed packages
        for (int i = 0; i < pkgs.count; i++) {
                r = pakfire_package_create_from_solvable(&pkg,
-                               transaction->pakfire, pkgs.elements[i]);
+                               transaction->pakfire, NULL, pkgs.elements[i]);
                if (r < 0)
                        goto ERROR;
 
@@ -1204,7 +1204,7 @@ char* pakfire_transaction_dump(struct pakfire_transaction* transaction, size_t w
                        struct pakfire_package* new_pkg = NULL;
 
                        r = pakfire_package_create_from_solvable(&old_pkg, transaction->pakfire,
-                               pkgs.elements[j]);
+                                       NULL, pkgs.elements[j]);
                        if (r)
                                continue;
 
@@ -1212,7 +1212,7 @@ char* pakfire_transaction_dump(struct pakfire_transaction* transaction, size_t w
                                case SOLVER_TRANSACTION_UPGRADED:
                                case SOLVER_TRANSACTION_DOWNGRADED:
                                        r = pakfire_package_create_from_solvable(&new_pkg, transaction->pakfire,
-                                               transaction_obs_pkg(transaction->transaction, pkgs.elements[j]));
+                                                       NULL, transaction_obs_pkg(transaction->transaction, pkgs.elements[j]));
                                        if (r)
                                                continue;