}
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
// Store the ID
pkg->id = id;
+ // Store a reference to the repository
+ if (repo)
+ pkg->repo = pakfire_repo_ref(repo);
+
// Success
*package = pkg;
}
// 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) {
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);
// 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;
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;
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;
// 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;
}
// 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;
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;
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;