4 /** \ingroup rpmts rpmte
6 * Structures used for an "rpmte" transaction element.
10 * Transaction element ordering chain linkage.
12 typedef /*@abstract@*/ struct tsortInfo_s * tsortInfo;
15 * Transaction element iterator.
17 typedef /*@abstract@*/ struct rpmtei_s * rpmtei;
20 * Transaction element type.
22 typedef enum rpmElementType_e {
23 TR_ADDED = (1 << 0), /*!< Package will be installed. */
24 TR_REMOVED = (1 << 1) /*!< Package will be removed. */
32 #if defined(_RPMTE_INTERNAL)
34 * Dependncy ordering information.
36 /*@-fielduse@*/ /* LCL: confused by union? */
40 /*@exposed@*/ /*@dependent@*/ /*@null@*/
43 #define tsi_count tsi_u.count
44 #define tsi_suc tsi_u.suc
45 /*@owned@*/ /*@null@*/
46 struct tsortInfo_s * tsi_next;
47 /*@exposed@*/ /*@dependent@*/ /*@null@*/
55 * A single package instance to be installed/removed atomically.
58 rpmElementType type; /*!< Package disposition (installed/removed). */
60 /*@refcounted@*/ /*@null@*/
61 Header h; /*!< Package header. */
63 const char * NEVR; /*!< Package name-version-release. */
65 const char * name; /*!< Name: */
68 /*@dependent@*/ /*@null@*/
69 char * version; /*!< Version: */
70 /*@dependent@*/ /*@null@*/
71 char * release; /*!< Release: */
73 const char * arch; /*!< Architecture hint. */
75 const char * os; /*!< Operating system hint. */
77 rpmte parent; /*!< Parent transaction element. */
78 int degree; /*!< No. of immediate children. */
79 int depth; /*!< Max. depth in dependency tree. */
80 int npreds; /*!< No. of predecessors. */
81 int tree; /*!< Tree index. */
83 tsortInfo tsi; /*!< Dependency ordering chains. */
85 /*@refcounted@*/ /*@null@*/
86 rpmds this; /*!< This package's provided NEVR. */
87 /*@refcounted@*/ /*@null@*/
88 rpmds provides; /*!< Provides: dependencies. */
89 /*@refcounted@*/ /*@null@*/
90 rpmds requires; /*!< Requires: dependencies. */
91 /*@refcounted@*/ /*@null@*/
92 rpmds conflicts; /*!< Conflicts: dependencies. */
93 /*@refcounted@*/ /*@null@*/
94 rpmds obsoletes; /*!< Obsoletes: dependencies. */
95 /*@refcounted@*/ /*@null@*/
96 rpmfi fi; /*!< File information. */
98 uint_32 multiLib; /*!< (TR_ADDED) MULTILIB */
100 /*@exposed@*/ /*@dependent@*/ /*@null@*/
101 fnpyKey key; /*!< (TR_ADDED) Retrieval key. */
102 /*@owned@*/ /*@null@*/
103 rpmRelocation * relocs; /*!< (TR_ADDED) Payload file relocations. */
104 /*@refcounted@*/ /*@null@*/
105 FD_t fd; /*!< (TR_ADDED) Payload file descriptor. */
107 /*@-fielduse@*/ /* LCL: confused by union? */
109 /*@exposed@*/ /*@dependent@*/ /*@null@*/
112 /*@exposed@*/ /*@dependent@*/ /*@null@*/
122 * Iterator across transaction elements, forward on install, backward on erase.
126 rpmts ts; /*!< transaction set. */
127 int reverse; /*!< reversed traversal? */
128 int ocsave; /*!< last returned iterator index. */
129 int oc; /*!< iterator index. */
132 #endif /* _RPMTE_INTERNAL */
139 * Destroy a transaction element.
140 * @param te transaction element
141 * @return NULL always
144 rpmte rpmteFree(/*@only@*/ /*@null@*/ rpmte te)
148 * Create a transaction element.
149 * @param ts transaction set
151 * @param type TR_ADDED/TR_REMOVED
152 * @param key (TR_ADDED) package retrieval key (e.g. file name)
153 * @param relocs (TR_ADDED) package file relocations
154 * @param dboffset (TR_REMOVED) rpmdb instance
155 * @param pkgKey associated added package (if any)
156 * @return new transaction element
158 /*@only@*/ /*@null@*/
159 rpmte rpmteNew(const rpmts ts, Header h, rpmElementType type,
160 /*@exposed@*/ /*@dependent@*/ /*@null@*/ fnpyKey key,
161 /*@null@*/ rpmRelocation * relocs,
163 /*@exposed@*/ /*@dependent@*/ /*@null@*/ alKey pkgKey)
164 /*@modifies ts, h @*/;
167 * Retrieve type of transaction element.
168 * @param te transaction element
171 rpmElementType rpmteType(rpmte te)
175 * Retrieve name string of transaction element.
176 * @param te transaction element
177 * @return name string
180 const char * rpmteN(rpmte te)
184 * Retrieve epoch string of transaction element.
185 * @param te transaction element
186 * @return epoch string
188 /*@observer@*/ /*@null@*/
189 const char * rpmteE(rpmte te)
193 * Retrieve version string of transaction element.
194 * @param te transaction element
195 * @return version string
197 /*@observer@*/ /*@null@*/
198 const char * rpmteV(rpmte te)
202 * Retrieve release string of transaction element.
203 * @param te transaction element
204 * @return release string
206 /*@observer@*/ /*@null@*/
207 const char * rpmteR(rpmte te)
211 * Retrieve arch string of transaction element.
212 * @param te transaction element
213 * @return arch string
215 /*@observer@*/ /*@null@*/
216 const char * rpmteA(rpmte te)
220 * Retrieve os string of transaction element.
221 * @param te transaction element
224 /*@observer@*/ /*@null@*/
225 const char * rpmteO(rpmte te)
229 * Retrieve multlib flags of transaction element.
230 * @param te transaction element
231 * @return multilib flags
233 int rpmteMultiLib(rpmte te)
237 * Set multlib flags of transaction element.
238 * @param te transaction element
239 * @param nmultiLib new multilib flags
240 * @return previous multilib flags
242 int rpmteSetMultiLib(rpmte te, int nmultiLib)
246 * Retrieve tsort tree depth of transaction element.
247 * @param te transaction element
250 int rpmteDepth(rpmte te)
254 * Set tsort tree depth of transaction element.
255 * @param te transaction element
256 * @param ndepth new depth
257 * @return previous depth
259 int rpmteSetDepth(rpmte te, int ndepth)
263 * Retrieve tsort no. of predecessors of transaction element.
264 * @param te transaction element
265 * @return no. of predecessors
267 int rpmteNpreds(rpmte te)
271 * Set tsort no. of predecessors of transaction element.
272 * @param te transaction element
273 * @param npreds new no. of predecessors
274 * @return previous no. of predecessors
276 int rpmteSetNpreds(rpmte te, int npreds)
280 * Retrieve tree index of transaction element.
281 * @param te transaction element
284 int rpmteTree(rpmte te)
288 * Set tree index of transaction element.
289 * @param te transaction element
290 * @param ntree new tree index
291 * @return previous tree index
293 int rpmteSetTree(rpmte te, int ntree)
297 * Retrieve parent transaction element.
298 * @param te transaction element
299 * @return parent transaction element
301 /*@observer@*/ /*@unused@*/
302 rpmte rpmteParent(rpmte te)
306 * Set parent transaction element.
307 * @param te transaction element
308 * @param pte new parent transaction element
309 * @return previous parent transaction element
311 rpmte rpmteSetParent(rpmte te, rpmte pte)
315 * Retrieve number of children of transaction element.
316 * @param te transaction element
319 int rpmteDegree(rpmte te)
323 * Set number of children of transaction element.
324 * @param te transaction element
325 * @param ndegree new number of children
326 * @return previous number of children
328 int rpmteSetDegree(rpmte te, int ndegree)
332 * Retrieve tsort info for transaction element.
333 * @param te transaction element
336 tsortInfo rpmteTSI(rpmte te)
340 * Destroy tsort info of transaction element.
341 * @param te transaction element
343 void rpmteFreeTSI(rpmte te)
347 * Initialize tsort info of transaction element.
348 * @param te transaction element
350 void rpmteNewTSI(rpmte te)
354 * Destroy dependency set info of transaction element.
355 * @param te transaction element
358 void rpmteCleanDS(rpmte te)
362 * Retrieve pkgKey of TR_ADDED transaction element.
363 * @param te transaction element
366 /*@exposed@*/ /*@dependent@*/ /*@null@*/
367 alKey rpmteAddedKey(rpmte te)
371 * Set pkgKey of TR_ADDED transaction element.
372 * @param te transaction element
373 * @param npkgKey new pkgKey
374 * @return previous pkgKey
376 /*@exposed@*/ /*@dependent@*/ /*@null@*/
377 alKey rpmteSetAddedKey(rpmte te,
378 /*@exposed@*/ /*@dependent@*/ /*@null@*/ alKey npkgKey)
382 * Retrieve dependent pkgKey of TR_REMOVED transaction element.
383 * @param te transaction element
384 * @return dependent pkgKey
386 /*@exposed@*/ /*@dependent@*/ /*@null@*/
387 alKey rpmteDependsOnKey(rpmte te)
391 * Retrieve rpmdb instance of TR_REMOVED transaction element.
392 * @param te transaction element
393 * @return rpmdb instance
395 int rpmteDBOffset(rpmte te)
399 * Retrieve name-version-release string from transaction element.
400 * @param te transaction element
401 * @return name-version-release string
404 const char * rpmteNEVR(rpmte te)
408 * Retrieve file handle from transaction element.
409 * @param te transaction element
410 * @return file handle
412 FD_t rpmteFd(rpmte te)
416 * Retrieve key from transaction element.
417 * @param te transaction element
421 fnpyKey rpmteKey(rpmte te)
425 * Retrieve dependency tag set from transaction element.
426 * @param te transaction element
427 * @param tag dependency tag
428 * @return dependency tag set
430 rpmds rpmteDS(rpmte te, rpmTag tag)
434 * Retrieve file info tag set from transaction element.
435 * @param te transaction element
436 * @param tag file info tag
437 * @return file info tag set
439 rpmfi rpmteFI(rpmte te, rpmTag tag)
443 * Return transaction element index.
444 * @param tei transaction element iterator
445 * @return transaction element index
447 int rpmteiGetOc(rpmtei tei)
451 * Destroy transaction element iterator.
452 * @param tei transaction element iterator
453 * @return NULL always
455 /*@unused@*/ /*@null@*/
456 rpmtei rpmteiFree(/*@only@*//*@null@*/ rpmtei tei)
460 * Destroy transaction element iterator.
461 * @param tei transaction element iterator
464 * @return NULL always
467 rpmtei XrpmteiFree(/*@only@*//*@null@*/ rpmtei tei,
468 const char * fn, unsigned int ln)
470 #define rpmteiFree(_tei) XrpmteiFree(_tei, __FILE__, __LINE__)
473 * Create transaction element iterator.
474 * @param ts transaction set
475 * @return transaction element iterator
477 /*@unused@*/ /*@only@*/
478 rpmtei rpmteiInit(rpmts ts)
482 * Create transaction element iterator.
483 * @param ts transaction set
486 * @return transaction element iterator
488 /*@unused@*/ /*@only@*/
489 rpmtei XrpmteiInit(rpmts ts,
490 const char * fn, unsigned int ln)
492 #define rpmteiInit(_ts) XrpmteiInit(_ts, __FILE__, __LINE__)
495 * Return next transaction element of type.
496 * @param tei transaction element iterator
497 * @param type transaction element type selector (0 for any)
498 * @return next transaction element of type, NULL on termination
500 /*@dependent@*/ /*@null@*/
501 rpmte rpmteiNext(rpmtei tei, rpmElementType type)