X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fpool.h;h=aa173ea171cc0e67ca0f7563ee806a32356aeb78;hb=6a68988035ea989055076d81b7ab53c7015c8c32;hp=1da09bcb5d4fc0d30efb2a301fb672282d056485;hpb=bcd77f2feffb8fc9d52b669d674b4d556d0c7e7d;p=platform%2Fupstream%2Flibsolv.git diff --git a/src/pool.h b/src/pool.h index 1da09bc..aa173ea 100644 --- a/src/pool.h +++ b/src/pool.h @@ -7,7 +7,7 @@ /* * pool.h - * + * */ #ifndef LIBSOLV_POOL_H @@ -34,43 +34,48 @@ extern "C" { #define SYSTEMSOLVABLE 1 -/* how many strings to maintain (round robin) */ -#define POOL_TMPSPACEBUF 16 - /*----------------------------------------------- */ -struct _Repo; -struct _Repodata; -struct _Repokey; -struct _KeyValue; +struct s_Repo; +struct s_Repodata; +struct s_Repokey; +struct s_KeyValue; -typedef struct _Datapos { - struct _Repo *repo; +typedef struct s_Datapos { + struct s_Repo *repo; Id solvid; Id repodataid; Id schema; - Id dp; + Id dp; } Datapos; -struct _Pool_tmpspace { + +#ifdef LIBSOLV_INTERNAL + +/* how many strings to maintain (round robin) */ +#define POOL_TMPSPACEBUF 16 + +struct s_Pool_tmpspace { char *buf[POOL_TMPSPACEBUF]; int len[POOL_TMPSPACEBUF]; int n; }; -struct _Pool { +#endif + +struct s_Pool { void *appdata; /* application private pointer */ - struct _Stringpool ss; + struct s_Stringpool ss; Reldep *rels; /* table of rels: Id -> Reldep */ int nrels; /* number of unique rels */ - struct _Repo **repos; + struct s_Repo **repos; int nrepos; /* repos allocated */ int urepos; /* repos in use */ - struct _Repo *installed; /* packages considered installed */ + struct s_Repo *installed; /* packages considered installed */ Solvable *solvables; int nsolvables; /* solvables allocated */ @@ -83,7 +88,7 @@ struct _Pool { Id *id2arch; /* map arch ids to scores */ unsigned char *id2color; /* map arch ids to colors */ - Id lastarch; /* last valid entry in id2arch/id2color */ + Id lastarch; /* size of the id2arch/id2color arrays */ Queue vendormap; /* map vendor to vendorclasses mask */ const char **vendorclasses; /* vendor equivalence classes */ @@ -104,16 +109,16 @@ struct _Pool { Map *considered; /* callback for REL_NAMESPACE dependencies handled by the application */ - Id (*nscallback)(struct _Pool *, void *data, Id name, Id evr); + Id (*nscallback)(struct s_Pool *, void *data, Id name, Id evr); void *nscallbackdata; /* debug mask and callback */ int debugmask; - void (*debugcallback)(struct _Pool *, void *data, int type, const char *str); + void (*debugcallback)(struct s_Pool *, void *data, int type, const char *str); void *debugcallbackdata; /* load callback */ - int (*loadcallback)(struct _Pool *, struct _Repodata *, void *); + int (*loadcallback)(struct s_Pool *, struct s_Repodata *, void *); void *loadcallbackdata; /* search position */ @@ -128,6 +133,7 @@ struct _Pool { 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 */ @@ -142,18 +148,25 @@ struct _Pool { int languagecacheother; /* our tmp space string space */ - struct _Pool_tmpspace tmpspace; + struct s_Pool_tmpspace tmpspace; char *errstr; /* last error string */ int errstra; /* allocated space for errstr */ char *rootdir; - int (*custom_vendorcheck)(struct _Pool *, Solvable *, Solvable *); + int (*custom_vendorcheck)(struct s_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; + + int whatprovideswithdisabled; #endif }; @@ -161,6 +174,7 @@ struct _Pool { #define DISTTYPE_DEB 1 #define DISTTYPE_ARCH 2 #define DISTTYPE_HAIKU 3 +#define DISTTYPE_CONDA 4 #define SOLV_FATAL (1<<0) #define SOLV_ERROR (1<<1) @@ -176,6 +190,7 @@ struct _Pool { #define SOLV_DEBUG_JOB (1<<11) #define SOLV_DEBUG_SOLVER (1<<12) #define SOLV_DEBUG_TRANSACTION (1<<13) +#define SOLV_DEBUG_WATCHES (1<<14) #define SOLV_DEBUG_TO_STDERR (1<<30) @@ -188,6 +203,9 @@ struct _Pool { #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 +#define POOL_FLAG_WHATPROVIDESWITHDISABLED 12 /* ----------------------------------------------- */ @@ -209,8 +227,15 @@ struct _Pool { #define REL_NAMESPACE 19 #define REL_ARCH 20 #define REL_FILECONFLICT 21 -#define REL_COND 22 +#define REL_COND 22 /* OR_NOT */ #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/REL_UNLESS */ +#define REL_ERROR 27 /* parse errors and the like */ +#define REL_WITHOUT 28 +#define REL_UNLESS 29 /* AND_NOT */ +#define REL_CONDA 30 #if !defined(__GNUC__) && !defined(__attribute__) # define __attribute__(x) @@ -221,21 +246,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_setdebugcallback(Pool *pool, void (*debugcallback)(struct s_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_setloadcallback(Pool *pool, int (*cb)(struct s_Pool *, struct s_Repodata *, void *), void *loadcbdata); +extern void pool_setnamespacecallback(Pool *pool, Id (*cb)(struct s_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 void pool_set_custom_vendorcheck(Pool *pool, int (*vendorcheck)(struct s_Pool *, Solvable *, Solvable *)); extern char *pool_alloctmpspace(Pool *pool, int len); @@ -244,7 +266,7 @@ extern char *pool_tmpjoin(Pool *pool, const char *str1, const char *str2, const extern char *pool_tmpappend(Pool *pool, const char *str1, const char *str2, const char *str3); extern const char *pool_bin2hex(Pool *pool, const unsigned char *buf, int len); -extern void pool_set_installed(Pool *pool, struct _Repo *repo); +extern void pool_set_installed(Pool *pool, struct s_Repo *repo); extern int pool_error(Pool *pool, int ret, const char *format, ...) __attribute__((format(printf, 3, 4))); extern char *pool_errstr(Pool *pool); @@ -265,6 +287,10 @@ static inline Solvable *pool_id2solvable(const Pool *pool, Id p) { return pool->solvables + p; } +static inline Id pool_solvable2id(const Pool *pool, Solvable *s) +{ + return s - pool->solvables; +} extern const char *pool_solvable2str(Pool *pool, Solvable *s); static inline const char *pool_solvid2str(Pool *pool, Id p) @@ -275,15 +301,11 @@ 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, 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_intersect_evrs(Pool *pool, int pflags, Id pevr, int flags, Id 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); -int pool_match_dep(Pool *pool, Id d1, Id d2); static inline int pool_match_nevr(Pool *pool, Solvable *s, Id d) { @@ -302,6 +324,7 @@ extern void pool_addfileprovides(Pool *pool); 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); @@ -328,27 +351,22 @@ 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); +void pool_whatcontainsdep(Pool *pool, Id keyname, Id dep, Queue *q, int marker); +void pool_whatmatchessolvable(Pool *pool, Id keyname, Id solvid, Queue *q, int marker); +void pool_set_whatprovides(Pool *pool, Id id, Id providers); + + /* search the pool. the following filters are available: * p - search just this solvable * key - search only this key * match - key must match this string */ -void pool_search(Pool *pool, Id p, Id key, const char *match, int flags, int (*callback)(void *cbdata, Solvable *s, struct _Repodata *data, struct _Repokey *key, struct _KeyValue *kv), void *cbdata); +void pool_search(Pool *pool, Id p, Id key, const char *match, int flags, int (*callback)(void *cbdata, Solvable *s, struct s_Repodata *data, struct s_Repokey *key, struct s_KeyValue *kv), void *cbdata); void pool_clear_pos(Pool *pool); - -typedef struct _DUChanges { - const char *path; - int kbytes; - int files; -} 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_multiversionmap(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res, Map *multiversionmap); - +/* lookup functions */ const char *pool_lookup_str(Pool *pool, Id entry, Id keyname); Id pool_lookup_id(Pool *pool, Id entry, Id keyname); unsigned long long pool_lookup_num(Pool *pool, Id entry, Id keyname, unsigned long long notfound); @@ -358,6 +376,21 @@ 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); + +#define DUCHANGES_ONLYADD 1 + +typedef struct s_DUChanges { + const char *path; + long long kbytes; + long long files; + int flags; +} DUChanges; + + +void pool_create_state_maps(Pool *pool, Queue *installed, Map *installedmap, Map *conflictsmap); +void pool_calc_duchanges(Pool *pool, Map *installedmap, DUChanges *mps, int nmps); +long long pool_calc_installsizechange(Pool *pool, Map *installedmap); + void pool_add_fileconflicts_deps(Pool *pool, Queue *conflicts); @@ -379,14 +412,13 @@ void pool_add_fileconflicts_deps(Pool *pool, Queue *conflicts); continue; \ else -#ifdef ENABLE_COMPS -#define ISCONDDEP(id) (ISRELDEP(id) && (GETRELDEP(pool, id))->flags == REL_COND) -#define MODIFYCONDDEP(id, tst) do { Reldep *condrd = GETRELDEP(pool, id); Id condp, condpp; FOR_PROVIDES(condrd->evr, condp, condpp) if (tst) break; id = condp ? condrd->name : 0;} while(0) -#endif - #define POOL_DEBUG(type, ...) do {if ((pool->debugmask & (type)) != 0) pool_debug(pool, (type), __VA_ARGS__);} while (0) #define IF_POOLDEBUG(type) if ((pool->debugmask & (type)) != 0) +/* weird suse stuff */ +void pool_trivial_installable_multiversionmap(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res, Map *multiversionmap); +void pool_trivial_installable(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res); + #ifdef __cplusplus } #endif