#include <solv/solver.h>
#include <pakfire/errno.h>
+#include <pakfire/pakfire.h>
#include <pakfire/pool.h>
#include <pakfire/repo.h>
#include "constants.h"
+#include "pakfire.h"
#include "pool.h"
#include "relation.h"
#include "repo.h"
static void Pool_dealloc(PoolObject* self) {
if (self->pool)
- pakfire_pool_free(self->pool);
+ pakfire_pool_unref(self->pool);
Py_TYPE(self)->tp_free((PyObject *)self);
}
static int Pool_init(PoolObject* self, PyObject* args, PyObject* kwds) {
- const char* arch;
+ PakfireObject* pakfire = NULL;
- if (!PyArg_ParseTuple(args, "s", &arch))
+ if (!PyArg_ParseTuple(args, "O!", &PakfireType, &pakfire))
return -1;
- self->pool = pakfire_pool_create(arch);
- if (self->pool == NULL) {
- switch(pakfire_get_errno()) {
- default:
- assert(0);
- }
+ self->pool = pakfire_get_pool(pakfire->pakfire);
+ if (!self->pool)
return -1;
- }
return 0;
}
const char* pakfire_get_path(Pakfire pakfire);
const char* pakfire_get_arch(Pakfire pakfire);
+PakfirePool pakfire_get_pool(Pakfire pakfire);
+
#ifdef PAKFIRE_PRIVATE
struct _Pakfire {
- char* path;
- char* arch;
+ char* path;
+ char* arch;
+ PakfirePool pool;
int nrefs;
};
#include <pakfire/types.h>
-PakfirePool pakfire_pool_create(const char* arch);
-void pakfire_pool_free(PakfirePool pool);
+PakfirePool pakfire_pool_create(Pakfire pakfire);
+PakfirePool pakfire_pool_ref(PakfirePool pool);
+void pakfire_pool_unref(PakfirePool pool);
int pakfire_pool_version_compare(PakfirePool pool, const char* evr1, const char* evr2);
int pakfire_pool_count(PakfirePool pool);
Queue installonly;
PakfireCache cache;
+ int nrefs;
};
void pakfire_pool_make_provides_ready(PakfirePool pool);
pakfire_create;
pakfire_get_arch;
pakfire_get_path;
+ pakfire_get_pool;
pakfire_ref;
pakfire_unref;
# pool
pakfire_pool_count;
pakfire_pool_create;
- pakfire_pool_free;
pakfire_pool_get_cache_path;
pakfire_pool_get_installed_repo;
pakfire_pool_get_installonly;
+ pakfire_pool_ref;
pakfire_pool_search;
pakfire_pool_set_cache_path;
pakfire_pool_set_installed_repo;
pakfire_pool_set_installonly;
+ pakfire_pool_unref;
pakfire_pool_version_compare;
pakfire_pool_whatprovides;
#############################################################################*/
#include <pakfire/pakfire.h>
+#include <pakfire/pool.h>
#include <pakfire/types.h>
#include <pakfire/util.h>
Pakfire pakfire_create(const char* path, const char* arch) {
- Pakfire pakfire = pakfire_calloc(1, sizeof(*pakfire));
- if (pakfire) {
- pakfire->path = pakfire_strdup(path);
- pakfire->arch = pakfire_strdup(arch);
- }
+ Pakfire pakfire = pakfire_calloc(1, sizeof(*pakfire));
+ if (pakfire) {
+ pakfire->nrefs = 1;
- return pakfire;
+ pakfire->path = pakfire_strdup(path);
+ pakfire->arch = pakfire_strdup(arch);
+
+ // Initialize the pool
+ pakfire->pool = pakfire_pool_create(pakfire);
+ }
+
+ return pakfire;
}
Pakfire pakfire_ref(Pakfire pakfire) {
- ++pakfire->nrefs;
+ ++pakfire->nrefs;
- return pakfire;
+ return pakfire;
}
void pakfire_unref(Pakfire pakfire) {
- if (--pakfire->nrefs > 0)
- return;
+ if (--pakfire->nrefs > 0)
+ return;
+
+ pakfire_pool_unref(pakfire->pool);
- pakfire_free(pakfire->path);
- pakfire_free(pakfire->arch);
- pakfire_free(pakfire);
+ pakfire_free(pakfire->path);
+ pakfire_free(pakfire->arch);
+ pakfire_free(pakfire);
}
const char* pakfire_get_path(Pakfire pakfire) {
- return pakfire->path;
+ return pakfire->path;
}
const char* pakfire_get_arch(Pakfire pakfire) {
- return pakfire->arch;
+ return pakfire->arch;
+}
+
+PakfirePool pakfire_get_pool(Pakfire pakfire) {
+ return pakfire_pool_ref(pakfire->pool);
}
#include <pakfire/cache.h>
#include <pakfire/package.h>
#include <pakfire/packagelist.h>
+#include <pakfire/pakfire.h>
#include <pakfire/pool.h>
#include <pakfire/repo.h>
#include <pakfire/types.h>
#include <pakfire/util.h>
-PakfirePool pakfire_pool_create(const char* arch) {
+PakfirePool pakfire_pool_create(Pakfire pakfire) {
PakfirePool pool = pakfire_calloc(1, sizeof(*pool));
+ if (pool) {
+ pool->nrefs = 1;
+ }
pool->pool = pool_create();
queue_init(&pool->installonly);
// Set architecture
+ const char* arch = pakfire_get_arch(pakfire);
pool_setarch(pool->pool, arch);
return pool;
}
}
-void pakfire_pool_free(PakfirePool pool) {
+static void pakfire_pool_free(PakfirePool pool) {
pakfire_pool_free_repos(pool->pool);
queue_free(&pool->installonly);
pakfire_free(pool);
}
+PakfirePool pakfire_pool_ref(PakfirePool pool) {
+ ++pool->nrefs;
+
+ return pool;
+}
+
+void pakfire_pool_unref(PakfirePool pool) {
+ if (--pool->nrefs > 0)
+ return;
+
+ pakfire_pool_free(pool);
+}
+
int pakfire_pool_version_compare(PakfirePool pool, const char* evr1, const char* evr2) {
return pool_evrcmp_str(pool->pool, evr1, evr2, EVRCMP_COMPARE);
}
# Initialize the keyring
#self.keyring = keyring.Keyring(self)
- self.pool = _pakfire.Pool(self.arch)
+ self.pool = _pakfire.Pool(self)
self.pool.cache_path = cache_path or \
os.path.join(CACHE_DIR, self.distro.sname, self.distro.release)