#include <pakfire/util.h>
#include "package.h"
+#include "pakfire.h"
#include "relation.h"
#include "repo.h"
-PyObject* new_package(PoolObject* pool, Id id) {
- PyObject* args = Py_BuildValue("Oi", (PyObject *)pool, id);
+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);
static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
if (self) {
- self->pool = NULL;
+ self->pakfire = NULL;
self->package = NULL;
}
}
static void Package_dealloc(PackageObject* self) {
- if (self->package)
- pakfire_package_unref(self->package);
+ pakfire_package_unref(self->package);
+ Py_XDECREF(self->pakfire);
Py_TYPE(self)->tp_free((PyObject *)self);
}
static int Package_init(PackageObject* self, PyObject* args, PyObject* kwds) {
- PyObject* pool;
+ PakfireObject* pakfire;
int id = 0;
- if (!PyArg_ParseTuple(args, "O!|i", &PoolType, &pool, &id))
+ if (!PyArg_ParseTuple(args, "O!|i", &PakfireType, &pakfire, &id))
return -1;
- self->pool = (PoolObject *)pool;
- Py_INCREF(self->pool);
+ self->pakfire = pakfire;
+ Py_INCREF(self->pakfire);
- self->package = pakfire_package_create(self->pool->pool, (Id)id);
+ self->package = pakfire_package_create(self->pakfire->pakfire, (Id)id);
return 0;
}
return str;
}
-static PyObject* PyList_FromRelationList(PoolObject* pool, PakfireRelationList relationlist) {
+static PyObject* PyList_FromRelationList(PakfireObject* pakfire, PakfireRelationList relationlist) {
PyObject* list = PyList_New(0);
if (list == NULL)
return NULL;
for (int i = 0; i < count; i++) {
PakfireRelation relation = pakfire_relationlist_get_clone(relationlist, i);
- PyObject* relation_obj = new_relation(pool, pakfire_relation_id(relation));
+ PyObject* relation_obj = new_relation(pakfire, pakfire_relation_id(relation));
pakfire_relation_free(relation);
if (relation_obj == NULL)
return NULL;
}
-static PakfireRelationList PyList_AsRelationList(PoolObject* pool, PyObject* value) {
+static PakfireRelationList PyList_AsRelationList(PakfireObject* pakfire, PyObject* value) {
if (!PySequence_Check(value)) {
PyErr_SetString(PyExc_AttributeError, "Expected a sequence.");
return NULL;
}
const int length = PySequence_Length(value);
- PakfireRelationList relationlist = pakfire_relationlist_create(pool->pool);
+ PakfireRelationList relationlist = pakfire_relationlist_create(pakfire->pakfire);
for (int i = 0; i < length; i++) {
PyObject* item = PySequence_GetItem(value, i);
static PyObject* Package_get_provides(PackageObject* self) {
PakfireRelationList relationlist = pakfire_package_get_provides(self->package);
- PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+ PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
pakfire_relationlist_free(relationlist);
return list;
}
static int Package_set_provides(PackageObject* self, PyObject* value) {
- PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+ PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
if (!relationlist)
return -1;
static PyObject* Package_get_requires(PackageObject* self) {
PakfireRelationList relationlist = pakfire_package_get_requires(self->package);
- PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+ PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
pakfire_relationlist_free(relationlist);
return list;
}
static int Package_set_requires(PackageObject* self, PyObject* value) {
- PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+ PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
if (!relationlist)
return -1;
static PyObject* Package_get_obsoletes(PackageObject* self) {
PakfireRelationList relationlist = pakfire_package_get_obsoletes(self->package);
- PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+ PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
pakfire_relationlist_free(relationlist);
return list;
}
static int Package_set_obsoletes(PackageObject* self, PyObject* value) {
- PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+ PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
if (!relationlist)
return -1;
static PyObject* Package_get_conflicts(PackageObject* self) {
PakfireRelationList relationlist = pakfire_package_get_conflicts(self->package);
- PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+ PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
pakfire_relationlist_free(relationlist);
return list;
}
static int Package_set_conflicts(PackageObject* self, PyObject* value) {
- PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+ PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
if (!relationlist)
return -1;
static PyObject* Package_get_recommends(PackageObject* self) {
PakfireRelationList relationlist = pakfire_package_get_recommends(self->package);
- PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+ PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
pakfire_relationlist_free(relationlist);
return list;
}
static int Package_set_recommends(PackageObject* self, PyObject* value) {
- PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+ PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
if (!relationlist)
return -1;
static PyObject* Package_get_suggests(PackageObject* self) {
PakfireRelationList relationlist = pakfire_package_get_suggests(self->package);
- PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+ PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
pakfire_relationlist_free(relationlist);
return list;
}
static int Package_set_suggests(PackageObject* self, PyObject* value) {
- PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+ PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
if (!relationlist)
return -1;
#include <solv/pooltypes.h>
#include "pakfire.h"
-#include "pool.h"
typedef struct {
PyObject_HEAD
PakfireObject* pakfire;
- PoolObject* pool;
PakfirePackage package;
} PackageObject;
extern PyTypeObject PackageType;
-PyObject* new_package(PoolObject* pool, Id id);
+PyObject* new_package(PakfireObject* pakfire, Id id);
#endif /* PYTHON_PAKFIRE_PACKAGE_H */
return self;
}
-PyObject* new_relation(PoolObject* pool, Id id) {
- RelationObject* relation = Relation_new_core(&RelationType, pool);
- relation->relation = pakfire_relation_create_from_id(pool->pool, id);
+PyObject* new_relation(PakfireObject* pakfire, Id id) {
+ RelationObject* relation = Relation_new_core(&RelationType, pakfire);
+ relation->relation = pakfire_relation_create_from_id(pakfire->pakfire, id);
return (PyObject *)relation;
}
for (unsigned int i = 0; i < pakfire_packagelist_count(packagelist); i++) {
PakfirePackage package = pakfire_packagelist_get(packagelist, i);
- PyObject* obj = new_package(self->pool, pakfire_package_id(package));
+ PyObject* obj = new_package(self->pakfire, pakfire_package_id(package));
PyList_Append(list, obj);
pakfire_package_unref(package);
#include <solv/pooltypes.h>
#include <pakfire/relation.h>
+#include "pakfire.h"
#include "pool.h"
typedef struct {
PyObject_HEAD
+ PakfireObject* pakfire;
PoolObject* pool;
PakfireRelation relation;
extern PyTypeObject RelationType;
-PyObject* new_relation(PoolObject* pool, Id id);
+PyObject* new_relation(PakfireObject* pakfire, Id id);
#endif /* PYTHON_PAKFIRE_RELATION_H */
if (!PyArg_ParseTuple(args, "sss", &name, &evr, &arch))
return NULL;
- PakfirePool pool = pakfire_repo_get_pool(self->repo);
- PakfirePackage pkg = pakfire_package_create2(pool, self->repo, name, evr, arch);
+ PakfirePackage pkg = pakfire_package_create2(self->pakfire->pakfire, self->repo, name, evr, arch);
- // XXX must be self->pakfire instead of NULL
- return new_package(NULL /* self->pakfire */, pakfire_package_id(pkg));
+ return new_package(self->pakfire, pakfire_package_id(pkg));
}
static PyObject* Repo_cache_age(RepoObject* self, PyObject* args) {
#include <pakfire/relation.h>
#include <pakfire/relationlist.h>
-#include <pakfire/pool.h>
#include <pakfire/types.h>
-PakfirePackage pakfire_package_create(PakfirePool pool, Id id);
-PakfirePackage pakfire_package_create2(PakfirePool pool, PakfireRepo repo, const char* name, const char* evr, const char* arch);
+PakfirePackage pakfire_package_create(Pakfire pakfire, Id id);
+PakfirePackage pakfire_package_create2(Pakfire pakfire, PakfireRepo repo, const char* name, const char* evr, const char* arch);
PakfirePackage pakfire_package_ref(PakfirePackage pkg);
PakfirePackage pakfire_package_unref(PakfirePackage pkg);
#ifdef PAKFIRE_PRIVATE
-PakfirePackageList pakfire_packagelist_from_queue(PakfirePool _pool, Queue* q);
+PakfirePackageList pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q);
#endif
#ifdef PAKFIRE_PRIVATE
struct _PakfireRelation {
+ Pakfire pakfire;
PakfirePool pool;
Id id;
};
#include <solv/repo.h>
#include <solv/solvable.h>
+#include <pakfire/archive.h>
#include <pakfire/cache.h>
#include <pakfire/constants.h>
#include <pakfire/file.h>
#include <pakfire/logging.h>
#include <pakfire/package.h>
#include <pakfire/packagecache.h>
+#include <pakfire/pakfire.h>
#include <pakfire/pool.h>
#include <pakfire/private.h>
#include <pakfire/relation.h>
#include <pakfire/util.h>
struct _PakfirePackage {
- PakfirePool pool;
+ Pakfire pakfire;
Id id;
PakfireFile filelist;
+ PakfireArchive archive;
int nrefs;
};
static Pool* pakfire_package_get_solv_pool(PakfirePackage pkg) {
- return pakfire_pool_get_solv_pool(pkg->pool);
+ PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+
+ Pool* p = pakfire_pool_get_solv_pool(pool);
+ pakfire_pool_unref(pool);
+
+ return p;
}
-static void pakfire_package_add_self_provides(PakfirePool pool, PakfirePackage pkg, const char* name, const char* evr) {
+static void pakfire_package_add_self_provides(Pakfire pakfire, PakfirePackage pkg, const char* name, const char* evr) {
+ PakfirePool pool = pakfire_get_pool(pakfire);
+
PakfireRelation relation = pakfire_relation_create(pool, name, PAKFIRE_EQ, evr);
pakfire_package_add_provides(pkg, relation);
pakfire_relation_free(relation);
+ pakfire_pool_unref(pool);
}
-PAKFIRE_EXPORT PakfirePackage pakfire_package_create(PakfirePool pool, Id id) {
+PAKFIRE_EXPORT PakfirePackage pakfire_package_create(Pakfire pakfire, Id id) {
PakfirePackage pkg = pakfire_calloc(1, sizeof(*pkg));
if (pkg) {
DEBUG("Allocated Package at %p\n", pkg);
- pkg->pool = pakfire_pool_ref(pool);
+ pkg->pakfire = pakfire_ref(pakfire);
pkg->id = id;
// Initialize reference counter
return pkg;
}
-PAKFIRE_EXPORT PakfirePackage pakfire_package_create2(PakfirePool pool, PakfireRepo repo, const char* name, const char* evr, const char* arch) {
+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);
pakfire_package_set_name(pkg, name);
pakfire_package_set_evr(pkg, evr);
pakfire_package_set_arch(pkg, arch);
- pakfire_package_add_self_provides(pool, pkg, name, evr);
+ pakfire_package_add_self_provides(pakfire, pkg, name, evr);
return pkg;
}
static void pakfire_package_free(PakfirePackage pkg) {
- pakfire_pool_unref(pkg->pool);
+ pakfire_archive_unref(pkg->archive);
pakfire_package_filelist_remove(pkg);
+ pakfire_unref(pkg->pakfire);
pakfire_free(pkg);
DEBUG("Released Package at %p\n", pkg);
Solvable* s = get_solvable(pkg);
solvable_lookup_idarray(s, type, &q);
- PakfireRelationList relationlist = pakfire_relationlist_from_queue(pkg->pool, q);
+ PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+ PakfireRelationList relationlist = pakfire_relationlist_from_queue(pool, q);
+ pakfire_pool_unref(pool);
queue_free(&q);
PAKFIRE_EXPORT PakfireRepo pakfire_package_get_repo(PakfirePackage pkg) {
Solvable* s = get_solvable(pkg);
- return pakfire_repo_create_from_repo(pkg->pool, s->repo);
+ return pakfire_repo_create_from_repo(pkg->pakfire, s->repo);
}
PAKFIRE_EXPORT void pakfire_package_set_repo(PakfirePackage pkg, PakfireRepo repo) {
}
PAKFIRE_EXPORT int pakfire_package_is_cached(PakfirePackage pkg) {
- PakfireCache cache = pakfire_pool_get_cache(pkg->pool);
+ PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+ PakfireCache cache = pakfire_pool_get_cache(pool);
+ pakfire_pool_unref(pool);
+
if (!cache)
return 1;
}
PAKFIRE_EXPORT char* pakfire_package_get_cache_path(PakfirePackage pkg) {
- PakfireCache cache = pakfire_pool_get_cache(pkg->pool);
+ PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+ PakfireCache cache = pakfire_pool_get_cache(pool);
+ pakfire_pool_unref(pool);
+
if (!cache)
return NULL;
return cache_path;
}
+PAKFIRE_EXPORT PakfireArchive pakfire_package_get_archive(PakfirePackage pkg) {
+ // Return the package if it has already been opened
+ if (pkg->archive)
+ return pakfire_archive_ref(pkg->archive);
+
+ // Otherwise open the archive from the cache
+ char* path = pakfire_package_get_cache_full_path(pkg);
+ PakfireArchive archive = pakfire_archive_open(pkg->pakfire, path);
+
+ // Free resources
+ pakfire_free(path);
+
+ return archive;
+}
+
static PakfireFile pakfire_package_fetch_legacy_filelist(PakfirePackage pkg) {
pakfire_package_internalize_repo(pkg);
#include <pakfire/logging.h>
#include <pakfire/package.h>
#include <pakfire/packagelist.h>
+#include <pakfire/pakfire.h>
#include <pakfire/private.h>
#include <pakfire/types.h>
#include <pakfire/util.h>
pakfire_packagelist_push(list, pkg);
}
-PAKFIRE_EXPORT PakfirePackageList pakfire_packagelist_from_queue(PakfirePool _pool, Queue* q) {
+PAKFIRE_EXPORT PakfirePackageList pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q) {
+ PakfirePool _pool = pakfire_get_pool(pakfire);
PakfirePackageList list = pakfire_packagelist_create();
Pool* pool = pakfire_pool_get_solv_pool(_pool);
Id p, pp;
for (int i = 0; i < q->count; i += 2) {
FOR_JOB_SELECT(p, pp, q->elements[i], q->elements[i + 1]) {
- PakfirePackage pkg = pakfire_package_create(_pool, p);
+ PakfirePackage pkg = pakfire_package_create(pakfire, p);
pakfire_packagelist_push(list, pkg);
pakfire_package_unref(pkg);
}
}
+ pakfire_pool_unref(_pool);
+
return list;
}
pakfire_relation2queue(relation, &q, 0);
- PakfirePackageList list = pakfire_packagelist_from_queue(relation->pool, &q);
+ PakfirePackageList list = pakfire_packagelist_from_queue(relation->pakfire, &q);
queue_free(&q);
PAKFIRE_EXPORT void pakfire_repo_set_enabled(PakfireRepo repo, int enabled) {
repo->repo->disabled = !enabled;
- PakfirePool pool = pakfire_repo_get_pool(repo);
- pakfire_pool_has_changed(pool);
- pakfire_pool_unref(pool);
+ pakfire_pool_has_changed(repo->pakfire);
}
PAKFIRE_EXPORT int pakfire_repo_get_priority(PakfireRepo repo) {
return PAKFIRE_E_SOLV_CORRUPTED;
}
- PakfirePool pool = pakfire_get_pool(repo->pakfire);
- pakfire_pool_has_changed(pool);
- pakfire_pool_unref(pool);
+ pakfire_pool_has_changed(repo->pakfire);
return ret;
}
PAKFIRE_EXPORT PakfirePackage pakfire_repo_add_package(PakfireRepo repo) {
Id id = repo_add_solvable(repo->repo);
- PakfirePool pool = pakfire_get_pool(repo->pakfire);
- PakfirePackage pkg = pakfire_package_create(pool, id);
- pakfire_pool_unref(pool);
-
- return pkg;
+ return pakfire_package_create(repo->pakfire, id);
}
PAKFIRE_EXPORT PakfireRepoCache pakfire_repo_get_cache(PakfireRepo repo) {
request->transaction = NULL;
}
- PakfirePool pool = pakfire_get_pool(request->pakfire);
- pakfire_pool_apply_changes(pool);
- pakfire_pool_unref(pool);
+ pakfire_pool_apply_changes(request->pakfire);
// Save time when we starting solving
clock_t solving_start = clock();
#include <pakfire/logging.h>
#include <pakfire/package.h>
#include <pakfire/packagelist.h>
+#include <pakfire/pakfire.h>
#include <pakfire/pool.h>
#include <pakfire/private.h>
#include <pakfire/selector.h>
#include <pakfire/util.h>
struct _PakfireSelector {
+ Pakfire pakfire;
PakfirePool pool;
PakfireFilter f_name;
PakfireFilter f_provides;
pakfire_selector2queue(selector, &q, 0);
- PakfirePackageList list = pakfire_packagelist_from_queue(selector->pool, &q);
+ PakfirePackageList list = pakfire_packagelist_from_queue(selector->pakfire, &q);
queue_free(&q);
goto finish;
}
- pakfire_pool_apply_changes(pool);
+ pakfire_pool_apply_changes(selector->pakfire);
ret = filter_name2queue(pool, selector->f_name, &queue_selector);
if (ret)
step->type = get_type(t, id);
// Get the package
- PakfirePool pool = pakfire_get_pool(step->pakfire);
- step->package = pakfire_package_create(pool, id);
- pakfire_pool_unref(pool);
+ step->package = pakfire_package_create(step->pakfire, id);
}
return step;