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