00001 #ifndef H_RPMTS
00002 #define H_RPMTS
00003
00009 #include "rpmps.h"
00010 #include "rpmsw.h"
00011 #include "rpmsx.h"
00012 #include <rpmpgp.h>
00013
00014
00015
00016 extern int _rpmts_debug;
00017
00018 extern int _rpmts_macros;
00019
00020 extern int _rpmts_stats;
00021
00022 extern int _fps_debug;
00023
00024
00028 typedef pgpVSFlags rpmVSFlags;
00029
00034 typedef enum rpmdepFlags_e {
00035 RPMDEPS_FLAG_NONE = 0,
00036 RPMDEPS_FLAG_NOUPGRADE = (1 << 0),
00037 RPMDEPS_FLAG_NOREQUIRES = (1 << 1),
00038 RPMDEPS_FLAG_NOCONFLICTS = (1 << 2),
00039 RPMDEPS_FLAG_NOOBSOLETES = (1 << 3),
00040 RPMDEPS_FLAG_NOPARENTDIRS = (1 << 4),
00041 RPMDEPS_FLAG_NOLINKTOS = (1 << 5),
00042 RPMDEPS_FLAG_ANACONDA = (1 << 6),
00043 RPMDEPS_FLAG_NOSUGGEST = (1 << 7),
00044 RPMDEPS_FLAG_ADDINDEPS = (1 << 8),
00045 RPMDEPS_FLAG_DEPLOOPS = (1 << 9)
00046 } rpmdepFlags;
00047
00052 typedef enum rpmtransFlags_e {
00053 RPMTRANS_FLAG_NONE = 0,
00054 RPMTRANS_FLAG_TEST = (1 << 0),
00055 RPMTRANS_FLAG_BUILD_PROBS = (1 << 1),
00056 RPMTRANS_FLAG_NOSCRIPTS = (1 << 2),
00057 RPMTRANS_FLAG_JUSTDB = (1 << 3),
00058 RPMTRANS_FLAG_NOTRIGGERS = (1 << 4),
00059 RPMTRANS_FLAG_NODOCS = (1 << 5),
00060 RPMTRANS_FLAG_ALLFILES = (1 << 6),
00061
00062 RPMTRANS_FLAG_NOCONTEXTS = (1 << 8),
00063 RPMTRANS_FLAG_DIRSTASH = (1 << 9),
00064 RPMTRANS_FLAG_REPACKAGE = (1 << 10),
00066 RPMTRANS_FLAG_PKGCOMMIT = (1 << 11),
00067
00068 RPMTRANS_FLAG_PKGUNDO = (1 << 12),
00069
00070 RPMTRANS_FLAG_COMMIT = (1 << 13),
00071
00072 RPMTRANS_FLAG_UNDO = (1 << 14),
00073
00074 RPMTRANS_FLAG_APPLYONLY = (1 << 25),
00075
00076 RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16),
00077 RPMTRANS_FLAG_NOPRE = (1 << 17),
00078 RPMTRANS_FLAG_NOPOST = (1 << 18),
00079 RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19),
00080 RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20),
00081 RPMTRANS_FLAG_NOPREUN = (1 << 21),
00082 RPMTRANS_FLAG_NOPOSTUN = (1 << 22),
00083 RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23),
00084
00085 RPMTRANS_FLAG_NOPAYLOAD = (1 << 24),
00086
00087 RPMTRANS_FLAG_NORPMDB = (1 << 25),
00088
00089 RPMTRANS_FLAG_NOFDIGESTS = (1 << 27),
00090 RPMTRANS_FLAG_NOPRETRANS = (1 << 28),
00091 RPMTRANS_FLAG_NOPOSTTRANS = (1 << 29),
00092 RPMTRANS_FLAG_NOCONFIGS = (1 << 30),
00093
00094 } rpmtransFlags;
00095
00096 #define _noTransScripts \
00097 ( RPMTRANS_FLAG_NOPRETRANS | \
00098 RPMTRANS_FLAG_NOPRE | \
00099 RPMTRANS_FLAG_NOPOST | \
00100 RPMTRANS_FLAG_NOPREUN | \
00101 RPMTRANS_FLAG_NOPOSTUN | \
00102 RPMTRANS_FLAG_NOPOSTTRANS \
00103 )
00104
00105 #define _noTransTriggers \
00106 ( RPMTRANS_FLAG_NOTRIGGERPREIN | \
00107 RPMTRANS_FLAG_NOTRIGGERIN | \
00108 RPMTRANS_FLAG_NOTRIGGERUN | \
00109 RPMTRANS_FLAG_NOTRIGGERPOSTUN \
00110 )
00111
00115 typedef enum rpmtsOpX_e {
00116 RPMTS_OP_TOTAL = 0,
00117 RPMTS_OP_CHECK = 1,
00118 RPMTS_OP_ORDER = 2,
00119 RPMTS_OP_FINGERPRINT = 3,
00120 RPMTS_OP_REPACKAGE = 4,
00121 RPMTS_OP_INSTALL = 5,
00122 RPMTS_OP_ERASE = 6,
00123 RPMTS_OP_SCRIPTLETS = 7,
00124 RPMTS_OP_COMPRESS = 8,
00125 RPMTS_OP_UNCOMPRESS = 9,
00126 RPMTS_OP_DIGEST = 10,
00127 RPMTS_OP_SIGNATURE = 11,
00128 RPMTS_OP_DBADD = 12,
00129 RPMTS_OP_DBREMOVE = 13,
00130 RPMTS_OP_DBGET = 14,
00131 RPMTS_OP_DBPUT = 15,
00132 RPMTS_OP_DBDEL = 16,
00133 RPMTS_OP_READHDR = 17,
00134 RPMTS_OP_HDRLOAD = 18,
00135 RPMTS_OP_HDRGET = 19,
00136 RPMTS_OP_DEBUG = 20,
00137 RPMTS_OP_MAX = 20
00138 } rpmtsOpX;
00139
00143 typedef enum rpmTSType_e {
00144 RPMTRANS_TYPE_NORMAL = 0,
00145 RPMTRANS_TYPE_ROLLBACK = (1 << 0),
00146 RPMTRANS_TYPE_AUTOROLLBACK = (1 << 1)
00147 } rpmTSType;
00148
00151 typedef enum tsStage_e {
00152 TSM_UNKNOWN = 0,
00153 TSM_INSTALL = 7,
00154 TSM_ERASE = 8,
00155 } tsmStage;
00156
00157 #if defined(_RPMTS_INTERNAL)
00158
00159 #include "rpmhash.h"
00160 #include "rpmkeyring.h"
00161 #include "rpmal.h"
00162
00163
00164
00165 extern int _cacheDependsRC;
00166
00167
00170 typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
00171
00175 struct diskspaceInfo_s {
00176 unsigned long f_bsize;
00177 unsigned long f_frsize;
00178 unsigned long long f_blocks;
00179 unsigned long long f_bfree;
00180 signed long long f_bavail;
00181 unsigned long long f_files;
00182 unsigned long long f_ffree;
00183 signed long long f_favail;
00184 unsigned long f_fsid;
00185 unsigned long f_flag;
00186 unsigned long f_namemax;
00188 signed long long bneeded;
00189 signed long long ineeded;
00190 dev_t dev;
00191 };
00192
00196 #define adj_fs_blocks(_nb) (((_nb) * 21) / 20)
00197
00198 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
00199
00203 struct rpmts_s {
00204 struct rpmioItem_s _item;
00205 rpmdepFlags depFlags;
00206 rpmtransFlags transFlags;
00207 tsmStage goal;
00208 rpmTSType type;
00210
00211 rpmdb sdb;
00212 int sdbmode;
00213
00214 int (*solve) (rpmts ts, rpmds key, const void * data)
00215 ;
00216
00217 const void * solveData;
00218 int nsuggests;
00219
00220 const void ** suggests;
00222
00223 rpmCallbackFunction notify;
00224
00225 rpmCallbackData notifyData;
00227
00228 rpmPRCO PRCO;
00230
00231 rpmps probs;
00232 rpmprobFilterFlags ignoreSet;
00235 rpmuint32_t filesystemCount;
00236
00237 const char ** filesystems;
00238
00239 rpmDiskSpaceInfo dsi;
00241
00242 rpmdb rdb;
00243 int dbmode;
00244
00245 hashTable ht;
00247
00248 int * removedPackages;
00249 int numRemovedPackages;
00250 int allocedRemovedPackages;
00252
00253 rpmal addedPackages;
00254 int numAddedPackages;
00256
00257 rpmal erasedPackages;
00258 int numErasedPackages;
00260 #ifndef DYING
00261
00262 rpmal availablePackages;
00263 int numAvailablePackages;
00264 #endif
00265
00266
00267 rpmsx sx;
00269
00270 rpmte relocateElement;
00272
00273 rpmte * order;
00274 int orderCount;
00275 int orderAlloced;
00276 int unorderedSuccessors;
00277 int ntrees;
00278 int maxDepth;
00280
00281 rpmte teInstall;
00282
00283 rpmte teErase;
00285 int selinuxEnabled;
00286 int chrootDone;
00287
00288 const char * rootDir;
00289
00290 const char * currDir;
00291
00292 FD_t scriptFd;
00293 int delta;
00294 rpmuint32_t tid[2];
00296 rpmuint32_t color;
00297 rpmuint32_t prefcolor;
00299
00300 const char * fn;
00302
00303 rpmKeyring keyring;
00304
00305 rpmuint8_t * pkpkt;
00306 size_t pkpktlen;
00307 rpmuint8_t pksignid[8];
00309 struct rpmop_s ops[RPMTS_OP_MAX];
00310
00311
00312 pgpDig dig;
00314
00315 Spec spec;
00317 rpmuint32_t arbgoal;
00319 #if defined(__LCLINT__)
00320
00321 int nrefs;
00322 #endif
00323 };
00324 #endif
00325
00326 #ifdef __cplusplus
00327 extern "C" {
00328 #endif
00329
00340 int rpmtsCheck(rpmts ts)
00341
00342 ;
00343
00360 int rpmtsOrder(rpmts ts)
00361
00362 ;
00363
00381 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00382
00383 ;
00384
00393 rpmRC rpmtsRollback(rpmts rbts, rpmprobFilterFlags ignoreSet,
00394 int running, rpmte rbte)
00395
00396 ;
00397
00404
00405 rpmts rpmtsUnlink ( rpmts ts,
00406 const char * msg)
00407 ;
00408 #define rpmtsUnlink(_ts, _msg) \
00409 ((rpmts) rpmioUnlinkPoolItem((rpmioItem)(_ts), _msg, __FILE__, __LINE__))
00410
00417
00418 rpmts rpmtsLink (rpmts ts, const char * msg)
00419 ;
00420 #define rpmtsLink(_ts, _msg) \
00421 ((rpmts) rpmioLinkPoolItem((rpmioItem)(_ts), _msg, __FILE__, __LINE__))
00422
00428 int rpmtsCloseDB(rpmts ts)
00429
00430 ;
00431
00438 int rpmtsOpenDB(rpmts ts, int dbmode)
00439
00440 ;
00441
00449 int rpmtsInitDB(rpmts ts, int dbmode)
00450
00451 ;
00452
00458 int rpmtsRebuildDB(rpmts ts)
00459
00460 ;
00461
00467 int rpmtsVerifyDB(rpmts ts)
00468
00469 ;
00470
00479
00480 rpmmi rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00481 const void * keyp, size_t keylen)
00482
00483 ;
00484
00491
00492 rpmRC rpmtsFindPubkey(rpmts ts, void * _dig)
00493
00494 ;
00495
00496
00502
00503 int rpmtsCloseSDB(rpmts ts)
00504
00505 ;
00506
00507
00514
00515 int rpmtsOpenSDB(rpmts ts, int dbmode)
00516
00517 ;
00518
00519
00527
00528 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00529
00530 ;
00531
00532
00540
00541 int rpmtsAvailable(rpmts ts, const rpmds ds)
00542
00543 ;
00544
00552 int rpmtsSetSolveCallback(rpmts ts,
00553 int (*solve) (rpmts ts, rpmds ds, const void * data),
00554 const void * solveData)
00555 ;
00556
00562 rpmTSType rpmtsType(rpmts ts)
00563 ;
00564
00575 void rpmtsSetType(rpmts ts, rpmTSType type)
00576 ;
00577
00583 rpmuint32_t rpmtsARBGoal(rpmts ts)
00584 ;
00585
00591 void rpmtsSetARBGoal(rpmts ts, rpmuint32_t goal)
00592 ;
00593
00599
00600 rpmps rpmtsProblems(rpmts ts)
00601 ;
00602
00607 void rpmtsCleanDig(rpmts ts)
00608
00609 ;
00610
00615 void rpmtsClean(rpmts ts)
00616
00617 ;
00618
00623 void rpmtsEmpty(rpmts ts)
00624
00625 ;
00626
00632
00633 rpmts rpmtsFree( rpmts ts)
00634
00635 ;
00636 #define rpmtsFree(_ts) \
00637 ((rpmts) rpmioFreePoolItem((rpmioItem)(_ts), __FUNCTION__, __FILE__, __LINE__))
00638
00645 void * rpmtsGetKeyring(rpmts ts, int autoload)
00646 ;
00647
00654 int rpmtsSetKeyring(rpmts ts, void * _keyring)
00655 ;
00656
00662 rpmVSFlags rpmtsVSFlags(rpmts ts)
00663 ;
00664
00671 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00672 ;
00673
00680 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00681 ;
00682
00688
00689 extern const char * rpmtsRootDir(rpmts ts)
00690 ;
00691
00697 void rpmtsSetRootDir(rpmts ts, const char * rootDir)
00698 ;
00699
00705
00706 extern const char * rpmtsCurrDir(rpmts ts)
00707 ;
00708
00714 void rpmtsSetCurrDir(rpmts ts, const char * currDir)
00715 ;
00716
00717 #if defined(_RPMTS_INTERNAL)
00718
00723
00724 FD_t rpmtsScriptFd(rpmts ts)
00725 ;
00726
00732 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
00733
00734 ;
00735 #endif
00736
00742 int rpmtsSELinuxEnabled(rpmts ts)
00743 ;
00744
00750 int rpmtsChrootDone(rpmts ts)
00751 ;
00752
00759 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00760 ;
00761
00767 rpmuint32_t rpmtsGetTid(rpmts ts)
00768 ;
00769
00776 rpmuint32_t rpmtsSetTid(rpmts ts, rpmuint32_t tid)
00777 ;
00778
00784 pgpDig rpmtsDig(rpmts ts)
00785
00786 ;
00787
00793
00794
00795 pgpDigParams rpmtsPubkey(const rpmts ts)
00796
00797 ;
00798
00799
00805
00806 rpmdb rpmtsGetRdb(rpmts ts)
00807 ;
00808
00814
00815 rpmPRCO rpmtsPRCO(rpmts ts)
00816
00817 ;
00818
00824 int rpmtsInitDSI(const rpmts ts)
00825
00826 ;
00827
00837 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00838 rpmuint32_t fileSize, rpmuint32_t prevSize, rpmuint32_t fixupSize,
00839 int _action)
00840 ;
00841
00847 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00848 ;
00849
00861
00862 void * rpmtsNotify(rpmts ts, rpmte te,
00863 rpmCallbackType what, rpmuint64_t amount, rpmuint64_t total)
00864 ;
00865
00871 int rpmtsNElements(rpmts ts)
00872 ;
00873
00880
00881 rpmte rpmtsElement(rpmts ts, int ix)
00882 ;
00883
00889 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00890 ;
00891
00897 rpmtransFlags rpmtsFlags(rpmts ts)
00898 ;
00899
00906 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00907 ;
00908
00914 rpmdepFlags rpmtsDFlags(rpmts ts)
00915 ;
00916
00923 rpmdepFlags rpmtsSetDFlags(rpmts ts, rpmdepFlags depFlags)
00924 ;
00925
00931
00932 Spec rpmtsSpec(rpmts ts)
00933 ;
00934
00941
00942 Spec rpmtsSetSpec(rpmts ts, Spec spec)
00943 ;
00944
00950
00951 rpmte rpmtsRelocateElement(rpmts ts)
00952 ;
00953
00960
00961 rpmte rpmtsSetRelocateElement(rpmts ts, rpmte relocateElement)
00962 ;
00963
00969 tsmStage rpmtsGoal(rpmts ts)
00970 ;
00971
00978 tsmStage rpmtsSetGoal(rpmts ts, tsmStage goal)
00979 ;
00980
00986 int rpmtsDBMode(rpmts ts)
00987 ;
00988
00995 int rpmtsSetDBMode(rpmts ts, int dbmode)
00996 ;
00997
01003 rpmuint32_t rpmtsColor(rpmts ts)
01004 ;
01005
01011 rpmuint32_t rpmtsPrefColor(rpmts ts)
01012 ;
01013
01020 rpmuint32_t rpmtsSetColor(rpmts ts, rpmuint32_t color)
01021 ;
01022
01029
01030 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
01031 ;
01032
01044 int rpmtsSetNotifyCallback(rpmts ts,
01045 rpmCallbackFunction notify,
01046 rpmCallbackData notifyData)
01047 ;
01048
01053
01054 rpmts rpmtsCreate(void)
01055
01056 ;
01057
01058
01059
01060 extern int rpmcliPackagesTotal;
01061
01062
01076 int rpmtsAddInstallElement(rpmts ts, Header h,
01077 const fnpyKey key, int upgrade,
01078 rpmRelocation relocs)
01079
01080
01081
01082 ;
01083
01091 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
01092
01093 ;
01094
01095 #if !defined(SWIG)
01096 #if defined(_RPMTS_PRINT)
01097
01103 static inline
01104 int rpmtsPrint( rpmts ts, FILE * fp)
01105
01106
01107 {
01108 rpmuint32_t tid = rpmtsGetTid(ts);
01109 time_t ttid = tid;
01110 rpmtsi tsi;
01111 rpmte te;
01112
01113 if (fp == NULL)
01114 fp = stderr;
01115
01116 fprintf(fp, _("=== Transaction at %-24.24s (0x%08x):\n"), ctime(&ttid),tid);
01117 tsi = rpmtsiInit(ts);
01118 while ((te = rpmtsiNext(tsi, 0)) != NULL)
01119 fprintf(fp, "t%s> %s\n", (rpmteType(te) == TR_ADDED ? "I" : "E"),
01120 rpmteNEVRA(te));
01121 tsi = rpmtsiFree(tsi);
01122 return 0;
01123 }
01124 #endif
01125 #endif
01126
01127 #ifdef __cplusplus
01128 }
01129 #endif
01130
01131
01132 #endif