PakfireFile filelist;
};
-static inline PakfirePool pakfire_package_pool(PakfirePackage pkg) {
- return pkg->pool;
-}
-
-static inline Pool* pakfire_package_solv_pool(PakfirePackage pkg) {
- return pakfire_package_pool(pkg)->pool;
-}
-
#endif
#endif /* PAKFIRE_PACKAGE_H */
#ifndef PAKFIRE_POOL_H
#define PAKFIRE_POOL_H
-#include <solv/pool.h>
-
#include <pakfire/types.h>
PakfirePool pakfire_pool_create(Pakfire pakfire);
#ifdef PAKFIRE_PRIVATE
-struct _PakfirePool {
- Pool* pool;
- int provides_ready;
- Queue installonly;
-
- PakfireCache cache;
- int nrefs;
-};
+#include <solv/pool.h>
-void pakfire_pool_make_provides_ready(PakfirePool pool);
+Pool* pakfire_pool_get_solv_pool(PakfirePool pool);
char* pakfire_pool_tmpdup(Pool* pool, const char* s);
+void pakfire_pool_has_changed(PakfirePool pool);
+void pakfire_pool_apply_changes(PakfirePool pool);
+
+Queue* pakfire_pool_get_installonly_queue(PakfirePool pool);
+
#endif
#endif /* PAKFIRE_POOL_H */
Id id;
};
-static inline PakfirePool pakfire_relation_pool(PakfireRelation relation) {
- return relation->pool;
-}
-
static inline Pool* pakfire_relation_solv_pool(PakfireRelation relation) {
- return pakfire_relation_pool(relation)->pool;
+ return pakfire_pool_get_solv_pool(relation->pool);
}
#endif
PakfirePackage pakfire_repo_add_package(PakfireRepo repo);
static inline Pool* pakfire_repo_solv_pool(PakfireRepo repo) {
- return pakfire_repo_pool(repo)->pool;
+ return pakfire_pool_get_solv_pool(repo->pool);
}
static inline Repo* pakfire_repo_get_solv_repo(PakfireRepo repo) {
PakfireFilter f_arch;
};
-static inline PakfirePool pakfire_selector_pool(PakfireSelector selector) {
- return selector->pool;
-}
-
static inline Pool* pakfire_selector_solv_pool(PakfireSelector selector) {
- return pakfire_selector_pool(selector)->pool;
+ return pakfire_pool_get_solv_pool(selector->pool);
}
#endif
#include <pakfire/repocache.h>
#include <pakfire/util.h>
+static Pool* pakfire_package_get_solv_pool(PakfirePackage pkg) {
+ return pakfire_pool_get_solv_pool(pkg->pool);
+}
+
static void pakfire_package_add_self_provides(PakfirePool pool, PakfirePackage pkg, const char* name, const char* evr) {
#if 1
PakfireRelation relation = pakfire_relation_create(pool, name, PAKFIRE_EQ, evr);
}
static Solvable* get_solvable(PakfirePackage pkg) {
- PakfirePool pool = pakfire_package_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
- return pool_id2solvable(pool->pool, pkg->id);
+ return pool_id2solvable(pool, pkg->id);
}
static Repo* pakfire_package_solv_repo(PakfirePackage pkg) {
}
static Id pakfire_package_get_handle(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
return s - pool->solvables;
}
PAKFIRE_EXPORT int pakfire_package_cmp(PakfirePackage pkg1, PakfirePackage pkg2) {
- Pool* pool = pakfire_package_solv_pool(pkg1);
+ Pool* pool = pakfire_package_get_solv_pool(pkg1);
Solvable* s1 = get_solvable(pkg1);
Solvable* s2 = get_solvable(pkg2);
}
PAKFIRE_EXPORT int pakfire_package_evr_cmp(PakfirePackage pkg1, PakfirePackage pkg2) {
- Pool* pool = pakfire_package_solv_pool(pkg1);
+ Pool* pool = pakfire_package_get_solv_pool(pkg1);
Solvable* s1 = get_solvable(pkg1);
Solvable* s2 = get_solvable(pkg2);
}
PAKFIRE_EXPORT char* pakfire_package_get_nevra(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
const char* nevra = pool_solvable2str(pool, s);
}
PAKFIRE_EXPORT const char* pakfire_package_get_name(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
return pool_id2str(pool, s->name);
}
PAKFIRE_EXPORT void pakfire_package_set_name(PakfirePackage pkg, const char* name) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
s->name = pool_str2id(pool, name, 1);
}
PAKFIRE_EXPORT const char* pakfire_package_get_evr(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
return pool_id2str(pool, s->evr);
}
PAKFIRE_EXPORT void pakfire_package_set_evr(PakfirePackage pkg, const char* evr) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
s->evr = pool_str2id(pool, evr, 1);
}
PAKFIRE_EXPORT unsigned long pakfire_package_get_epoch(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
char *e, *v, *r, *endptr;
unsigned long epoch = 0;
}
PAKFIRE_EXPORT const char* pakfire_package_get_version(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
char *e, *v, *r;
split_evr(pool, pakfire_package_get_evr(pkg), &e, &v, &r);
}
PAKFIRE_EXPORT const char* pakfire_package_get_release(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
char *e, *v, *r;
split_evr(pool, pakfire_package_get_evr(pkg), &e, &v, &r);
}
PAKFIRE_EXPORT const char* pakfire_package_get_arch(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
return pool_id2str(pool, s->arch);
}
PAKFIRE_EXPORT void pakfire_package_set_arch(PakfirePackage pkg, const char* arch) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
s->arch = pool_str2id(pool, arch, 1);
}
PAKFIRE_EXPORT int pakfire_package_is_installed(PakfirePackage pkg) {
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Solvable* s = get_solvable(pkg);
return pool->installed == s->repo;
Solvable* s = get_solvable(pkg);
solvable_lookup_idarray(s, type, &q);
- PakfirePool pool = pakfire_package_pool(pkg);
- PakfireRelationList relationlist = pakfire_relationlist_from_queue(pool, q);
+ PakfireRelationList relationlist = pakfire_relationlist_from_queue(pkg->pool, q);
queue_free(&q);
PakfireFile file = NULL;
PakfireRepo repo = pakfire_package_get_repo(pkg);
Solvable* s = get_solvable(pkg);
- Pool* p = pakfire_package_solv_pool(pkg);
+ Pool* p = pakfire_package_get_solv_pool(pkg);
Repo* r = pakfire_repo_get_solv_repo(repo);
int found_marker = 0;
pakfire_package_internalize_repo(pkg);
PakfireFile file = NULL;
- Pool* pool = pakfire_package_solv_pool(pkg);
+ Pool* pool = pakfire_package_get_solv_pool(pkg);
Repo* repo = pakfire_package_solv_repo(pkg);
Id handle = pakfire_package_get_handle(pkg);
PAKFIRE_EXPORT PakfirePackageList pakfire_packagelist_from_queue(PakfirePool _pool, Queue* q) {
PakfirePackageList list = pakfire_packagelist_create();
- Pool* pool = _pool->pool;
+ 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]) {
#include <pakfire/types.h>
#include <pakfire/util.h>
+struct _PakfirePool {
+ Pool* pool;
+ int provides_ready;
+ Queue installonly;
+
+ PakfireCache cache;
+ int nrefs;
+};
+
PAKFIRE_EXPORT PakfirePool pakfire_pool_create(Pakfire pakfire) {
PakfirePool pool = pakfire_calloc(1, sizeof(*pool));
if (pool) {
pakfire_pool_free(pool);
}
+Pool* pakfire_pool_get_solv_pool(PakfirePool pool) {
+ return pool->pool;
+}
+
PAKFIRE_EXPORT int pakfire_pool_version_compare(PakfirePool pool, const char* evr1, const char* evr2) {
return pool_evrcmp_str(pool->pool, evr1, evr2, EVRCMP_COMPARE);
}
return cnt;
}
-PAKFIRE_EXPORT void pakfire_pool_make_provides_ready(PakfirePool pool) {
+void pakfire_pool_has_changed(PakfirePool pool) {
+ pool->provides_ready = 0;
+}
+
+void pakfire_pool_apply_changes(PakfirePool pool) {
if (!pool->provides_ready) {
pool_addfileprovides(pool->pool);
pool_createwhatprovides(pool->pool);
return installonly;
}
+Queue* pakfire_pool_get_installonly_queue(PakfirePool pool) {
+ return &pool->installonly;
+}
+
PAKFIRE_EXPORT void pakfire_pool_set_installonly(PakfirePool pool, const char** installonly) {
queue_empty(&pool->installonly);
static PakfirePackageList pakfire_pool_dataiterator(PakfirePool pool, const char* what, int key, int flags) {
PakfirePackageList list = pakfire_packagelist_create();
- pakfire_pool_make_provides_ready(pool);
+ pakfire_pool_apply_changes(pool);
int di_flags = 0;
if (flags & PAKFIRE_SUBSTRING)
static PakfirePackageList pakfire_pool_search_name(PakfirePool _pool, const char* name, int flags) {
if (!flags) {
PakfirePackageList list = pakfire_packagelist_create();
- pakfire_pool_make_provides_ready(_pool);
+ pakfire_pool_apply_changes(_pool);
Pool* pool = _pool->pool;
Id id = pool_str2id(pool, name, 0);
static PakfirePackageList pakfire_pool_search_provides(PakfirePool _pool, const char* provides, int flags) {
if (!flags) {
PakfirePackageList list = pakfire_packagelist_create();
- pakfire_pool_make_provides_ready(_pool);
+ pakfire_pool_apply_changes(_pool);
Pool* pool = _pool->pool;
Id id = pool_str2id(pool, provides, 0);
}
PAKFIRE_EXPORT PakfireRelation pakfire_relation_create(PakfirePool pool, const char* name, int cmp_type, const char* evr) {
- Pool* p = pool->pool;
+ Pool* p = pakfire_pool_get_solv_pool(pool);
Id id = pool_str2id(p, name, 1);
}
static PakfireRepo get_pakfire_repo_by_name(PakfirePool pool, const char* name) {
- Repo* repo = get_repo_by_name(pool->pool, name);
+ Pool* p = pakfire_pool_get_solv_pool(pool);
+
+ Repo* repo = get_repo_by_name(p, name);
if (repo)
return repo->appdata;
return repo;
}
- Repo* r = get_repo_by_name(pool->pool, name);
+ Pool* p = pakfire_pool_get_solv_pool(pool);
+
+ Repo* r = get_repo_by_name(p, name);
if (!r)
- r = repo_create(pool->pool, name);
+ r = repo_create(p, name);
return pakfire_repo_create_from_repo(pool, r);
}
repo->repo->disabled = !enabled;
PakfirePool pool = pakfire_repo_pool(repo);
- pool->provides_ready = 0;
+ pakfire_pool_has_changed(pool);
}
PAKFIRE_EXPORT int pakfire_repo_get_priority(PakfireRepo repo) {
return PAKFIRE_E_SOLV_CORRUPTED;
}
- repo->pool->provides_ready = 0;
+ pakfire_pool_has_changed(repo->pool);
return ret;
}
static void init_solver(PakfireRequest request, int flags) {
PakfirePool pool = pakfire_request_pool(request);
+ Pool* p = pakfire_pool_get_solv_pool(pool);
- Solver* solver = solver_create(pool->pool);
+ Solver* solver = solver_create(p);
/* Free older solver */
if (request->solver) {
request->transaction = NULL;
}
- pakfire_pool_make_provides_ready(request->pool);
+ pakfire_pool_apply_changes(request->pool);
if (solver_solve(request->solver, queue)) {
#ifdef DEBUG
}
/* turn off implicit obsoletes for installonly packages */
- PakfirePool pool = request->pool;
- for (int i = 0; i < pool->installonly.count; i++)
+ Queue* installonly = pakfire_pool_get_installonly_queue(request->pool);
+ for (int i = 0; i < installonly->count; i++)
queue_push2(&queue, SOLVER_MULTIVERSION|SOLVER_SOLVABLE_PROVIDES,
- pool->installonly.elements[i]);
+ installonly->elements[i]);
// XXX EXCLUDES
assert(f->cmp_type == PAKFIRE_EQ);
- Id archid = str2archid(pool->pool, f->match);
+ Pool* p = pakfire_pool_get_solv_pool(pool);
+ Id archid = str2archid(p, f->match);
if (archid == 0)
return PAKFIRE_E_ARCH;
assert((queue->elements[i] & SOLVER_SELECTMASK) == SOLVER_SOLVABLE_NAME);
Id dep = queue->elements[i + 1];
- queue->elements[i + 1] = pool_rel2id(pool->pool, dep, archid, REL_ARCH, 1);
+ queue->elements[i + 1] = pool_rel2id(p, dep, archid, REL_ARCH, 1);
queue->elements[i] |= SOLVER_SETARCH;
}
assert(f->cmp_type == PAKFIRE_EQ);
- Id evr = pool_str2id(pool->pool, f->match, 1);
+ Pool* p = pakfire_pool_get_solv_pool(pool);
+ Id evr = pool_str2id(p, f->match, 1);
for (int i = 0; i < queue->count; i += 2) {
assert((queue->elements[i] & SOLVER_SELECTMASK) == SOLVER_SOLVABLE_NAME);
Id dep = queue->elements[i + 1];
- queue->elements[i + 1] = pool_rel2id(pool->pool, dep, evr, REL_EQ, 1);
+ queue->elements[i + 1] = pool_rel2id(p, dep, evr, REL_EQ, 1);
queue->elements[i] |= PAKFIRE_PKG_VERSION ? SOLVER_SETEV : SOLVER_SETEVR;
}
if (f == NULL)
return 0;
+ Pool* p = pakfire_pool_get_solv_pool(pool);
const char* name = f->match;
Id id;
Dataiterator di;
switch (f->cmp_type) {
case PAKFIRE_EQ:
- id = pool_str2id(pool->pool, name, 0);
+ id = pool_str2id(p, name, 0);
if (id)
queue_push2(queue, SOLVER_SOLVABLE_NAME, id);
break;
case PAKFIRE_GLOB:
- dataiterator_init(&di, pool->pool, 0, 0, SOLVABLE_NAME, name, SEARCH_GLOB);
+ dataiterator_init(&di, p, 0, 0, SOLVABLE_NAME, name, SEARCH_GLOB);
while (dataiterator_step(&di)) {
assert(di.idp);
if (f == NULL)
return 0;
+ Pool* p = pakfire_pool_get_solv_pool(pool);
Id id;
switch (f->cmp_type) {
case PAKFIRE_EQ:
- id = pool_str2id(pool->pool, f->match, 0);
+ id = pool_str2id(p, f->match, 0);
if (id)
queue_push2(queue, SOLVER_SOLVABLE_PROVIDES, id);
break;
goto finish;
}
- pakfire_pool_make_provides_ready(pool);
+ pakfire_pool_apply_changes(pool);
ret = filter_name2queue(pool, selector->f_name, &queue_selector);
if (ret)