1 #ifndef H_RPMTS 2 #define H_RPMTS 3 4 /** \ingroup rpmts 5 * \file lib/rpmts.h 6 * Structures and prototypes used for an "rpmts" transaction set. 7 */ 8 9 #include <sys/types.h> 10 11 #include <rpm/rpmtypes.h> 12 #include <rpm/rpmte.h> 13 #include <rpm/rpmps.h> 14 #include <rpm/rpmsw.h> 15 #include <rpm/rpmpgp.h> 16 #include <rpm/rpmfi.h> 17 #include <rpm/rpmcallback.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 extern int _rpmts_stats; 24 25 /** \ingroup rpmts 26 * Bit(s) to control rpmtsRun() operation. 27 */ 28 enum rpmtransFlags_e { 29 RPMTRANS_FLAG_NONE = 0, 30 RPMTRANS_FLAG_TEST = (1 << 0), /*!< from --test */ 31 RPMTRANS_FLAG_BUILD_PROBS = (1 << 1), /*!< don't process payload */ 32 RPMTRANS_FLAG_NOSCRIPTS = (1 << 2), /*!< from --noscripts */ 33 RPMTRANS_FLAG_JUSTDB = (1 << 3), /*!< from --justdb */ 34 RPMTRANS_FLAG_NOTRIGGERS = (1 << 4), /*!< from --notriggers */ 35 RPMTRANS_FLAG_NODOCS = (1 << 5), /*!< from --excludedocs */ 36 RPMTRANS_FLAG_ALLFILES = (1 << 6), /*!< from --allfiles */ 37 RPMTRANS_FLAG_NOPLUGINS = (1 << 7), /*!< from --noplugins */ 38 RPMTRANS_FLAG_NOCONTEXTS = (1 << 8), /*!< from --nocontexts */ 39 RPMTRANS_FLAG_NOCAPS = (1 << 9), /*!< from --nocaps */ 40 /* bits 10-15 unused */ 41 RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16), /*!< from --notriggerprein */ 42 RPMTRANS_FLAG_NOPRE = (1 << 17), /*!< from --nopre */ 43 RPMTRANS_FLAG_NOPOST = (1 << 18), /*!< from --nopost */ 44 RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19), /*!< from --notriggerin */ 45 RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20), /*!< from --notriggerun */ 46 RPMTRANS_FLAG_NOPREUN = (1 << 21), /*!< from --nopreun */ 47 RPMTRANS_FLAG_NOPOSTUN = (1 << 22), /*!< from --nopostun */ 48 RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), /*!< from --notriggerpostun */ 49 RPMTRANS_FLAG_NOPRETRANS = (1 << 24), /*!< from --nopretrans */ 50 RPMTRANS_FLAG_NOPOSTTRANS = (1 << 25), /*!< from --noposttrans */ 51 /* bit 26 unused */ 52 RPMTRANS_FLAG_NOMD5 = (1 << 27), /*!< from --nomd5 */ 53 RPMTRANS_FLAG_NOFILEDIGEST = (1 << 27), /*!< from --nofiledigest (alias to --nomd5) */ 54 /* bit 28 unused */ 55 RPMTRANS_FLAG_NOARTIFACTS = (1 << 29), /*!< from --noartifacts */ 56 RPMTRANS_FLAG_NOCONFIGS = (1 << 30), /*!< from --noconfigs */ 57 RPMTRANS_FLAG_DEPLOOPS = (1 << 31) /*!< from --deploops */ 58 }; 59 60 typedef rpmFlags rpmtransFlags; 61 62 #define _noTransScripts \ 63 ( RPMTRANS_FLAG_NOPRE | \ 64 RPMTRANS_FLAG_NOPOST | \ 65 RPMTRANS_FLAG_NOPREUN | \ 66 RPMTRANS_FLAG_NOPOSTUN | \ 67 RPMTRANS_FLAG_NOPRETRANS | \ 68 RPMTRANS_FLAG_NOPOSTTRANS \ 69 ) 70 71 #define _noTransTriggers \ 72 ( RPMTRANS_FLAG_NOTRIGGERPREIN | \ 73 RPMTRANS_FLAG_NOTRIGGERIN | \ 74 RPMTRANS_FLAG_NOTRIGGERUN | \ 75 RPMTRANS_FLAG_NOTRIGGERPOSTUN \ 76 ) 77 78 /* Avoid unnecessary breakage for stuff referring to these unused flags */ 79 #define RPMTRANS_FLAG_NOPAYLOAD 0 80 #define RPMTRANS_FLAG_APPLYONLY 0 81 #define RPMTRANS_FLAG_KEEPOBSOLETE 0 82 #define RPMTRANS_FLAG_DIRSTASH 0 83 #define RPMTRANS_FLAG_REPACKAGE 0 84 #define RPMTRANS_FLAG_PKGCOMMIT 0 85 #define RPMTRANS_FLAG_PKGUNDO 0 86 #define RPMTRANS_FLAG_COMMIT 0 87 #define RPMTRANS_FLAG_UNDO 0 88 #define RPMTRANS_FLAG_REVERSE 0 89 #define RPMTRANS_FLAG_NOSUGGEST 0 90 #define RPMTRANS_FLAG_ADDINDEPS 0 91 92 /** \ingroup rpmts 93 * Bit(s) to control digest and signature verification. 94 */ 95 enum rpmVSFlags_e { 96 RPMVSF_DEFAULT = 0, 97 RPMVSF_NOHDRCHK = (1 << 0), 98 RPMVSF_NEEDPAYLOAD = (1 << 1), 99 /* bit(s) 2-7 unused */ 100 RPMVSF_NOSHA1HEADER = (1 << 8), 101 RPMVSF_NOSHA256HEADER = (1 << 9), 102 RPMVSF_NODSAHEADER = (1 << 10), 103 RPMVSF_NORSAHEADER = (1 << 11), 104 /* bit(s) 12-15 unused */ 105 RPMVSF_NOPAYLOAD = (1 << 16), 106 RPMVSF_NOMD5 = (1 << 17), 107 RPMVSF_NODSA = (1 << 18), 108 RPMVSF_NORSA = (1 << 19) 109 /* bit(s) 16-31 unused */ 110 }; 111 112 typedef rpmFlags rpmVSFlags; 113 114 #define RPMVSF_MASK_NODIGESTS \ 115 ( RPMVSF_NOSHA1HEADER | \ 116 RPMVSF_NOSHA256HEADER | \ 117 RPMVSF_NOPAYLOAD | \ 118 RPMVSF_NOMD5 ) 119 #define _RPMVSF_NODIGESTS RPMVSF_MASK_NODIGESTS 120 121 #define RPMVSF_MASK_NOSIGNATURES \ 122 ( RPMVSF_NODSAHEADER | \ 123 RPMVSF_NORSAHEADER | \ 124 RPMVSF_NODSA | \ 125 RPMVSF_NORSA ) 126 #define _RPMVSF_NOSIGNATURES RPMVSF_MASK_NOSIGNATURES 127 128 #define RPMVSF_MASK_NOHEADER \ 129 ( RPMVSF_NOSHA1HEADER | \ 130 RPMVSF_NOSHA256HEADER | \ 131 RPMVSF_NODSAHEADER | \ 132 RPMVSF_NORSAHEADER ) 133 #define _RPMVSF_NOHEADER RPMVSF_MASK_NOHEADER 134 135 #define RPMVSF_MASK_NOPAYLOAD \ 136 ( RPMVSF_NOMD5 | \ 137 RPMVSF_NOPAYLOAD | \ 138 RPMVSF_NODSA | \ 139 RPMVSF_NORSA ) 140 #define _RPMVSF_NOPAYLOAD RPMVSF_MASK_NOPAYLOAD 141 142 enum { 143 RPMSIG_NONE_TYPE = 0, 144 RPMSIG_DIGEST_TYPE = (1 << 0), 145 RPMSIG_SIGNATURE_TYPE = (1 << 1), 146 RPMSIG_OTHER_TYPE = (1 << 2), 147 }; 148 149 #define RPMSIG_VERIFIABLE_TYPE (RPMSIG_DIGEST_TYPE|RPMSIG_SIGNATURE_TYPE) 150 #define RPMSIG_UNVERIFIED_TYPE (1 << 30) 151 152 /** \ingroup rpmts 153 * Indices for timestamps. 154 */ 155 typedef enum rpmtsOpX_e { 156 RPMTS_OP_TOTAL = 0, 157 RPMTS_OP_CHECK = 1, 158 RPMTS_OP_ORDER = 2, 159 RPMTS_OP_FINGERPRINT = 3, 160 RPMTS_OP_INSTALL = 5, 161 RPMTS_OP_ERASE = 6, 162 RPMTS_OP_SCRIPTLETS = 7, 163 RPMTS_OP_COMPRESS = 8, 164 RPMTS_OP_UNCOMPRESS = 9, 165 RPMTS_OP_DIGEST = 10, 166 RPMTS_OP_SIGNATURE = 11, 167 RPMTS_OP_DBADD = 12, 168 RPMTS_OP_DBREMOVE = 13, 169 RPMTS_OP_DBGET = 14, 170 RPMTS_OP_DBPUT = 15, 171 RPMTS_OP_DBDEL = 16, 172 RPMTS_OP_VERIFY = 17, 173 RPMTS_OP_MAX = 18 174 } rpmtsOpX; 175 176 enum rpmtxnFlags_e { 177 RPMTXN_READ = (1 << 0), 178 RPMTXN_WRITE = (1 << 1), 179 }; 180 typedef rpmFlags rpmtxnFlags; 181 182 /** \ingroup rpmts 183 * Perform dependency resolution on the transaction set. 184 * 185 * Any problems found by rpmtsCheck() can be examined by retrieving the 186 * problem set with rpmtsProblems(), success here only means that 187 * the resolution was successfully attempted for all packages in the set. 188 * 189 * @param ts transaction set 190 * @return 0 on success 191 */ 192 int rpmtsCheck(rpmts ts); 193 194 /** \ingroup rpmts 195 * Determine package order in a transaction set according to dependencies. 196 * 197 * Order packages, returning error if circular dependencies cannot be 198 * eliminated by removing Requires's from the loop(s). Only dependencies from 199 * added or removed packages are used to determine ordering using a 200 * topological sort (Knuth vol. 1, p. 262). Use rpmtsCheck() to verify 201 * that all dependencies can be resolved. 202 * 203 * The final order ends up as installed packages followed by removed packages, 204 * with packages removed for upgrades immediately following the new package 205 * to be installed. 206 * 207 * @param ts transaction set 208 * @return no. of (added) packages that could not be ordered 209 */ 210 int rpmtsOrder(rpmts ts); 211 212 /** \ingroup rpmts 213 * Process all package elements in a transaction set. Before calling 214 * rpmtsRun be sure to have: 215 * 216 * - setup the rpm root dir via rpmtsSetRoot(). 217 * - setup the rpm notify callback via rpmtsSetNotifyCallback(). 218 * - setup the rpm transaction flags via rpmtsSetFlags(). 219 * 220 * Additionally, though not required you may want to: 221 * 222 * - setup the rpm verify signature flags via rpmtsSetVSFlags(). 223 * 224 * @param ts transaction set 225 * @param okProbs unused 226 * @param ignoreSet bits to filter problem types 227 * @return 0 on success, -1 on error, >0 with newProbs set 228 */ 229 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet); 230 231 /** \ingroup rpmts 232 * Reference a transaction set instance. 233 * @param ts transaction set 234 * @return new transaction set reference 235 */ 236 rpmts rpmtsLink (rpmts ts); 237 238 /** \ingroup rpmts 239 * Close the database used by the transaction. 240 * @param ts transaction set 241 * @return 0 on success 242 */ 243 int rpmtsCloseDB(rpmts ts); 244 245 /** \ingroup rpmts 246 * Open the database used by the transaction. 247 * @param ts transaction set 248 * @param dbmode O_RDONLY or O_RDWR 249 * @return 0 on success 250 */ 251 int rpmtsOpenDB(rpmts ts, int dbmode); 252 253 /** \ingroup rpmts 254 * Initialize the database used by the transaction. 255 * @deprecated An explicit rpmdbInit() is almost never needed. 256 * @param ts transaction set 257 * @param dbmode O_RDONLY or O_RDWR 258 * @return 0 on success 259 */ 260 int rpmtsInitDB(rpmts ts, int dbmode); 261 262 /** \ingroup rpmts 263 * Return the transaction database mode 264 * @param ts transaction set 265 * @return O_RDONLY, O_RDWR or -1 (lazy opens disabled) 266 */ 267 int rpmtsGetDBMode(rpmts ts); 268 269 /** \ingroup rpmts 270 * Set the transaction database mode. Only permitted when when backing 271 * database hasn't been opened yet (ie rpmtsGetRdb(ts) == NULL) 272 * @param ts transaction set 273 * @param dbmode O_RDONLY, O_RDWR or -1 (disable lazy opens) 274 * @return 0 on success, 1 on error 275 */ 276 int rpmtsSetDBMode(rpmts ts, int dbmode); 277 278 /** \ingroup rpmts 279 * Rebuild the database used by the transaction. 280 * @param ts transaction set 281 * @return 0 on success 282 */ 283 int rpmtsRebuildDB(rpmts ts); 284 285 /** \ingroup rpmts 286 * Verify the database used by the transaction. 287 * @param ts transaction set 288 * @return 0 on success 289 */ 290 int rpmtsVerifyDB(rpmts ts); 291 292 /** \ingroup rpmts 293 * Return transaction database iterator. 294 * @param ts transaction set 295 * @param rpmtag database index tag 296 * @param keyp key data (NULL for sequential access) 297 * @param keylen key data length (0 will use strlen(keyp)) 298 * @return NULL on failure 299 */ 300 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag, 301 const void * keyp, size_t keylen); 302 303 /** \ingroup rpmts 304 * Import a header into the rpmdb 305 * @param txn transaction handle 306 * @param h header 307 * @param flags (unused) 308 * @return RPMRC_OK/RPMRC_FAIL 309 */ 310 rpmRC rpmtsImportHeader(rpmtxn txn, Header h, rpmFlags flags); 311 312 /** \ingroup rpmts 313 * Import public key packet(s). 314 * @todo Implicit --update policy for gpg-pubkey headers. 315 * @param ts transaction set 316 * @param pkt pgp pubkey packet(s) 317 * @param pktlen pgp pubkey length 318 * @return RPMRC_OK/RPMRC_FAIL 319 */ 320 rpmRC rpmtsImportPubkey(rpmts ts, const unsigned char * pkt, size_t pktlen); 321 322 /** \ingroup rpmts 323 * Retrieve handle for keyring used for this transaction set 324 * @param ts transaction set 325 * @param autoload load default keyring if keyring is not set 326 * @return keyring handle (or NULL) 327 */ 328 rpmKeyring rpmtsGetKeyring(rpmts ts, int autoload); 329 330 /** \ingroup rpmts 331 * Set keyring to use for this transaction set. 332 * Keyring can be only changed while the underlying rpm database is not 333 * yet open. 334 * @param ts transaction set 335 * @param keyring keyring handle (NULL to free current keyring) 336 * @return 0 on success, -1 on error 337 */ 338 int rpmtsSetKeyring(rpmts ts, rpmKeyring keyring); 339 340 /** \ingroup rpmts 341 * Set dependency solver callback. 342 * @param ts transaction set 343 * @param (*solve) dependency solver callback 344 * @param solveData dependency solver callback data (opaque) 345 * @return 0 on success 346 */ 347 int rpmtsSetSolveCallback(rpmts ts, 348 int (*solve) (rpmts ts, rpmds ds, const void * data), 349 const void * solveData); 350 351 /** \ingroup rpmts 352 * Return current transaction set problems. 353 * @param ts transaction set 354 * @return current problem set (or NULL if no problems) 355 */ 356 rpmps rpmtsProblems(rpmts ts); 357 358 /** \ingroup rpmts 359 * Clean current transaction problem set. 360 * @param ts transaction set 361 */ 362 void rpmtsCleanProblems(rpmts ts); 363 364 /** \ingroup rpmts 365 * Free memory needed only for dependency checks and ordering. 366 * @param ts transaction set 367 */ 368 void rpmtsClean(rpmts ts); 369 370 /** \ingroup rpmts 371 * Re-create an empty transaction set. 372 * @param ts transaction set 373 */ 374 void rpmtsEmpty(rpmts ts); 375 376 /** \ingroup rpmts 377 * Destroy transaction set, closing the database as well. 378 * @param ts transaction set 379 * @return NULL always 380 */ 381 rpmts rpmtsFree(rpmts ts); 382 383 /** \ingroup rpmts 384 * Get verify signatures flag(s). 385 * @param ts transaction set 386 * @return verify signatures flags 387 */ 388 rpmVSFlags rpmtsVSFlags(rpmts ts); 389 390 /** \ingroup rpmts 391 * Set verify signatures flag(s). 392 * @param ts transaction set 393 * @param vsflags new verify signatures flags 394 * @return previous value 395 */ 396 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags); 397 398 /** \ingroup rpmts 399 * Get package verify flag(s). 400 * @param ts transaction set 401 * @return verify signatures flags 402 */ 403 rpmVSFlags rpmtsVfyFlags(rpmts ts); 404 405 /** \ingroup rpmts 406 * Set package verify flag(s). 407 * @param ts transaction set 408 * @param vfyflags new package verify flags 409 * @return old package verify flags 410 */ 411 rpmVSFlags rpmtsSetVfyFlags(rpmts ts, rpmVSFlags vfyflags); 412 413 /** \ingroup rpmts 414 * Get enforced package verify level 415 * @param ts transaction set 416 * @return package verify level 417 */ 418 int rpmtsVfyLevel(rpmts ts); 419 420 /** \ingroup rpmts 421 * Set enforced package verify level 422 * @param ts transaction set 423 * @param vfylevel new package verify level 424 * @return old package verify level 425 */ 426 int rpmtsSetVfyLevel(rpmts ts, int vfylevel); 427 428 /** \ingroup rpmts 429 * Get transaction rootDir, i.e. path to chroot(2). 430 * @param ts transaction set 431 * @return transaction rootDir 432 */ 433 const char * rpmtsRootDir(rpmts ts); 434 435 /** \ingroup rpmts 436 * Set transaction rootDir, i.e. path to chroot(2). 437 * @param ts transaction set 438 * @param rootDir new transaction rootDir (or NULL) 439 * @return 0 on success, -1 on error (invalid rootDir) 440 */ 441 int rpmtsSetRootDir(rpmts ts, const char * rootDir); 442 443 /** \ingroup rpmts 444 * Get transaction script file handle, i.e. stdout/stderr on scriptlet execution 445 * @param ts transaction set 446 * @return transaction script file handle 447 */ 448 FD_t rpmtsScriptFd(rpmts ts); 449 450 /** \ingroup rpmts 451 * Set transaction script file handle, i.e. stdout/stderr on scriptlet execution 452 * @param ts transaction set 453 * @param scriptFd new script file handle (or NULL) 454 */ 455 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd); 456 457 /** \ingroup rpmts 458 * Get transaction id, i.e. transaction time stamp. 459 * @param ts transaction set 460 * @return transaction id 461 */ 462 rpm_tid_t rpmtsGetTid(rpmts ts); 463 464 /** \ingroup rpmts 465 * Set transaction id, i.e. transaction time stamp. 466 * @param ts transaction set 467 * @param tid new transaction id 468 * @return previous transaction id 469 */ 470 rpm_tid_t rpmtsSetTid(rpmts ts, rpm_tid_t tid); 471 472 /** \ingroup rpmts 473 * Get transaction set database handle. 474 * @param ts transaction set 475 * @return transaction database handle 476 */ 477 rpmdb rpmtsGetRdb(rpmts ts); 478 479 /** \ingroup rpmts 480 * Perform transaction progress notify callback. 481 * @param ts transaction set 482 * @param te current transaction element 483 * @param what type of call back 484 * @param amount current value 485 * @param total final value 486 * @return callback dependent pointer 487 */ 488 void * rpmtsNotify(rpmts ts, rpmte te, 489 rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total); 490 491 /** \ingroup rpmts 492 * Return number of (ordered) transaction set elements. 493 * @param ts transaction set 494 * @return no. of transaction set elements 495 */ 496 int rpmtsNElements(rpmts ts); 497 498 /** \ingroup rpmts 499 * Return (ordered) transaction set element. 500 * @param ts transaction set 501 * @param ix transaction element index 502 * @return transaction element (or NULL) 503 */ 504 rpmte rpmtsElement(rpmts ts, int ix); 505 506 /** \ingroup rpmts 507 * Get problem ignore bit mask, i.e. bits to filter encountered problems. 508 * @param ts transaction set 509 * @return ignore bit mask 510 */ 511 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts); 512 513 /** \ingroup rpmts 514 * Get transaction flags, i.e. bits that control rpmtsRun(). 515 * @param ts transaction set 516 * @return transaction flags 517 */ 518 rpmtransFlags rpmtsFlags(rpmts ts); 519 520 /** \ingroup rpmts 521 * Set transaction flags, i.e. bits that control rpmtsRun(). 522 * @param ts transaction set 523 * @param transFlags new transaction flags 524 * @return previous transaction flags 525 */ 526 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags); 527 528 /** \ingroup rpmts 529 * Retrieve color bits of transaction set. 530 * @param ts transaction set 531 * @return color bits 532 */ 533 rpm_color_t rpmtsColor(rpmts ts); 534 535 /** \ingroup rpmts 536 * Retrieve preferred file color 537 * @param ts transaction set 538 * @return color bits 539 */ 540 rpm_color_t rpmtsPrefColor(rpmts ts); 541 542 /** \ingroup rpmts 543 * Set color bits of transaction set. 544 * @param ts transaction set 545 * @param color new color bits 546 * @return previous color bits 547 */ 548 rpm_color_t rpmtsSetColor(rpmts ts, rpm_color_t color); 549 550 /** \ingroup rpmts 551 * Set preferred file color 552 * @param ts transaction set 553 * @param color new color bits 554 * @return previous color bits 555 */ 556 rpm_color_t rpmtsSetPrefColor(rpmts ts, rpm_color_t color); 557 558 /** \ingroup rpmts 559 * Retrieve operation timestamp from a transaction set. 560 * @param ts transaction set 561 * @param opx operation timestamp index 562 * @return pointer to operation timestamp. 563 */ 564 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx); 565 566 /** \ingroup rpmts 567 * Get the plugins associated with a transaction set 568 * @param ts transaction set 569 * @return plugins 570 */ 571 rpmPlugins rpmtsPlugins(rpmts ts); 572 573 /** \ingroup rpmts 574 * Set transaction notify callback function and argument. 575 * 576 * @warning This call must be made before rpmtsRun() for 577 * install/upgrade/freshen to function correctly. 578 * 579 * @param ts transaction set 580 * @param notify progress callback 581 * @param notifyData progress callback private data 582 * @return 0 on success 583 */ 584 int rpmtsSetNotifyCallback(rpmts ts, 585 rpmCallbackFunction notify, 586 rpmCallbackData notifyData); 587 588 /** \ingroup rpmts 589 * Create an empty transaction set. 590 * @return new transaction set 591 */ 592 rpmts rpmtsCreate(void); 593 594 /** \ingroup rpmts 595 * Add package to be installed to transaction set. 596 * 597 * The transaction set is checked for duplicate package names. 598 * If found, the package with the "newest" EVR will be replaced. 599 * 600 * @param ts transaction set 601 * @param h header 602 * @param key package retrieval key (e.g. file name) 603 * @param upgrade is package being upgraded? 604 * @param relocs package file relocations 605 * @return 0 on success, 1 on I/O error, 2 needs capabilities 606 */ 607 int rpmtsAddInstallElement(rpmts ts, Header h, 608 const fnpyKey key, int upgrade, 609 rpmRelocation * relocs); 610 611 /** \ingroup rpmts 612 * Add package to be reinstalled to transaction set. 613 * 614 * @param ts transaction set 615 * @param h header 616 * @param key package retrieval key (e.g. file name) 617 * @return 0 on success 618 */ 619 int rpmtsAddReinstallElement(rpmts ts, Header h, const fnpyKey key); 620 621 /** \ingroup rpmts 622 * Add package to be erased to transaction set. 623 * @param ts transaction set 624 * @param h header 625 * @param dboffset ununsed 626 * @return 0 on success, 1 on error (not installed) 627 */ 628 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset); 629 630 /** \ingroup rpmts 631 * Create a transaction (lock) handle 632 * @param ts transaction set 633 * @param flags flags 634 * @return transaction handle 635 */ 636 rpmtxn rpmtxnBegin(rpmts ts, rpmtxnFlags flags); 637 638 /** \ingroup rpmts 639 * Destroy transaction (lock) handle 640 * @param txn transaction handle 641 * @return NULL always 642 */ 643 rpmtxn rpmtxnEnd(rpmtxn txn); 644 645 /** \ingroup rpmte 646 * Destroy transaction element iterator. 647 * @param tsi transaction element iterator 648 * @return NULL always 649 */ 650 rpmtsi rpmtsiFree(rpmtsi tsi); 651 652 /** \ingroup rpmte 653 * Create transaction element iterator. 654 * @param ts transaction set 655 * @return transaction element iterator 656 */ 657 rpmtsi rpmtsiInit(rpmts ts); 658 659 /** \ingroup rpmte 660 * Return next transaction element of type. 661 * @param tsi transaction element iterator 662 * @param types transaction element type selector (0 for any) 663 * @return next transaction element of type, NULL on termination 664 */ 665 rpmte rpmtsiNext(rpmtsi tsi, rpmElementTypes types); 666 667 #ifdef __cplusplus 668 } 669 #endif 670 671 672 #endif /* H_RPMTS */ 673