00001
00005 #include "system.h"
00006
00007 #include <rpmio_internal.h>
00008 #include <rpmcli.h>
00009 #include <rpmdb.h>
00010 #include <rpmsq.h>
00011
00012 #include "legacy.h"
00013 #include "misc.h"
00014 #include "header_internal.h"
00015
00016 #include "header-py.h"
00017 #include "rpmal-py.h"
00018 #include "rpmds-py.h"
00019 #include "rpmfd-py.h"
00020 #include "rpmfts-py.h"
00021 #include "rpmfi-py.h"
00022 #include "rpmmi-py.h"
00023 #include "rpmps-py.h"
00024 #include "rpmrc-py.h"
00025 #include "rpmte-py.h"
00026 #include "rpmts-py.h"
00027 #include "spec-py.h"
00028
00029 #include "debug.h"
00030
00031 #ifdef __LCLINT__
00032 #undef PyObject_HEAD
00033 #define PyObject_HEAD int _PyObjectHead
00034 #endif
00035
00040
00043 PyObject * pyrpmError;
00044
00047 static PyObject * expandMacro(PyObject * self, PyObject * args, PyObject * kwds)
00048 {
00049 char * macro;
00050
00051 if (!PyArg_ParseTuple(args, "s", ¯o))
00052 return NULL;
00053
00054 return Py_BuildValue("s", rpmExpand(macro, NULL));
00055 }
00056
00059 static PyObject * archScore(PyObject * self, PyObject * args, PyObject * kwds)
00060 {
00061 char * arch;
00062 int score;
00063 char * kwlist[] = {"arch", NULL};
00064
00065 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &arch))
00066 return NULL;
00067
00068 score = rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch);
00069
00070 return Py_BuildValue("i", score);
00071 }
00072
00075 static PyObject * signalsCaught(PyObject * self, PyObject * check)
00076 {
00077 PyObject *caught, *o;
00078 int llen;
00079 int signum, i;
00080 sigset_t newMask, oldMask;
00081
00082 if (!PyList_Check(check)) {
00083 PyErr_SetString(PyExc_TypeError, "list expected");
00084 return NULL;
00085 }
00086
00087 llen = PyList_Size(check);
00088 caught = PyList_New(0);
00089
00090
00091 (void) sigfillset(&newMask);
00092 (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask);
00093
00094 for (i = 0; i < llen; i++) {
00095 o = PyList_GetItem(check, i);
00096 signum = PyInt_AsLong(o);
00097 if (sigismember(&rpmsqCaught, signum)) {
00098 PyList_Append(caught, o);
00099 }
00100 }
00101 (void) sigprocmask(SIG_SETMASK, &oldMask, NULL);
00102
00103 return caught;
00104 }
00105
00108 static PyObject * checkSignals(PyObject * self, PyObject * args)
00109 {
00110 if (!PyArg_ParseTuple(args, ":checkSignals")) return NULL;
00111 rpmdbCheckSignals();
00112 Py_INCREF(Py_None);
00113 return Py_None;
00114 }
00115
00116
00119 static PyObject * setLogFile (PyObject * self, PyObject * args, PyObject *kwds)
00120 {
00121 PyObject * fop = NULL;
00122 FILE * fp = NULL;
00123 char * kwlist[] = {"fileObject", NULL};
00124
00125 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:logSetFile", kwlist, &fop))
00126 return NULL;
00127
00128 if (fop) {
00129 if (!PyFile_Check(fop)) {
00130 PyErr_SetString(pyrpmError, "requires file object");
00131 return NULL;
00132 }
00133 fp = PyFile_AsFile(fop);
00134 }
00135
00136 (void) rpmlogSetFile(fp);
00137
00138 Py_INCREF(Py_None);
00139 return (PyObject *) Py_None;
00140 }
00141
00144 static PyObject *
00145 setVerbosity (PyObject * self, PyObject * args, PyObject *kwds)
00146 {
00147 int level;
00148 char * kwlist[] = {"level", NULL};
00149
00150 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &level))
00151 return NULL;
00152
00153 rpmSetVerbosity(level);
00154
00155 Py_INCREF(Py_None);
00156 return (PyObject *) Py_None;
00157 }
00158
00161 static PyObject *
00162 setEpochPromote (PyObject * self, PyObject * args, PyObject * kwds)
00163 {
00164 char * kwlist[] = {"promote", NULL};
00165
00166 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist,
00167 &_rpmds_nopromote))
00168 return NULL;
00169
00170 Py_INCREF(Py_None);
00171 return (PyObject *) Py_None;
00172 }
00173
00176 static PyObject * setStats (PyObject * self, PyObject * args, PyObject * kwds)
00177 {
00178 char * kwlist[] = {"stats", NULL};
00179
00180 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &_rpmts_stats))
00181 return NULL;
00182
00183 Py_INCREF(Py_None);
00184 return (PyObject *) Py_None;
00185 }
00186
00189 static PyMethodDef rpmModuleMethods[] = {
00190 { "TransactionSet", (PyCFunction) rpmts_Create, METH_VARARGS|METH_KEYWORDS,
00191 "rpm.TransactionSet([rootDir, [db]]) -> ts\n\
00192 - Create a transaction set.\n" },
00193
00194 #if Py_TPFLAGS_HAVE_ITER
00195 { "newrc", (PyCFunction) rpmrc_Create, METH_VARARGS|METH_KEYWORDS,
00196 NULL },
00197 #endif
00198 { "addMacro", (PyCFunction) rpmrc_AddMacro, METH_VARARGS|METH_KEYWORDS,
00199 NULL },
00200 { "delMacro", (PyCFunction) rpmrc_DelMacro, METH_VARARGS|METH_KEYWORDS,
00201 NULL },
00202 { "expandMacro", (PyCFunction) expandMacro, METH_VARARGS|METH_KEYWORDS,
00203 NULL },
00204
00205 { "archscore", (PyCFunction) archScore, METH_VARARGS|METH_KEYWORDS,
00206 NULL },
00207
00208 { "signalsCaught", (PyCFunction) signalsCaught, METH_O,
00209 NULL },
00210 { "checkSignals", (PyCFunction) checkSignals, METH_VARARGS,
00211 NULL },
00212
00213 { "headerLoad", (PyCFunction) hdrLoad, METH_VARARGS|METH_KEYWORDS,
00214 NULL },
00215 { "rhnLoad", (PyCFunction) rhnLoad, METH_VARARGS|METH_KEYWORDS,
00216 NULL },
00217 { "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS|METH_KEYWORDS,
00218 NULL },
00219 { "readHeaderListFromFD", (PyCFunction) rpmHeaderFromFD, METH_VARARGS|METH_KEYWORDS,
00220 NULL },
00221 { "readHeaderListFromFile", (PyCFunction) rpmHeaderFromFile, METH_VARARGS|METH_KEYWORDS,
00222 NULL },
00223 { "readHeaderFromFD", (PyCFunction) rpmSingleHeaderFromFD, METH_VARARGS|METH_KEYWORDS,
00224 NULL },
00225
00226 { "setLogFile", (PyCFunction) setLogFile, METH_VARARGS|METH_KEYWORDS,
00227 NULL },
00228
00229 { "versionCompare", (PyCFunction) versionCompare, METH_VARARGS|METH_KEYWORDS,
00230 NULL },
00231 { "labelCompare", (PyCFunction) labelCompare, METH_VARARGS|METH_KEYWORDS,
00232 NULL },
00233 { "setVerbosity", (PyCFunction) setVerbosity, METH_VARARGS|METH_KEYWORDS,
00234 NULL },
00235 { "setEpochPromote", (PyCFunction) setEpochPromote, METH_VARARGS|METH_KEYWORDS,
00236 NULL },
00237 { "setStats", (PyCFunction) setStats, METH_VARARGS|METH_KEYWORDS,
00238 NULL },
00239
00240 { "dsSingle", (PyCFunction) rpmds_Single, METH_VARARGS|METH_KEYWORDS,
00241 "rpm.dsSingle(TagN, N, [EVR, [Flags]] -> ds\n\
00242 - Create a single element dependency set.\n" },
00243 { NULL }
00244 } ;
00245
00246
00247
00248
00249 static void rpm_exithook(void)
00250 {
00251 rpmdbCheckTerminate(1);
00252 }
00253
00256 static char rpm__doc__[] =
00257 "";
00258
00259 void init_rpm(void);
00262 void init_rpm(void)
00263 {
00264 PyObject * d, *o, * tag = NULL, * dict;
00265 int i;
00266 const struct headerSprintfExtension_s * extensions = rpmHeaderFormats;
00267 struct headerSprintfExtension_s * ext;
00268 PyObject * m;
00269
00270 #if Py_TPFLAGS_HAVE_ITER
00271 if (PyType_Ready(&hdr_Type) < 0) return;
00272 if (PyType_Ready(&rpmal_Type) < 0) return;
00273 if (PyType_Ready(&rpmds_Type) < 0) return;
00274 if (PyType_Ready(&rpmfd_Type) < 0) return;
00275 if (PyType_Ready(&rpmfts_Type) < 0) return;
00276 if (PyType_Ready(&rpmfi_Type) < 0) return;
00277 if (PyType_Ready(&rpmmi_Type) < 0) return;
00278 if (PyType_Ready(&rpmps_Type) < 0) return;
00279
00280 rpmrc_Type.tp_base = &PyDict_Type;
00281 if (PyType_Ready(&rpmrc_Type) < 0) return;
00282
00283 if (PyType_Ready(&rpmte_Type) < 0) return;
00284 if (PyType_Ready(&rpmts_Type) < 0) return;
00285 if (PyType_Ready(&spec_Type) < 0) return;
00286 #endif
00287
00288 m = Py_InitModule3("_rpm", rpmModuleMethods, rpm__doc__);
00289 if (m == NULL)
00290 return;
00291
00292
00293
00294
00295
00296 if (Py_AtExit(rpm_exithook) == -1)
00297 return;
00298
00299 rpmReadConfigFiles(NULL, NULL);
00300
00301 d = PyModule_GetDict(m);
00302
00303 #ifdef HACK
00304 pyrpmError = PyString_FromString("_rpm.error");
00305 PyDict_SetItemString(d, "error", pyrpmError);
00306 Py_DECREF(pyrpmError);
00307 #else
00308 pyrpmError = PyErr_NewException("_rpm.error", NULL, NULL);
00309 if (pyrpmError != NULL)
00310 PyDict_SetItemString(d, "error", pyrpmError);
00311 #endif
00312
00313 #if Py_TPFLAGS_HAVE_ITER
00314 Py_INCREF(&hdr_Type);
00315 PyModule_AddObject(m, "hdr", (PyObject *) &hdr_Type);
00316
00317 Py_INCREF(&rpmal_Type);
00318 PyModule_AddObject(m, "al", (PyObject *) &rpmal_Type);
00319
00320 Py_INCREF(&rpmds_Type);
00321 PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type);
00322
00323 Py_INCREF(&rpmfd_Type);
00324 PyModule_AddObject(m, "fd", (PyObject *) &rpmfd_Type);
00325
00326 Py_INCREF(&rpmfts_Type);
00327 PyModule_AddObject(m, "fts", (PyObject *) &rpmfts_Type);
00328
00329 Py_INCREF(&rpmfi_Type);
00330 PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type);
00331
00332 Py_INCREF(&rpmmi_Type);
00333 PyModule_AddObject(m, "mi", (PyObject *) &rpmmi_Type);
00334
00335 Py_INCREF(&rpmps_Type);
00336 PyModule_AddObject(m, "ps", (PyObject *) &rpmps_Type);
00337
00338 Py_INCREF(&rpmrc_Type);
00339 PyModule_AddObject(m, "rc", (PyObject *) &rpmrc_Type);
00340
00341 Py_INCREF(&rpmte_Type);
00342 PyModule_AddObject(m, "te", (PyObject *) &rpmte_Type);
00343
00344 Py_INCREF(&rpmts_Type);
00345 PyModule_AddObject(m, "ts", (PyObject *) &rpmts_Type);
00346
00347 Py_INCREF(&spec_Type);
00348 PyModule_AddObject(m, "spec", (PyObject *) &spec_Type);
00349 #else
00350 hdr_Type.ob_type = &PyType_Type;
00351 rpmal_Type.ob_type = &PyType_Type;
00352 rpmds_Type.ob_type = &PyType_Type;
00353 rpmfd_Type.ob_type = &PyType_Type;
00354 rpmfts_Type.ob_type = &PyType_Type;
00355 rpmfi_Type.ob_type = &PyType_Type;
00356 rpmmi_Type.ob_type = &PyType_Type;
00357 rpmps_Type.ob_type = &PyType_Type;
00358 rpmte_Type.ob_type = &PyType_Type;
00359 rpmts_Type.ob_type = &PyType_Type;
00360 spec_Type.ob_type = &PyType_Type;
00361 #endif
00362
00363 dict = PyDict_New();
00364
00365 for (i = 0; i < rpmTagTableSize; i++) {
00366 tag = PyInt_FromLong(rpmTagTable[i].val);
00367 PyDict_SetItemString(d, (char *) rpmTagTable[i].name, tag);
00368 Py_DECREF(tag);
00369 PyDict_SetItem(dict, tag, o=PyString_FromString(rpmTagTable[i].name + 7));
00370 Py_DECREF(o);
00371 }
00372
00373 while (extensions->name) {
00374 if (extensions->type == HEADER_EXT_TAG) {
00375 ext = extensions;
00376 PyDict_SetItemString(d, (char *) extensions->name, o=PyCObject_FromVoidPtr(ext, NULL));
00377 Py_DECREF(o);
00378 PyDict_SetItem(dict, tag, o=PyString_FromString(ext->name + 7));
00379 Py_DECREF(o);
00380 }
00381 extensions++;
00382 }
00383
00384 PyDict_SetItemString(d, "tagnames", dict);
00385 Py_DECREF(dict);
00386
00387
00388 #define REGISTER_ENUM(val) \
00389 PyDict_SetItemString(d, #val, o=PyInt_FromLong( val )); \
00390 Py_DECREF(o);
00391
00392 REGISTER_ENUM(RPMFILE_STATE_NORMAL);
00393 REGISTER_ENUM(RPMFILE_STATE_REPLACED);
00394 REGISTER_ENUM(RPMFILE_STATE_NOTINSTALLED);
00395 REGISTER_ENUM(RPMFILE_STATE_NETSHARED);
00396 REGISTER_ENUM(RPMFILE_STATE_WRONGCOLOR);
00397
00398 REGISTER_ENUM(RPMFILE_CONFIG);
00399 REGISTER_ENUM(RPMFILE_DOC);
00400 REGISTER_ENUM(RPMFILE_ICON);
00401 REGISTER_ENUM(RPMFILE_MISSINGOK);
00402 REGISTER_ENUM(RPMFILE_NOREPLACE);
00403 REGISTER_ENUM(RPMFILE_GHOST);
00404 REGISTER_ENUM(RPMFILE_LICENSE);
00405 REGISTER_ENUM(RPMFILE_README);
00406 REGISTER_ENUM(RPMFILE_EXCLUDE);
00407 REGISTER_ENUM(RPMFILE_UNPATCHED);
00408 REGISTER_ENUM(RPMFILE_PUBKEY);
00409
00410 REGISTER_ENUM(RPMDEP_SENSE_REQUIRES);
00411 REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS);
00412
00413 REGISTER_ENUM(RPMSENSE_SERIAL);
00414 REGISTER_ENUM(RPMSENSE_LESS);
00415 REGISTER_ENUM(RPMSENSE_GREATER);
00416 REGISTER_ENUM(RPMSENSE_EQUAL);
00417 REGISTER_ENUM(RPMSENSE_PREREQ);
00418 REGISTER_ENUM(RPMSENSE_INTERP);
00419 REGISTER_ENUM(RPMSENSE_SCRIPT_PRE);
00420 REGISTER_ENUM(RPMSENSE_SCRIPT_POST);
00421 REGISTER_ENUM(RPMSENSE_SCRIPT_PREUN);
00422 REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN);
00423 REGISTER_ENUM(RPMSENSE_SCRIPT_VERIFY);
00424 REGISTER_ENUM(RPMSENSE_FIND_REQUIRES);
00425 REGISTER_ENUM(RPMSENSE_FIND_PROVIDES);
00426 REGISTER_ENUM(RPMSENSE_TRIGGERIN);
00427 REGISTER_ENUM(RPMSENSE_TRIGGERUN);
00428 REGISTER_ENUM(RPMSENSE_TRIGGERPOSTUN);
00429 REGISTER_ENUM(RPMSENSE_SCRIPT_PREP);
00430 REGISTER_ENUM(RPMSENSE_SCRIPT_BUILD);
00431 REGISTER_ENUM(RPMSENSE_SCRIPT_INSTALL);
00432 REGISTER_ENUM(RPMSENSE_SCRIPT_CLEAN);
00433 REGISTER_ENUM(RPMSENSE_RPMLIB);
00434 REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
00435 REGISTER_ENUM(RPMSENSE_KEYRING);
00436 REGISTER_ENUM(RPMSENSE_PATCHES);
00437 REGISTER_ENUM(RPMSENSE_CONFIG);
00438
00439 REGISTER_ENUM(RPMTRANS_FLAG_TEST);
00440 REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS);
00441 REGISTER_ENUM(RPMTRANS_FLAG_NOSCRIPTS);
00442 REGISTER_ENUM(RPMTRANS_FLAG_JUSTDB);
00443 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS);
00444 REGISTER_ENUM(RPMTRANS_FLAG_NODOCS);
00445 REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES);
00446 REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE);
00447 REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE);
00448 REGISTER_ENUM(RPMTRANS_FLAG_REVERSE);
00449 REGISTER_ENUM(RPMTRANS_FLAG_NOPRE);
00450 REGISTER_ENUM(RPMTRANS_FLAG_NOPOST);
00451 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPREIN);
00452 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERIN);
00453 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERUN);
00454 REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN);
00455 REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN);
00456 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN);
00457 REGISTER_ENUM(RPMTRANS_FLAG_ANACONDA);
00458 REGISTER_ENUM(RPMTRANS_FLAG_NOMD5);
00459 REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST);
00460 REGISTER_ENUM(RPMTRANS_FLAG_ADDINDEPS);
00461 REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS);
00462
00463 REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS);
00464 REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH);
00465 REGISTER_ENUM(RPMPROB_FILTER_REPLACEPKG);
00466 REGISTER_ENUM(RPMPROB_FILTER_FORCERELOCATE);
00467 REGISTER_ENUM(RPMPROB_FILTER_REPLACENEWFILES);
00468 REGISTER_ENUM(RPMPROB_FILTER_REPLACEOLDFILES);
00469 REGISTER_ENUM(RPMPROB_FILTER_OLDPACKAGE);
00470 REGISTER_ENUM(RPMPROB_FILTER_DISKSPACE);
00471 REGISTER_ENUM(RPMPROB_FILTER_DISKNODES);
00472
00473 REGISTER_ENUM(RPMCALLBACK_UNKNOWN);
00474 REGISTER_ENUM(RPMCALLBACK_INST_PROGRESS);
00475 REGISTER_ENUM(RPMCALLBACK_INST_START);
00476 REGISTER_ENUM(RPMCALLBACK_INST_OPEN_FILE);
00477 REGISTER_ENUM(RPMCALLBACK_INST_CLOSE_FILE);
00478 REGISTER_ENUM(RPMCALLBACK_TRANS_PROGRESS);
00479 REGISTER_ENUM(RPMCALLBACK_TRANS_START);
00480 REGISTER_ENUM(RPMCALLBACK_TRANS_STOP);
00481 REGISTER_ENUM(RPMCALLBACK_UNINST_PROGRESS);
00482 REGISTER_ENUM(RPMCALLBACK_UNINST_START);
00483 REGISTER_ENUM(RPMCALLBACK_UNINST_STOP);
00484 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_PROGRESS);
00485 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_START);
00486 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_STOP);
00487 REGISTER_ENUM(RPMCALLBACK_UNPACK_ERROR);
00488 REGISTER_ENUM(RPMCALLBACK_CPIO_ERROR);
00489
00490 REGISTER_ENUM(RPMPROB_BADARCH);
00491 REGISTER_ENUM(RPMPROB_BADOS);
00492 REGISTER_ENUM(RPMPROB_PKG_INSTALLED);
00493 REGISTER_ENUM(RPMPROB_BADRELOCATE);
00494 REGISTER_ENUM(RPMPROB_REQUIRES);
00495 REGISTER_ENUM(RPMPROB_CONFLICT);
00496 REGISTER_ENUM(RPMPROB_NEW_FILE_CONFLICT);
00497 REGISTER_ENUM(RPMPROB_FILE_CONFLICT);
00498 REGISTER_ENUM(RPMPROB_OLDPACKAGE);
00499 REGISTER_ENUM(RPMPROB_DISKSPACE);
00500 REGISTER_ENUM(RPMPROB_DISKNODES);
00501 REGISTER_ENUM(RPMPROB_BADPRETRANS);
00502
00503 REGISTER_ENUM(VERIFY_DIGEST);
00504 REGISTER_ENUM(VERIFY_SIGNATURE);
00505
00506 REGISTER_ENUM(RPMLOG_EMERG);
00507 REGISTER_ENUM(RPMLOG_ALERT);
00508 REGISTER_ENUM(RPMLOG_CRIT);
00509 REGISTER_ENUM(RPMLOG_ERR);
00510 REGISTER_ENUM(RPMLOG_WARNING);
00511 REGISTER_ENUM(RPMLOG_NOTICE);
00512 REGISTER_ENUM(RPMLOG_INFO);
00513 REGISTER_ENUM(RPMLOG_DEBUG);
00514
00515 REGISTER_ENUM(RPMMIRE_DEFAULT);
00516 REGISTER_ENUM(RPMMIRE_STRCMP);
00517 REGISTER_ENUM(RPMMIRE_REGEX);
00518 REGISTER_ENUM(RPMMIRE_GLOB);
00519
00520 REGISTER_ENUM(RPMVSF_DEFAULT);
00521 REGISTER_ENUM(RPMVSF_NOHDRCHK);
00522 REGISTER_ENUM(RPMVSF_NEEDPAYLOAD);
00523 REGISTER_ENUM(RPMVSF_NOSHA1HEADER);
00524 REGISTER_ENUM(RPMVSF_NOMD5HEADER);
00525 REGISTER_ENUM(RPMVSF_NODSAHEADER);
00526 REGISTER_ENUM(RPMVSF_NORSAHEADER);
00527 REGISTER_ENUM(RPMVSF_NOSHA1);
00528 REGISTER_ENUM(RPMVSF_NOMD5);
00529 REGISTER_ENUM(RPMVSF_NODSA);
00530 REGISTER_ENUM(RPMVSF_NORSA);
00531 REGISTER_ENUM(_RPMVSF_NODIGESTS);
00532 REGISTER_ENUM(_RPMVSF_NOSIGNATURES);
00533 REGISTER_ENUM(_RPMVSF_NOHEADER);
00534 REGISTER_ENUM(_RPMVSF_NOPAYLOAD);
00535
00536 REGISTER_ENUM(TR_ADDED);
00537 REGISTER_ENUM(TR_REMOVED);
00538
00539 REGISTER_ENUM(RPMDBI_PACKAGES);
00540
00541 REGISTER_ENUM(RPMAL_NOMATCH);
00542 }
00543