Pakfire pakfire;
Id id;
int nrefs;
+
+ PakfireRepo repo;
};
static Pool* pakfire_package_get_solv_pool(PakfirePackage pkg) {
PAKFIRE_EXPORT PakfirePackage pakfire_package_create_from_solvable(Pakfire pakfire, Id id) {
PakfirePackage pkg = calloc(1, sizeof(*pkg));
- if (pkg) {
- DEBUG(pakfire, "Allocated Package at %p\n", pkg);
+ if (!pkg)
+ return NULL;
- pkg->pakfire = pakfire_ref(pakfire);
- pkg->id = id;
+ DEBUG(pakfire, "Allocated Package at %p\n", pkg);
- // Initialize reference counter
- pkg->nrefs = 1;
- }
+ pkg->pakfire = pakfire_ref(pakfire);
+ pkg->id = id;
+
+ // Initialize reference counter
+ pkg->nrefs = 1;
return pkg;
}
PAKFIRE_EXPORT PakfirePackage pakfire_package_create2(Pakfire pakfire, PakfireRepo repo, const char* name, const char* evr, const char* arch) {
- PakfirePackage pkg = pakfire_repo_add_package(repo);
+ Id id = pakfire_repo_add_solvable(repo);
+ if (!id)
+ return NULL;
+
+ PakfirePackage pkg = pakfire_package_create_from_solvable(pakfire, id);
+ if (!pkg)
+ return NULL;
+ pkg->repo = pakfire_repo_ref(repo);
+
+ // Set the given attributes
pakfire_package_set_name(pkg, name);
pakfire_package_set_evr(pkg, evr);
pakfire_package_set_arch(pkg, arch);
+ // Add self-provides
pakfire_package_add_self_provides(pakfire, pkg, name, evr);
return pkg;
static void pakfire_package_free(PakfirePackage pkg) {
DEBUG(pkg->pakfire, "Releasing Package at %p\n", pkg);
+ if (pkg->repo)
+ pakfire_repo_unref(pkg->repo);
+
pakfire_unref(pkg->pakfire);
free(pkg);
}
}
PAKFIRE_EXPORT PakfireRepo pakfire_package_get_repo(PakfirePackage pkg) {
- Solvable* s = get_solvable(pkg);
+ if (!pkg->repo) {
+ Solvable* s = get_solvable(pkg);
+
+ pkg->repo = pakfire_repo_create_from_repo(pkg->pakfire, s->repo);
+ }
- return pakfire_repo_create_from_repo(pkg->pakfire, s->repo);
+ return pakfire_repo_ref(pkg->repo);
}
PAKFIRE_EXPORT void pakfire_package_set_repo(PakfirePackage pkg, PakfireRepo repo) {
- Solvable* s = get_solvable(pkg);
+ // Free old repository
+ if (pkg->repo)
+ pakfire_repo_unref(pkg->repo);
+ Solvable* s = get_solvable(pkg);
s->repo = pakfire_repo_get_repo(repo);
+
+ pkg->repo = pakfire_repo_ref(repo);
}
PAKFIRE_EXPORT char* pakfire_package_get_location(PakfirePackage pkg) {
int nrefs;
};
+Id pakfire_repo_add_solvable(PakfireRepo repo) {
+ return repo_add_solvable(repo->repo);
+}
+
static void free_repo_appdata(struct pakfire_repo_appdata* appdata) {
// repodata is being destroyed with the repository
return repo_write(repo->repo, f);
}
-PAKFIRE_EXPORT PakfirePackage pakfire_repo_add_package(PakfireRepo repo) {
- Id id = repo_add_solvable(repo->repo);
-
- return pakfire_package_create_from_solvable(repo->pakfire, id);
-}
-
PAKFIRE_EXPORT PakfirePackage pakfire_repo_add_archive(PakfireRepo repo, PakfireArchive archive) {
return pakfire_archive_make_package(archive, repo);
}