X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Frepo.h;h=bd9c58c74fbb8c4e6a68792cb6a8a09e8404c60d;hb=e679b515eddb3dd340fb25620de0160211f40fdc;hp=2d2d7fc8ace03b94e1b3035b1cb8d9222920150d;hpb=c36ef29531924b0a2ec37cdac57211dac32837b1;p=platform%2Fupstream%2Flibsolv.git diff --git a/src/repo.h b/src/repo.h index 2d2d7fc..bd9c58c 100644 --- a/src/repo.h +++ b/src/repo.h @@ -7,7 +7,7 @@ /* * repo.h - * + * */ #ifndef LIBSOLV_REPO_H @@ -15,11 +15,14 @@ #include "pooltypes.h" #include "pool.h" +#include "poolarch.h" #include "repodata.h" #include "dataiterator.h" #include "hash.h" - +#ifdef __cplusplus +extern "C" { +#endif typedef struct _Repo { const char *name; /* name pointer */ @@ -39,7 +42,7 @@ typedef struct _Repo { Id *idarraydata; /* array of metadata Ids, solvable dependencies are offsets into this array */ int idarraysize; - unsigned nrepodata; /* number of our stores.. */ + int nrepodata; /* number of our stores.. */ Id *rpmdbid; /* solvable side data: rpm database id */ @@ -48,7 +51,7 @@ typedef struct _Repo { Offset lastoff; /* start of last array in idarraydata */ Hashtable lastidhash; /* hash to speed up repo_addid_dep */ - Hashmask lastidhash_mask; + Hashval lastidhash_mask; int lastidhash_idarraysize; int lastmarker; Offset lastmarkerpos; @@ -65,12 +68,11 @@ extern void repo_free_solvable(Repo *repo, Id p, int reuseids); extern void repo_free_solvable_block(Repo *repo, Id start, int count, int reuseids); extern void *repo_sidedata_create(Repo *repo, size_t size); extern void *repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count); +extern Id repo_add_solvable_block_before(Repo *repo, int count, Repo *beforerepo); extern Offset repo_addid(Repo *repo, Offset olddeps, Id id); extern Offset repo_addid_dep(Repo *repo, Offset olddeps, Id id, Id marker); extern Offset repo_reserve_ids(Repo *repo, Offset olddeps, int num); -extern Offset repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset freshens); -extern Offset repo_fix_conflicts(Repo *repo, Offset conflicts); static inline const char *repo_name(const Repo *repo) { @@ -84,16 +86,38 @@ static inline Repo *pool_id2repo(Pool *pool, Id repoid) return repoid < pool->nrepos ? pool->repos[repoid] : 0; } +static inline int pool_disabled_solvable(const Pool *pool, Solvable *s) +{ + if (s->repo && s->repo->disabled) + return 1; + if (pool->considered) + { + Id id = s - pool->solvables; + if (!MAPTST(pool->considered, id)) + return 1; + } + return 0; +} + +static inline int pool_badarch_solvable(const Pool *pool, Solvable *s) +{ + if (!s->arch) + return 1; + if (pool->id2arch && pool_arch2score(pool, s->arch) == 0) + return 1; + return 0; +} + static inline int pool_installable(const Pool *pool, Solvable *s) { if (!s->arch || s->arch == ARCH_SRC || s->arch == ARCH_NOSRC) return 0; if (s->repo && s->repo->disabled) return 0; - if (pool->id2arch && (s->arch > pool->lastarch || !pool->id2arch[s->arch])) + if (pool->id2arch && pool_arch2score(pool, s->arch) == 0) return 0; if (pool->considered) - { + { Id id = s - pool->solvables; if (!MAPTST(pool->considered, id)) return 0; @@ -113,6 +137,8 @@ static inline int pool_installable(const Pool *pool, Solvable *s) #define REPO_LOCALPOOL (1 << 2) #define REPO_USE_LOADING (1 << 3) #define REPO_EXTEND_SOLVABLES (1 << 4) +#define REPO_USE_ROOTDIR (1 << 5) +#define REPO_NO_LOCATION (1 << 6) Repodata *repo_add_repodata(Repo *repo, int flags); Repodata *repo_id2repodata(Repo *repo, Id id); @@ -131,6 +157,8 @@ int repo_lookup_deparray(Repo *repo, Id entry, Id keyname, Queue *q, Id marker); int repo_lookup_void(Repo *repo, Id entry, Id keyname); const char *repo_lookup_checksum(Repo *repo, Id entry, Id keyname, Id *typep); const unsigned char *repo_lookup_bin_checksum(Repo *repo, Id entry, Id keyname, Id *typep); +const void *repo_lookup_binary(Repo *repo, Id entry, Id keyname, int *lenp); +Id solv_depmarker(Id keyname, Id marker); void repo_set_id(Repo *repo, Id p, Id keyname, Id id); void repo_set_num(Repo *repo, Id p, Id keyname, unsigned long long num); @@ -141,14 +169,17 @@ void repo_add_idarray(Repo *repo, Id p, Id keyname, Id id); void repo_add_deparray(Repo *repo, Id p, Id keyname, Id dep, Id marker); void repo_set_idarray(Repo *repo, Id p, Id keyname, Queue *q); void repo_set_deparray(Repo *repo, Id p, Id keyname, Queue *q, Id marker); - +void repo_unset(Repo *repo, Id p, Id keyname); + void repo_internalize(Repo *repo); void repo_disable_paging(Repo *repo); /* iterator macros */ #define FOR_REPO_SOLVABLES(r, p, s) \ for (p = (r)->start, s = (r)->pool->solvables + p; p < (r)->end; p++, s = (r)->pool->solvables + p) \ - if (s->repo == (r)) + if (s->repo != (r)) \ + continue; \ + else #ifdef LIBSOLV_INTERNAL #define FOR_REPODATAS(repo, rdid, data) \ @@ -158,4 +189,13 @@ void repo_disable_paging(Repo *repo); for (rdid = 1; rdid < repo->nrepodata && (data = repo_id2repodata(repo, rdid)); rdid++) #endif +/* weird suse stuff, do not use */ +extern Offset repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset freshens); +extern Offset repo_fix_conflicts(Repo *repo, Offset conflicts); +extern void repo_rewrite_suse_deps(Solvable *s, Offset freshens); + +#ifdef __cplusplus +} +#endif + #endif /* LIBSOLV_REPO_H */