]> git.ipfire.org Git - pakfire.git/commitdiff
python: Drop reference to Pakfire in Repo
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 20 Jan 2018 13:43:48 +0000 (14:43 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 20 Jan 2018 13:43:48 +0000 (14:43 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/package.c
src/_pakfire/package.h
src/_pakfire/relation.c
src/_pakfire/repo.c
src/_pakfire/repo.h
src/libpakfire/include/pakfire/repo.h
src/libpakfire/libpakfire.sym
src/libpakfire/repo.c

index f3003c5d833816bb786f5a1ee5f450796af76655..c53a732d185ac7f721293e7d2d2b0ce7b5601919 100644 (file)
 #include "relation.h"
 #include "repo.h"
 
-PyObject* new_package(PakfireObject* pakfire, Id id) {
-       PyObject* args = Py_BuildValue("Oi", (PyObject *)pakfire, id);
-       PyObject* repo = PyObject_CallObject((PyObject *)&PackageType, args);
-
-       Py_DECREF(args);
+PyObject* new_package(PyTypeObject* type, PakfirePackage pkg) {
+       PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
+       if (self) {
+               self->package = pakfire_package_ref(pkg);
+       }
 
-       return repo;
+       return (PyObject *)self;
 }
 
 static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
index 48b29a8459bcaef18ef4e1e82494e24d4a1d1c89..dc2933da74076bacf7e98d407ef5dbab6553a2dd 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <Python.h>
 
-#include <pakfire/package.h>
+#include <pakfire/types.h>
 #include <solv/pooltypes.h>
 
 #include "pakfire.h"
@@ -36,6 +36,6 @@ typedef struct {
 
 extern PyTypeObject PackageType;
 
-PyObject* new_package(PakfireObject* pakfire, Id id);
+PyObject* new_package(PyTypeObject* type, PakfirePackage pkg);
 
 #endif /* PYTHON_PAKFIRE_PACKAGE_H */
index 2459471db713648b41d6805afdbb67a377ede493..8ec3603ca39686a6daf20f52851e304e00a47be2 100644 (file)
@@ -115,7 +115,7 @@ static PyObject* Relation_get_providers(RelationObject* self) {
        for (unsigned int i = 0; i < pakfire_packagelist_count(packagelist); i++) {
                PakfirePackage package = pakfire_packagelist_get(packagelist, i);
 
-               PyObject* obj = new_package(self->pakfire, pakfire_package_id(package));
+               PyObject* obj = new_package(&PackageType, package);
                PyList_Append(list, obj);
 
                pakfire_package_unref(package);
index 00a1b9fb1dc07b75ea86ed3ba1b15c756e5b5848..1c65b47eeddb50df6efc6718c5770a356afe6217 100644 (file)
@@ -40,7 +40,6 @@ PyObject* new_repo(PyTypeObject* type, PakfireRepo repo) {
 static PyObject* Repo_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
        RepoObject* self = (RepoObject *)type->tp_alloc(type, 0);
        if (self) {
-               self->pakfire = NULL;
                self->repo = NULL;
        }
 
@@ -50,7 +49,6 @@ static PyObject* Repo_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
 static void Repo_dealloc(RepoObject* self) {
        pakfire_repo_unref(self->repo);
 
-       Py_XDECREF(self->pakfire);
        Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
@@ -61,10 +59,8 @@ static int Repo_init(RepoObject* self, PyObject* args, PyObject* kwds) {
        if (!PyArg_ParseTuple(args, "O!s", &PakfireType, &pakfire, &name))
                return -1;
 
-       self->pakfire = pakfire;
-       Py_INCREF(self->pakfire);
-
-       self->repo = pakfire_repo_create(self->pakfire->pakfire, name);
+       // Create a new repository
+       self->repo = pakfire_repo_create(pakfire->pakfire, name);
 
        return 0;
 }
@@ -219,9 +215,15 @@ static PyObject* Repo__add_package(RepoObject* self, PyObject* args) {
        if (!PyArg_ParseTuple(args, "sss", &name, &evr, &arch))
                return NULL;
 
-       PakfirePackage pkg = pakfire_package_create2(self->pakfire->pakfire, self->repo, name, evr, arch);
+       Pakfire pakfire = pakfire_repo_get_pakfire(self->repo);
+       PakfirePackage pkg = pakfire_package_create2(pakfire, self->repo, name, evr, arch);
+
+       PyObject* obj = new_package(&PackageType, pkg);
 
-       return new_package(self->pakfire, pakfire_package_id(pkg));
+       pakfire_package_unref(pkg);
+       pakfire_unref(pakfire);
+
+       return obj;
 }
 
 static PyObject* Repo_cache_age(RepoObject* self, PyObject* args) {
index 3a25f0ecac142a66f5c1f1eb3988e5bc88451943..d160b8926d97e5dc2d926dda652223dd74371b21 100644 (file)
@@ -29,7 +29,6 @@
 
 typedef struct {
     PyObject_HEAD
-    PakfireObject* pakfire;
     PakfireRepo repo;
 } RepoObject;
 
index 9f03845821d64fd9879a41d9b41764d3c3be0af9..f8085e1501a53ae68fda94b71b46f676fc14a00e 100644 (file)
@@ -30,6 +30,7 @@ PakfireRepo pakfire_repo_create(Pakfire pakfire, const char* name);
 
 PakfireRepo pakfire_repo_ref(PakfireRepo repo);
 PakfireRepo pakfire_repo_unref(PakfireRepo repo);
+Pakfire pakfire_repo_get_pakfire(PakfireRepo repo);
 
 int pakfire_repo_identical(PakfireRepo repo1, PakfireRepo repo2);
 int pakfire_repo_cmp(PakfireRepo repo1, PakfireRepo repo2);
index 2cf01072b77ee31f9138f02cfd8b58ca5e422e65..0c158ce65056a1486dea8ba48feacbf74a1f4527 100644 (file)
@@ -227,6 +227,7 @@ global:
        pakfire_repo_get_cache;
        pakfire_repo_get_name;
        pakfire_repo_get_enabled;
+       pakfire_repo_get_pakfire;
        pakfire_repo_get_pool;
        pakfire_repo_get_priority;
        pakfire_repo_identical;
index b721e40d23600f3c10c701a8d278a3045642b259..09a3db92454ff7b848ffa3280a7639bc1d67256d 100644 (file)
@@ -133,6 +133,10 @@ PAKFIRE_EXPORT PakfireRepo pakfire_repo_unref(PakfireRepo repo) {
        return NULL;
 }
 
+PAKFIRE_EXPORT Pakfire pakfire_repo_get_pakfire(PakfireRepo repo) {
+       return pakfire_ref(repo->pakfire);
+}
+
 Repo* pakfire_repo_get_repo(PakfireRepo repo) {
        return repo->repo;
 }