From: Michael Tremer Date: Thu, 30 Jan 2025 21:00:50 +0000 (+0000) Subject: packages: Allow passing a repository for faster caching X-Git-Tag: 0.9.30~238 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=17c4a2f4892be62ea751750d63c8d9b518fae554;p=pakfire.git packages: Allow passing a repository for faster caching Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/package.c b/src/pakfire/package.c index 7f35204c..1426bae0 100644 --- a/src/pakfire/package.c +++ b/src/pakfire/package.c @@ -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) { diff --git a/src/pakfire/package.h b/src/pakfire/package.h index 1e0c3ddf..08e39e91 100644 --- a/src/pakfire/package.h +++ b/src/pakfire/package.h @@ -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); diff --git a/src/pakfire/packagelist.c b/src/pakfire/packagelist.c index 5c1614ca..242d4a5c 100644 --- a/src/pakfire/packagelist.c +++ b/src/pakfire/packagelist.c @@ -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; diff --git a/src/pakfire/repo.c b/src/pakfire/repo.c index 31c8a651..43dcd9f5 100644 --- a/src/pakfire/repo.c +++ b/src/pakfire/repo.c @@ -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; diff --git a/src/pakfire/transaction.c b/src/pakfire/transaction.c index 380f8720..03899a79 100644 --- a/src/pakfire/transaction.c +++ b/src/pakfire/transaction.c @@ -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;