[Yum] Get rid of the header download

Nathan Straz nstraz at redhat.com
Sun Oct 29 16:28:35 UTC 2006


I started looking at this item on the YumIdeas page.  A yum upgrade from
FC5 to FC6 pushed me over the edge. :)

I think the critical piece to get this working is to fill out the RPM
Python interface.  Currently you cannot create new hdr objects from
python.  The only factory interfaces I found depend on reading a binary
blog, which is exactly what we want to avoid.

I started trying to get "h = rpm.hdr()" working and ran into a big
problem.  I created a tp_new function for hdr which allowed me to create
new hdr objects in Python.  Then I allocated the Header structure in
hdrObject and all hell broke loose.  On my system calling headerNew()
totally clobbers the hdrObject.

Can someone else try this?

1. Download rpm source
2. apply the following patch to rpm/python/header-py.c
3. build and install the python directory.
4. run these commands in python:
  import rpm
  h = rpm.hdr()
  dir(h)

I've been setting a breakpoint in "hdr_new" and running it under gdb.

Nate


[nate at localhost python]$ diff -u header-py.c.pyapi header-py.c
--- header-py.c.pyapi   2006-10-29 08:03:04.000000000 -0600
+++ header-py.c 2006-10-29 09:44:03.000000000 -0600
@@ -420,6 +420,24 @@
     return PyObject_GenericSetAttr(o, n, v);
 }
 
+/** \ingroup py_c
+ */
+static void hdr_new(PyTypeObject *subtype, PyObject *args, PyObject
*kwds)
+{
+    hdrObject *self;
+    Header h;
+    self = (hdrObject *)subtype->tp_alloc(subtype, 0);
+    if (self != NULL) {
+       h = headerNew();
+        if (h == NULL) {
+           Py_DECREF(self);
+           return NULL;
+       }
+        self->h = h;
+    }
+
+    return (PyObject *)self;
+}
 
 /** \ingroup py_c
  */
@@ -648,7 +666,7 @@
 /**
  */
 static char hdr_doc[] =
-"";
+"RPM Header Class";
 
 /** \ingroup py_c
  */
@@ -693,7 +711,7 @@
        0,                              /* tp_dictoffset */
        0,                              /* tp_init */
        0,                              /* tp_alloc */
-       0,                              /* tp_new */
+       hdr_new,                        /* tp_new */
        0,                              /* tp_free */
        0,                              /* tp_is_gc */
 #endif





More information about the Yum mailing list