48 if (*epoch ==
'\0') epoch =
"0";
64 if (vp) *vp = version;
65 if (rp) *rp = release;
74 else if (str1 && !str2)
76 else if (!str1 && str2)
86 const char *aE, *aV, *aR;
88 const char *bE, *bV, *bR;
118 rc = (rc < 0 ? -1 : (rc == 0 ? 1 : 0));
130 return Py_BuildValue(
"i", rc);
138 return (PyObject *)s;
146 PyObject * result = NULL;
163 if (EVR != NULL) EVR =
xstrdup(EVR);
187 if (result == NULL) {
200 char * kwlist[] = {
"debugLevel", NULL};
202 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &
_rpmds_debug))
213 DEPRECATED_METHOD(
"use len(ds) instead");
222 return Py_BuildValue(
"i",
rpmdsIx(s->
ds));
238 return Py_BuildValue(
"s",
rpmdsN(s->
ds));
262 return Py_BuildValue(
"i", (
int)
rpmdsBT(s->
ds));
302 char * kwlist[] = {
"noPromote", NULL};
304 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i:SetNoPromote", kwlist,
319 char * kwlist[] = {
"location",
"returnCode", NULL};
321 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"si:Notify", kwlist,
351 PyObject * to = NULL;
353 char * kwlist[] = {
"element", NULL};
355 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O:Find", kwlist, &to))
372 PyObject * to = NULL;
374 char * kwlist[] = {
"element", NULL};
376 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O:Merge", kwlist, &to))
389 PyObject * to = NULL;
391 char * kwlist[] = {
"element", NULL};
393 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O:Merge", kwlist, &to))
403 rpmds_Compare(
rpmdsObject * s, PyObject * args, PyObject * kwds)
406 PyObject * to = NULL;
408 char * kwlist[] = {
"other", NULL};
410 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O:Compare", kwlist, &to))
420 return Py_BuildValue(
"i", rpmdsInstance(s->
ds));
428 if (!PyArg_ParseTuple(args,
":Problem"))
523 {
"Debug", (PyCFunction)
rpmds_Debug, METH_VARARGS|METH_KEYWORDS,
526 "ds.Count -> Count - Return no. of elements.\n" },
527 {
"Ix", (PyCFunction)
rpmds_Ix, METH_NOARGS,
528 "ds.Ix -> Ix - Return current element index.\n" },
530 "ds.DNEVR -> DNEVR - Return current DNEVR.\n" },
531 {
"N", (PyCFunction)
rpmds_N, METH_NOARGS,
532 "ds.N -> N - Return current N.\n" },
533 {
"EVR", (PyCFunction)
rpmds_EVR, METH_NOARGS,
534 "ds.EVR -> EVR - Return current EVR.\n" },
536 "ds.Flags -> Flags - Return current Flags.\n" },
537 {
"BT", (PyCFunction)
rpmds_BT, METH_NOARGS,
538 "ds.BT -> BT - Return build time.\n" },
539 {
"TagN", (PyCFunction)
rpmds_TagN, METH_NOARGS,
540 "ds.TagN -> TagN - Return current TagN.\n" },
542 "ds.Color -> Color - Return current Color.\n" },
543 {
"Refs", (PyCFunction)
rpmds_Refs, METH_NOARGS,
544 "ds.Refs -> Refs - Return current Refs.\n" },
546 "ds.Result -> Result - Return current Result.\n" },
547 {
"next", (PyCFunction)
rpmds_Next, METH_NOARGS,
548 "ds.next() -> (N, EVR, Flags)\n\
549 - Retrieve next dependency triple.\n" },
552 {
"Notify", (PyCFunction)
rpmds_Notify, METH_VARARGS|METH_KEYWORDS,
554 {
"Sort", (PyCFunction)
rpmds_Sort, METH_NOARGS,
555 "ds.Sort() -> None\n\
556 - Sort the (N,EVR,Flags) elements in ds\n" },
557 {
"Find", (PyCFunction)
rpmds_Find, METH_VARARGS|METH_KEYWORDS,
558 "ds.Find(element) -> matching ds index (-1 on failure)\n\
559 - Check for an exactly matching element in ds.\n\
560 The current index in ds is positioned at matching member upon success.\n" },
561 {
"Merge", (PyCFunction)
rpmds_Merge, METH_VARARGS|METH_KEYWORDS,
562 "ds.Merge(elements) -> 0 on success\n\
563 - Merge elements into ds, maintaining (N,EVR,Flags) sort order.\n" },
564 {
"Search", (PyCFunction)
rpmds_Search, METH_VARARGS|METH_KEYWORDS,
565 "ds.Search(element) -> matching ds index (-1 on failure)\n\
566 - Check that element dependency range overlaps some member of ds.\n\
567 The current index in ds is positioned at overlapping member upon success.\n" },
568 {
"Rpmlib", (PyCFunction)
rpmds_Rpmlib, METH_NOARGS|METH_STATIC,
569 "ds.Rpmlib -> nds - Return internal rpmlib dependency set.\n"},
571 {
"Compare", (PyCFunction)rpmds_Compare, METH_VARARGS|METH_KEYWORDS,
573 {
"Instance", (PyCFunction)rpmds_Instance, METH_NOARGS,
575 {
"Problem", (PyCFunction)rpmds_Problem, METH_NOARGS,
578 {
"Cpuinfo", (PyCFunction)
rpmds_Cpuinfo, METH_NOARGS|METH_STATIC,
579 "ds.Cpuinfo -> nds - Return /proc/cpuinfo dependency set.\n"},
580 {
"Sysinfo", (PyCFunction)
rpmds_Sysinfo, METH_NOARGS|METH_STATIC,
581 "ds.Sysinfo -> nds - Return /etc/rpm/sysinfo dependency set.\n"},
582 {
"Getconf", (PyCFunction)
rpmds_Getconf, METH_NOARGS|METH_STATIC,
583 "ds.Getconf -> nds - Return getconf(1) dependency set.\n"},
584 {
"Ldconfig", (PyCFunction)
rpmds_Ldconfig, METH_NOARGS|METH_STATIC,
585 "ds.Ldconfig -> nds - Return /etc/ld.so.cache dependency set.\n"},
586 {
"Uname", (PyCFunction)
rpmds_Uname, METH_NOARGS|METH_STATIC,
587 "ds.Uname -> nds - Return uname(2) dependency set.\n"},
633 if (!PyInt_Check(key)) {
634 PyErr_SetString(PyExc_TypeError,
"integer expected");
638 ix = (int) PyInt_AsLong(key);
658 PyObject * to = NULL;
661 char * kwlist[] = {
"header",
"tag",
"flags", NULL};
664 fprintf(stderr,
"*** rpmds_init(%p,%p,%p)\n", s, args, kwds);
666 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O!|Oi:rpmds_init", kwlist,
672 if (tagN == (
rpmTag)0xffffffff) {
673 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
689 fprintf(stderr,
"%p -- ds %p\n", s, s->
ds);
693 PyObject_Del((PyObject *)s);
701 PyObject * s = PyType_GenericAlloc(subtype, nitems);
704 fprintf(stderr,
"*** rpmds_alloc(%p,%d) ret %p\n", subtype, nitems, s);
711 static PyObject *
rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
724 fprintf(stderr,
"%p ++ ds %p\n", s, s->
ds);
726 return (PyObject *)s;
737 PyVarObject_HEAD_INIT(&PyType_Type, 0)
754 PyObject_GenericGetAttr,
755 PyObject_GenericSetAttr,
758 Py_TPFLAGS_HAVE_RICHCOMPARE,
760 #if Py_TPFLAGS_HAVE_ITER
806 PyObject * to = NULL;
809 const char * EVR = NULL;
811 char * kwlist[] = {
"to",
"name",
"evr",
"flags", NULL};
813 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"Os|si:Single", kwlist,
814 &to, &N, &EVR, &Flags))
819 if (tagN == (
rpmTag)0xffffffff) {
820 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
825 if (EVR != NULL) EVR =
xstrdup(EVR);
833 PyObject * to = NULL;
836 char * kwlist[] = {
"to",
"flags", NULL};
838 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|Oi:dsFromHeader", kwlist,
844 if (tagN == (
rpmTag)0xffffffff) {
845 PyErr_SetString(PyExc_KeyError,
"unknown header tag");
rpmds rpmdsSingle(rpmTag tagN, const char *N, const char *EVR, evrFlags Flags)
Create, load and initialize a dependency set of size 1.
evrFlags rpmdsFlags(const rpmds ds)
Return current dependency flags.
static void rpmds_ParseEVR(char *evr, const char **ep, const char **vp, const char **rp)
Split EVR into epoch, version, and release components.
rpmds rpmdsInit(rpmds ds)
Initialize dependency set iterator.
static PyObject * rpmds_Notify(rpmdsObject *s, PyObject *args, PyObject *kwds)
static int compare_values(const char *str1, const char *str2)
rpmPRCO rpmdsFreePRCO(rpmPRCO PRCO)
Free dependency set(s) container.
static int rpmds_length(rpmdsObject *s)
char * xstrdup(const char *str)
static PyObject * rpmds_Next(rpmdsObject *s)
rpmdsObject * hdr_dsOfHeader(PyObject *s)
static int rpmds_init(rpmdsObject *s, PyObject *args, PyObject *kwds)
int rpmdsGetconf(rpmds *dsp, const char *path)
Load getconf provides into a dependency set.
int(* rpmvercmp)(const char *a, const char *b)
Segmented string compare vector.
static int rpmds_print(rpmdsObject *s, FILE *fp, int flags)
static int rpmds_compare(rpmdsObject *a, rpmdsObject *b)
static PyObject * rpmds_N(rpmdsObject *s)
static PyObject * rpmds_Count(rpmdsObject *s)
rpmTag rpmdsTagN(const rpmds ds)
Return current dependency type.
static PyObject * rpmds_Sysinfo(rpmdsObject *s)
static void rpmds_dealloc(rpmdsObject *s)
static PyObject * rpmds_Refs(rpmdsObject *s)
const char * rpmdsDNEVR(const rpmds ds)
Return current formatted dependency string.
static PyObject * rpmds_Find(rpmdsObject *s, PyObject *args, PyObject *kwds)
struct rpmds_s * rpmds
Dependency tag sets from a header, so that a header can be discarded early.
struct rpmPRCO_s * rpmPRCO
Container for commonly extracted dependency set(s).
rpmds rpmdsFree(rpmds ds)
Destroy a dependency set.
static PyObject * rpmds_iter(rpmdsObject *s)
rpmPRCO rpmdsNewPRCO(Header h)
Create dependency set(s) container.
rpmint32_t rpmdsResult(const rpmds ds)
Return current dependency comparison result.
int rpmdsSysinfo(rpmPRCO PRCO, const char *fn)
Load sysinfo dependencies into a dependency set.
time_t rpmdsBT(const rpmds ds)
Return dependency build time.
int rpmdsRpmlib(rpmds *dsp, void *tblp)
Load rpmlib provides into a dependency set.
struct rpmdsObject_s rpmdsObject
int rpmdsCompare(const rpmds A, const rpmds B)
Compare two versioned dependency ranges, looking for overlap.
rpmdsObject * hdr_dsFromHeader(PyObject *s, PyObject *args, PyObject *kwds)
static PyObject * rpmds_Getconf(rpmdsObject *s)
int rpmdsFind(rpmds ds, const rpmds ods)
Find a dependency set element using binary search.
enum evrFlags_e rpmsenseFlags
static PyMappingMethods rpmds_as_mapping
static PyObject * rpmds_iternext(rpmdsObject *s)
void rpmdsNotify(rpmds ds, const char *where, int rc)
Notify of results of dependency match.
const char * rpmdsEVR(const rpmds ds)
Return current dependency epoch-version-release.
int rpmdsNext(rpmds ds)
Return next dependency set iterator index.
rpmds dsFromDs(rpmdsObject *s)
static void rpmds_free(rpmdsObject *s)
static PyObject * rpmds_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
rpmdsObject * rpmds_Wrap(rpmds ds)
static PyObject * rpmds_richcompare(rpmdsObject *a, rpmdsObject *b, int op)
static struct PyMethodDef rpmds_methods[]
const char const bson const bson * op
int rpmdsCount(const rpmds ds)
Return dependency set count.
static PyObject * rpmds_alloc(PyTypeObject *subtype, int nitems)
static PyObject * rpmds_Rpmlib(rpmdsObject *s)
const char * rpmdsN(const rpmds ds)
Return current dependency name.
const char const bson int mongo_write_concern int flags
static PyObject * rpmds_Ix(rpmdsObject *s)
rpmdsObject * rpmds_Single(PyObject *s, PyObject *args, PyObject *kwds)
static PyObject * rpmds_SetNoPromote(rpmdsObject *s, PyObject *args, PyObject *kwds)
static int xisdigit(int c)
static PyObject * rpmds_Result(rpmdsObject *s)
const char const bson * key
rpmds rpmdsLink(rpmds ds, const char *msg)
Reference a dependency set instance.
static PyObject * rpmds_Merge(rpmdsObject *s, PyObject *args, PyObject *kwds)
static PyObject * rpmds_BT(rpmdsObject *s)
int rpmdsMerge(rpmds *dsp, rpmds ods)
Merge a dependency set maintaining (N,EVR,Flags) sorted order.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
static PyObject * rpmds_Cpuinfo(rpmdsObject *s)
int rpmdsCpuinfo(rpmds *dsp, const char *fn)
Load /proc/cpuinfo provides into a dependency set.
int rpmdsLdconfig(rpmPRCO PRCO, const char *fn)
Load /etc/ld.so.cache provides into a dependency set.
int rpmdsUname(rpmds *dsp, const struct utsname *un)
static PyObject * rpmds_Flags(rpmdsObject *s)
static PyObject * rpmds_Sort(rpmdsObject *s)
int rpmdsSearch(rpmds ds, rpmds ods)
Search a sorted dependency set for an element that overlaps.
static PyObject * rpmds_EVR(rpmdsObject *s)
int rpmdsIx(const rpmds ds)
Return dependency set index.
rpmuint32_t rpmdsColor(const rpmds ds)
Return current dependency color.
static PyObject * rpmds_DNEVR(rpmdsObject *s)
rpmuint32_t rpmdsRefs(const rpmds ds)
Return current dependency file refs.
static PyObject * rpmds_Search(rpmdsObject *s, PyObject *args, PyObject *kwds)
rpmds rpmdsNew(Header h, rpmTag tagN, int flags)
Create and load a dependency set.
int rpmdsSetNoPromote(rpmds ds, int nopromote)
Set "Don't promote Epoch:" flag.
static PyObject * rpmds_Ldconfig(rpmdsObject *s)
int rpmdsSetIx(rpmds ds, int ix)
Set dependency set index.
static PyObject * rpmds_Debug(rpmdsObject *s, PyObject *args, PyObject *kwds)
static PyObject * rpmds_Color(rpmdsObject *s)
rpmds rpmdsThis(Header h, rpmTag tagN, evrFlags Flags)
Create, load and initialize a dependency for this header.
static PyObject * rpmds_subscript(rpmdsObject *s, PyObject *key)
static PyObject * rpmds_Uname(rpmdsObject *s)
static PyObject * rpmds_TagN(rpmdsObject *s)
rpmds rpmdsFromPRCO(rpmPRCO PRCO, rpmTag tagN)
Retrieve a dependency set from container.