X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fpool.h;h=4a2089d8b89f30085c25249fbaffdb53d3bddf00;hb=2b7fc13cedc8bb796ac2b7e88f664d1602cf701f;hp=4191f533b4185154417c9f88c3397856328ae0ca;hpb=9719138694aecbc578cc2bb3c8ea02ce1bc8fea5;p=platform%2Fupstream%2Flibsolv.git diff --git a/src/pool.h b/src/pool.h index 4191f53..4a2089d 100644 --- a/src/pool.h +++ b/src/pool.h @@ -7,16 +7,12 @@ /* * pool.h - * + * */ #ifndef LIBSOLV_POOL_H #define LIBSOLV_POOL_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include "solvversion.h" @@ -30,6 +26,10 @@ extern "C" { /* well known ids */ #include "knownid.h" +#ifdef __cplusplus +extern "C" { +#endif + /* well known solvable */ #define SYSTEMSOLVABLE 1 @@ -49,7 +49,7 @@ typedef struct _Datapos { Id solvid; Id repodataid; Id schema; - Id dp; + Id dp; } Datapos; struct _Pool_tmpspace { @@ -119,30 +119,55 @@ struct _Pool { /* search position */ Datapos pos; + Queue pooljobs; /* fixed jobs, like USERINSTALLED/MULTIVERSION */ + #ifdef LIBSOLV_INTERNAL /* flags to tell the library how the installed package manager works */ int promoteepoch; /* true: missing epoch is replaced by epoch of dependency */ + int havedistepoch; /* true: thr release part in the evr may contain a distepoch suffix */ int obsoleteusesprovides; /* true: obsoletes are matched against provides, not names */ int implicitobsoleteusesprovides; /* true: implicit obsoletes due to same name are matched against provides, not names */ int obsoleteusescolors; /* true: obsoletes check arch color */ + int implicitobsoleteusescolors; /* true: implicit obsoletes check arch color */ int noinstalledobsoletes; /* true: ignore obsoletes of installed packages */ int forbidselfconflicts; /* true: packages which conflict with itself are not installable */ + int noobsoletesmultiversion; /* true: obsoletes are ignored for multiversion installs */ + + Id noarchid; /* ARCH_NOARCH, ARCH_ALL, ARCH_ANY, ... */ /* hash for rel unification */ Hashtable relhashtbl; /* hashtable: (name,evr,op)Hash -> Id */ - Hashmask relhashmask; + Hashval relhashmask; Id *languagecache; int languagecacheother; /* our tmp space string space */ struct _Pool_tmpspace tmpspace; -#endif + char *errstr; /* last error string */ + int errstra; /* allocated space for errstr */ + + char *rootdir; + + int (*custom_vendorcheck)(struct _Pool *, Solvable *, Solvable *); + + int addfileprovidesfiltered; /* 1: only use filtered file list for addfileprovides */ + int addedfileprovides; /* true: application called addfileprovides */ + Queue lazywhatprovidesq; /* queue to store old whatprovides offsets */ + int nowhatprovidesaux; /* don't allocate and use the whatprovides aux helper */ + Offset *whatprovidesaux; + Offset whatprovidesauxoff; + Id *whatprovidesauxdata; + Offset whatprovidesauxdataoff; + +#endif }; #define DISTTYPE_RPM 0 #define DISTTYPE_DEB 1 +#define DISTTYPE_ARCH 2 +#define DISTTYPE_HAIKU 3 #define SOLV_FATAL (1<<0) #define SOLV_ERROR (1<<1) @@ -167,6 +192,11 @@ struct _Pool { #define POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES 4 #define POOL_FLAG_OBSOLETEUSESCOLORS 5 #define POOL_FLAG_NOINSTALLEDOBSOLETES 6 +#define POOL_FLAG_HAVEDISTEPOCH 7 +#define POOL_FLAG_NOOBSOLETESMULTIVERSION 8 +#define POOL_FLAG_ADDFILEPROVIDESFILTERED 9 +#define POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS 10 +#define POOL_FLAG_NOWHATPROVIDESAUX 11 /* ----------------------------------------------- */ @@ -189,6 +219,10 @@ struct _Pool { #define REL_ARCH 20 #define REL_FILECONFLICT 21 #define REL_COND 22 +#define REL_COMPAT 23 +#define REL_KIND 24 /* for filters only */ +#define REL_MULTIARCH 25 /* debian multiarch annotation */ +#define REL_ELSE 26 /* only as evr part of REL_COND */ #if !defined(__GNUC__) && !defined(__attribute__) # define __attribute__(x) @@ -199,17 +233,18 @@ extern void pool_free(Pool *pool); extern void pool_freeallrepos(Pool *pool, int reuseids); extern void pool_setdebuglevel(Pool *pool, int level); -#ifdef MULTI_SEMANTICS -extern void pool_setdisttype(Pool *pool, int disttype); -#endif +extern int pool_setdisttype(Pool *pool, int disttype); extern int pool_set_flag(Pool *pool, int flag, int value); extern int pool_get_flag(Pool *pool, int flag); -extern void pool_setvendorclasses(Pool *pool, const char **vendorclasses); extern void pool_debug(Pool *pool, int type, const char *format, ...) __attribute__((format(printf, 3, 4))); extern void pool_setdebugcallback(Pool *pool, void (*debugcallback)(struct _Pool *, void *data, int type, const char *str), void *debugcallbackdata); extern void pool_setdebugmask(Pool *pool, int mask); extern void pool_setloadcallback(Pool *pool, int (*cb)(struct _Pool *, struct _Repodata *, void *), void *loadcbdata); +extern void pool_setnamespacecallback(Pool *pool, Id (*cb)(struct _Pool *, void *, Id, Id), void *nscbdata); +extern void pool_flush_namespaceproviders(Pool *pool, Id ns, Id evr); + +extern void pool_set_custom_vendorcheck(Pool *pool, int (*vendorcheck)(struct _Pool *, Solvable *, Solvable *)); extern char *pool_alloctmpspace(Pool *pool, int len); @@ -220,6 +255,14 @@ extern const char *pool_bin2hex(Pool *pool, const unsigned char *buf, int len); extern void pool_set_installed(Pool *pool, struct _Repo *repo); +extern int pool_error(Pool *pool, int ret, const char *format, ...) __attribute__((format(printf, 3, 4))); +extern char *pool_errstr(Pool *pool); + +extern void pool_set_rootdir(Pool *pool, const char *rootdir); +extern const char *pool_get_rootdir(Pool *pool); +extern char *pool_prepend_rootdir(Pool *pool, const char *dir); +extern const char *pool_prepend_rootdir_tmp(Pool *pool, const char *dir); + /** * Solvable management */ @@ -241,15 +284,19 @@ static inline const char *pool_solvid2str(Pool *pool, Id p) void pool_set_languages(Pool *pool, const char **languages, int nlanguages); Id pool_id2langid(Pool *pool, Id id, const char *lang, int create); -int solvable_trivial_installable_map(Solvable *s, Map *installedmap, Map *conflictsmap); -int solvable_trivial_installable_repo(Solvable *s, struct _Repo *installed); -int solvable_trivial_installable_queue(Solvable *s, Queue *installed); +int solvable_trivial_installable_map(Solvable *s, Map *installedmap, Map *conflictsmap, Map *multiversionmap); +int solvable_trivial_installable_repo(Solvable *s, struct _Repo *installed, Map *multiversionmap); +int solvable_trivial_installable_queue(Solvable *s, Queue *installed, Map *multiversionmap); +int solvable_is_irrelevant_patch(Solvable *s, Map *installedmap); void pool_create_state_maps(Pool *pool, Queue *installed, Map *installedmap, Map *conflictsmap); -int pool_match_nevr_rel(Pool *pool, Solvable *s, Id d); +int pool_intersect_evrs(Pool *pool, int pflags, Id pevr, int flags, int evr); int pool_match_dep(Pool *pool, Id d1, Id d2); +/* semi private, used in pool_match_nevr */ +int pool_match_nevr_rel(Pool *pool, Solvable *s, Id d); + static inline int pool_match_nevr(Pool *pool, Solvable *s, Id d) { if (!ISRELDEP(d)) @@ -264,20 +311,27 @@ static inline int pool_match_nevr(Pool *pool, Solvable *s, Id d) */ extern void pool_createwhatprovides(Pool *pool); extern void pool_addfileprovides(Pool *pool); -extern void pool_addfileprovides_queue(Pool *pool, Queue *idq); +extern void pool_addfileprovides_queue(Pool *pool, Queue *idq, Queue *idqinst); extern void pool_freewhatprovides(Pool *pool); extern Id pool_queuetowhatprovides(Pool *pool, Queue *q); +extern Id pool_ids2whatprovides(Pool *pool, Id *ids, int count); +extern Id pool_searchlazywhatprovidesq(Pool *pool, Id d); extern Id pool_addrelproviders(Pool *pool, Id d); static inline Id pool_whatprovides(Pool *pool, Id d) { - Id v; if (!ISRELDEP(d)) - return pool->whatprovides[d]; - v = GETRELID(d); - if (pool->whatprovides_rel[v]) - return pool->whatprovides_rel[v]; + { + if (pool->whatprovides[d]) + return pool->whatprovides[d]; + } + else + { + Id v = GETRELID(d); + if (pool->whatprovides_rel[v]) + return pool->whatprovides_rel[v]; + } return pool_addrelproviders(pool, d); } @@ -287,6 +341,8 @@ static inline Id *pool_whatprovides_ptr(Pool *pool, Id d) return pool->whatprovidesdata + off; } +void pool_whatmatchesdep(Pool *pool, Id keyname, Id dep, Queue *q, int marker); + /* search the pool. the following filters are available: * p - search just this solvable * key - search only this key @@ -297,23 +353,28 @@ void pool_search(Pool *pool, Id p, Id key, const char *match, int flags, int (*c void pool_clear_pos(Pool *pool); +#define DUCHANGES_ONLYADD 1 + typedef struct _DUChanges { const char *path; int kbytes; int files; + int flags; } DUChanges; void pool_calc_duchanges(Pool *pool, Map *installedmap, DUChanges *mps, int nmps); int pool_calc_installsizechange(Pool *pool, Map *installedmap); void pool_trivial_installable(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res); -void pool_trivial_installable_noobsoletesmap(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res, Map *noobsoletesmap); +void pool_trivial_installable_multiversionmap(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res, Map *multiversionmap); const char *pool_lookup_str(Pool *pool, Id entry, Id keyname); Id pool_lookup_id(Pool *pool, Id entry, Id keyname); -unsigned int pool_lookup_num(Pool *pool, Id entry, Id keyname, unsigned int notfound); +unsigned long long pool_lookup_num(Pool *pool, Id entry, Id keyname, unsigned long long notfound); int pool_lookup_void(Pool *pool, Id entry, Id keyname); const unsigned char *pool_lookup_bin_checksum(Pool *pool, Id entry, Id keyname, Id *typep); +int pool_lookup_idarray(Pool *pool, Id entry, Id keyname, Queue *q); const char *pool_lookup_checksum(Pool *pool, Id entry, Id keyname, Id *typep); +const char *pool_lookup_deltalocation(Pool *pool, Id entry, unsigned int *medianrp); void pool_add_fileconflicts_deps(Pool *pool, Queue *conflicts); @@ -325,9 +386,16 @@ void pool_add_fileconflicts_deps(Pool *pool, Queue *conflicts); /* loop over all repositories */ #define FOR_REPOS(repoid, r) \ - for (repoid = 1; repoid < pool->nrepos; repoid++) \ - if ((r = pool->repos[repoid]) != 0) - + for (repoid = 1; repoid < pool->nrepos; repoid++) \ + if ((r = pool->repos[repoid]) == 0) \ + continue; \ + else + +#define FOR_POOL_SOLVABLES(p) \ + for (p = 2; p < pool->nsolvables; p++) \ + if (pool->solvables[p].repo == 0) \ + continue; \ + else #ifdef ENABLE_COMPS #define ISCONDDEP(id) (ISRELDEP(id) && (GETRELDEP(pool, id))->flags == REL_COND)