00001 #ifndef H_RPMTS
00002 #define H_RPMTS
00003
00009 #include "rpmps.h"
00010 #include "rpmsw.h"
00011 #include "rpmsx.h"
00012
00013
00014
00015 extern int _rpmts_debug;
00016
00017 extern int _rpmts_stats;
00018
00019 extern int _fps_debug;
00020
00021
00025 typedef enum rpmVSFlags_e {
00026 RPMVSF_DEFAULT = 0,
00027 RPMVSF_NOHDRCHK = (1 << 0),
00028 RPMVSF_NEEDPAYLOAD = (1 << 1),
00029
00030 RPMVSF_NOSHA1HEADER = (1 << 8),
00031 RPMVSF_NOMD5HEADER = (1 << 9),
00032 RPMVSF_NODSAHEADER = (1 << 10),
00033 RPMVSF_NORSAHEADER = (1 << 11),
00034
00035 RPMVSF_NOSHA1 = (1 << 16),
00036 RPMVSF_NOMD5 = (1 << 17),
00037 RPMVSF_NODSA = (1 << 18),
00038 RPMVSF_NORSA = (1 << 19)
00039
00040 } rpmVSFlags;
00041
00045 typedef enum rpmTSType_e {
00046 RPMTRANS_TYPE_NORMAL = 0,
00047 RPMTRANS_TYPE_ROLLBACK = (1 << 0),
00048 RPMTRANS_TYPE_AUTOROLLBACK = (1 << 1)
00049 } rpmTSType;
00050
00051 #define _RPMVSF_NODIGESTS \
00052 ( RPMVSF_NOSHA1HEADER | \
00053 RPMVSF_NOMD5HEADER | \
00054 RPMVSF_NOSHA1 | \
00055 RPMVSF_NOMD5 )
00056
00057 #define _RPMVSF_NOSIGNATURES \
00058 ( RPMVSF_NODSAHEADER | \
00059 RPMVSF_NORSAHEADER | \
00060 RPMVSF_NODSA | \
00061 RPMVSF_NORSA )
00062
00063 #define _RPMVSF_NOHEADER \
00064 ( RPMVSF_NOSHA1HEADER | \
00065 RPMVSF_NOMD5HEADER | \
00066 RPMVSF_NODSAHEADER | \
00067 RPMVSF_NORSAHEADER )
00068
00069 #define _RPMVSF_NOPAYLOAD \
00070 ( RPMVSF_NOSHA1 | \
00071 RPMVSF_NOMD5 | \
00072 RPMVSF_NODSA | \
00073 RPMVSF_NORSA )
00074
00078 typedef enum rpmtsOpX_e {
00079 RPMTS_OP_TOTAL = 0,
00080 RPMTS_OP_CHECK = 1,
00081 RPMTS_OP_ORDER = 2,
00082 RPMTS_OP_FINGERPRINT = 3,
00083 RPMTS_OP_REPACKAGE = 4,
00084 RPMTS_OP_INSTALL = 5,
00085 RPMTS_OP_ERASE = 6,
00086 RPMTS_OP_SCRIPTLETS = 7,
00087 RPMTS_OP_COMPRESS = 8,
00088 RPMTS_OP_UNCOMPRESS = 9,
00089 RPMTS_OP_DIGEST = 10,
00090 RPMTS_OP_SIGNATURE = 11,
00091 RPMTS_OP_DBADD = 12,
00092 RPMTS_OP_DBREMOVE = 13,
00093 RPMTS_OP_DBGET = 14,
00094 RPMTS_OP_DBPUT = 15,
00095 RPMTS_OP_DBDEL = 16,
00096 RPMTS_OP_READHDR = 17,
00097 RPMTS_OP_MAX = 18
00098 } rpmtsOpX;
00099
00100 #if defined(_RPMTS_INTERNAL)
00101
00102 #include "rpmhash.h"
00103 #include "rpmal.h"
00104
00105
00106
00107 extern int _cacheDependsRC;
00108
00109
00112 typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
00113
00117 struct diskspaceInfo_s {
00118 unsigned long f_bsize;
00119 unsigned long f_frsize;
00120 unsigned long long f_blocks;
00121 unsigned long long f_bfree;
00122 signed long long f_bavail;
00123 unsigned long long f_files;
00124 unsigned long long f_ffree;
00125 signed long long f_favail;
00126 unsigned long f_fsid;
00127 unsigned long f_flag;
00128 unsigned long f_namemax;
00130 signed long long bneeded;
00131 signed long long ineeded;
00132 dev_t dev;
00133 };
00134
00138 #define adj_fs_blocks(_nb) (((_nb) * 21) / 20)
00139
00140 #define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
00141
00144 typedef enum tsStage_e {
00145 TSM_UNKNOWN = 0,
00146 TSM_INSTALL = 7,
00147 TSM_ERASE = 8,
00148 } tsmStage;
00149
00153 struct rpmts_s {
00154 rpmdepFlags depFlags;
00155 rpmtransFlags transFlags;
00156 tsmStage goal;
00157 rpmTSType type;
00159
00160 rpmdb sdb;
00161 int sdbmode;
00162
00163 int (*solve) (rpmts ts, rpmds key, const void * data)
00164 ;
00165
00166 const void * solveData;
00167 int nsuggests;
00168
00169 const void ** suggests;
00171
00172 rpmCallbackFunction notify;
00173
00174 rpmCallbackData notifyData;
00176
00177 rpmPRCO PRCO;
00179
00180 rpmps probs;
00181 rpmprobFilterFlags ignoreSet;
00184 int filesystemCount;
00185
00186 const char ** filesystems;
00187
00188 rpmDiskSpaceInfo dsi;
00190
00191 rpmdb rdb;
00192 int dbmode;
00193
00194 hashTable ht;
00196
00197 int * removedPackages;
00198 int numRemovedPackages;
00199 int allocedRemovedPackages;
00201
00202 rpmal addedPackages;
00203 int numAddedPackages;
00205
00206 rpmal erasedPackages;
00207 int numErasedPackages;
00209 #ifndef DYING
00210
00211 rpmal availablePackages;
00212 int numAvailablePackages;
00213 #endif
00214
00215
00216 rpmsx sx;
00218
00219 rpmte relocateElement;
00221
00222 rpmte * order;
00223 int orderCount;
00224 int orderAlloced;
00225 int unorderedSuccessors;
00226 int ntrees;
00227 int maxDepth;
00229
00230 rpmte teInstall;
00231
00232 rpmte teErase;
00234 int selinuxEnabled;
00235 int chrootDone;
00236
00237 const char * rootDir;
00238
00239 const char * currDir;
00240
00241 FD_t scriptFd;
00242 int delta;
00243 int_32 tid;
00245 uint_32 color;
00246 uint_32 prefcolor;
00248 rpmVSFlags vsflags;
00250
00251 const char * fn;
00252 int_32 sigtag;
00253 int_32 sigtype;
00254
00255 const void * sig;
00256 int_32 siglen;
00258
00259 const unsigned char * pkpkt;
00260 size_t pkpktlen;
00261 unsigned char pksignid[8];
00263 struct rpmop_s ops[RPMTS_OP_MAX];
00264
00265
00266 pgpDig dig;
00268
00269 Spec spec;
00271 #ifdef DYING
00272
00273 rpmtsScore score;
00274 #endif
00275
00276 uint_32 arbgoal;
00278
00279 int nrefs;
00280 };
00281 #endif
00282
00283 #ifdef __cplusplus
00284 extern "C" {
00285 #endif
00286
00292 int rpmtsCheck(rpmts ts)
00293
00294 ;
00295 int rpmrbCheck(rpmts ts)
00296
00297 ;
00298
00315 int rpmtsOrder(rpmts ts)
00316
00317 ;
00318 int rpmrbOrder(rpmts ts)
00319
00320 ;
00321
00339 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00340
00341 ;
00342 int rpmrbRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00343
00344 ;
00345
00354 rpmRC rpmtsRollback(rpmts rbts, rpmprobFilterFlags ignoreSet,
00355 int running, rpmte rbte)
00356
00357 ;
00358
00365
00366 rpmts rpmtsUnlink ( rpmts ts,
00367 const char * msg)
00368 ;
00369
00371
00372
00373 rpmts XrpmtsUnlink ( rpmts ts,
00374 const char * msg, const char * fn, unsigned ln)
00375 ;
00376
00377 #define rpmtsUnlink(_ts, _msg) XrpmtsUnlink(_ts, _msg, __FILE__, __LINE__)
00378
00385
00386 rpmts rpmtsLink (rpmts ts, const char * msg)
00387 ;
00388
00390 rpmts XrpmtsLink (rpmts ts,
00391 const char * msg, const char * fn, unsigned ln)
00392 ;
00393 #define rpmtsLink(_ts, _msg) XrpmtsLink(_ts, _msg, __FILE__, __LINE__)
00394
00400 int rpmtsCloseDB(rpmts ts)
00401
00402 ;
00403
00410 int rpmtsOpenDB(rpmts ts, int dbmode)
00411
00412 ;
00413
00421 int rpmtsInitDB(rpmts ts, int dbmode)
00422
00423 ;
00424
00430 int rpmtsRebuildDB(rpmts ts)
00431
00432 ;
00433
00439 int rpmtsVerifyDB(rpmts ts)
00440
00441 ;
00442
00451
00452 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
00453 const void * keyp, size_t keylen)
00454
00455 ;
00456
00462
00463 rpmRC rpmtsFindPubkey(rpmts ts)
00464
00465 ;
00466
00467
00473
00474 int rpmtsCloseSDB(rpmts ts)
00475
00476 ;
00477
00478
00485
00486 int rpmtsOpenSDB(rpmts ts, int dbmode)
00487
00488 ;
00489
00490
00498
00499 int rpmtsSolve(rpmts ts, rpmds ds, const void * data)
00500
00501 ;
00502
00503
00511
00512 int rpmtsAvailable(rpmts ts, const rpmds ds)
00513
00514 ;
00515
00523 int rpmtsSetSolveCallback(rpmts ts,
00524 int (*solve) (rpmts ts, rpmds ds, const void * data),
00525 const void * solveData)
00526 ;
00527
00533 rpmTSType rpmtsType(rpmts ts)
00534 ;
00535
00546 void rpmtsSetType(rpmts ts, rpmTSType type)
00547 ;
00548
00554 uint_32 rpmtsARBGoal(rpmts ts)
00555 ;
00556
00562 void rpmtsSetARBGoal(rpmts ts, uint_32 goal)
00563 ;
00564
00570
00571 rpmps rpmtsProblems(rpmts ts)
00572 ;
00573
00578 void rpmtsCleanDig(rpmts ts)
00579 ;
00580
00585 void rpmtsClean(rpmts ts)
00586
00587 ;
00588
00593 void rpmtsEmpty(rpmts ts)
00594
00595 ;
00596
00602
00603 rpmts rpmtsFree( rpmts ts)
00604
00605 ;
00606
00612 rpmVSFlags rpmtsVSFlags(rpmts ts)
00613 ;
00614
00621 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
00622 ;
00623
00630 int rpmtsUnorderedSuccessors(rpmts ts, int first)
00631 ;
00632
00638
00639 extern const char * rpmtsRootDir(rpmts ts)
00640 ;
00641
00647 void rpmtsSetRootDir(rpmts ts, const char * rootDir)
00648 ;
00649
00655
00656 extern const char * rpmtsCurrDir(rpmts ts)
00657 ;
00658
00664 void rpmtsSetCurrDir(rpmts ts, const char * currDir)
00665 ;
00666
00672
00673 FD_t rpmtsScriptFd(rpmts ts)
00674 ;
00675
00681 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
00682 ;
00683
00689 int rpmtsSELinuxEnabled(rpmts ts)
00690 ;
00691
00697 int rpmtsChrootDone(rpmts ts)
00698 ;
00699
00706 int rpmtsSetChrootDone(rpmts ts, int chrootDone)
00707 ;
00708
00714
00715 rpmsx rpmtsREContext(const rpmts ts)
00716 ;
00717
00724 int rpmtsSetREContext(rpmts ts, rpmsx sx)
00725 ;
00726
00732 int_32 rpmtsGetTid(rpmts ts)
00733 ;
00734
00741 int_32 rpmtsSetTid(rpmts ts, int_32 tid)
00742 ;
00743
00749 int_32 rpmtsSigtag(const rpmts ts)
00750 ;
00751
00757 int_32 rpmtsSigtype(const rpmts ts)
00758 ;
00759
00765
00766 extern const void * rpmtsSig(const rpmts ts)
00767 ;
00768
00774 int_32 rpmtsSiglen(const rpmts ts)
00775 ;
00776
00786 int rpmtsSetSig(rpmts ts,
00787 int_32 sigtag, int_32 sigtype,
00788 const void * sig, int_32 siglen)
00789 ;
00790
00796
00797 pgpDig rpmtsDig(rpmts ts)
00798 ;
00799
00805
00806 pgpDigParams rpmtsSignature(const rpmts ts)
00807 ;
00808
00814
00815
00816 pgpDigParams rpmtsPubkey(const rpmts ts)
00817 ;
00818
00819
00825
00826 rpmdb rpmtsGetRdb(rpmts ts)
00827 ;
00828
00834
00835 rpmPRCO rpmtsPRCO(rpmts ts)
00836 ;
00837
00843 int rpmtsInitDSI(const rpmts ts)
00844
00845 ;
00846
00856 void rpmtsUpdateDSI(const rpmts ts, dev_t dev,
00857 uint_32 fileSize, uint_32 prevSize, uint_32 fixupSize,
00858 fileAction action)
00859 ;
00860
00866 void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
00867 ;
00868
00880
00881 void * rpmtsNotify(rpmts ts, rpmte te,
00882 rpmCallbackType what, unsigned long long amount, unsigned long long total)
00883 ;
00884
00890 int rpmtsNElements(rpmts ts)
00891 ;
00892
00899
00900 rpmte rpmtsElement(rpmts ts, int ix)
00901 ;
00902
00908 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts)
00909 ;
00910
00916 rpmtransFlags rpmtsFlags(rpmts ts)
00917 ;
00918
00925 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags)
00926 ;
00927
00933 rpmdepFlags rpmtsDFlags(rpmts ts)
00934 ;
00935
00942 rpmdepFlags rpmtsSetDFlags(rpmts ts, rpmdepFlags depFlags)
00943 ;
00944
00950
00951 Spec rpmtsSpec(rpmts ts)
00952 ;
00953
00960
00961 Spec rpmtsSetSpec(rpmts ts, Spec spec)
00962 ;
00963
00969
00970 rpmte rpmtsRelocateElement(rpmts ts)
00971 ;
00972
00979
00980 rpmte rpmtsSetRelocateElement(rpmts ts, rpmte relocateElement)
00981 ;
00982
00988 uint_32 rpmtsColor(rpmts ts)
00989 ;
00990
00996 uint_32 rpmtsPrefColor(rpmts ts)
00997 ;
00998
01005 uint_32 rpmtsSetColor(rpmts ts, uint_32 color)
01006 ;
01007
01014
01015 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
01016 ;
01017
01029 int rpmtsSetNotifyCallback(rpmts ts,
01030 rpmCallbackFunction notify,
01031 rpmCallbackData notifyData)
01032 ;
01033
01038
01039 rpmts rpmtsCreate(void)
01040
01041 ;
01042
01056 int rpmtsAddInstallElement(rpmts ts, Header h,
01057 const fnpyKey key, int upgrade,
01058 rpmRelocation relocs)
01059
01060
01061
01062 ;
01063
01071 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
01072
01073 ;
01074
01075 #if !defined(SWIG)
01076 #if defined(_RPMTS_INTERNAL)
01077
01083 static inline
01084 int rpmtsPrint( rpmts ts, FILE * fp)
01085
01086
01087 {
01088 int tid = rpmtsGetTid(ts);
01089 time_t ttid = tid;
01090 rpmtsi tsi;
01091 rpmte te;
01092
01093 if (fp == NULL)
01094 fp = stderr;
01095
01096 fprintf(fp, _("=== Transaction at %-24.24s (0x%08x):\n"), ctime(&ttid),tid);
01097 tsi = rpmtsiInit(ts);
01098 while ((te = rpmtsiNext(tsi, 0)) != NULL)
01099 fprintf(fp, "t%s> %s\n", (rpmteType(te) == TR_ADDED ? "I" : "E"),
01100 rpmteNEVRA(te));
01101 tsi = rpmtsiFree(tsi);
01102 return 0;
01103 }
01104 #endif
01105 #endif
01106
01107 #ifdef __cplusplus
01108 }
01109 #endif
01110
01111
01112 #endif