[Rpm-maint] PATCH: Python: allow access to packages & headers from spec object
Daniel P. Berrange
berrange at redhat.com
Thu Sep 18 15:23:47 UTC 2008
I'm trying todo some automated processing & analysis of RPM specfiles
and have found the python binding is lacking a number of key features
- The 'spec' object allows access to the lists of sources, but doesn't
expose the RPMBUILD_ISXXXX constants
- The 'spec' object does not provide access to the 'packages' objects
so you can't query most metadata about the spec.
- None of the RPMTAG_XXX constants are defined, which makes using the
'header' object unpleasant.
This patch addresses all these missing pieces. I'm not entirely clear on
whether the reference counting / object lifecycle stuff is correct here
though. It seems like there's the possibility of python garbage collecting
the 'spec' object while there's still a live 'pkg' and/or 'header' object
live.
Makefile.am | 1
pkg-py.c | 113 +++++++++++++++++++++++++++
pkg-py.h | 26 ++++++
rpmmodule.c | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
spec-py.c | 30 ++++++-
5 files changed, 420 insertions(+), 1 deletion(-)
Daniel
diff -rupN rpm-4.5.90.git8461.orig/python/Makefile.am rpm-4.5.90.git8461.new/python/Makefile.am
--- rpm-4.5.90.git8461.orig/python/Makefile.am 2008-06-26 05:26:01.000000000 -0400
+++ rpm-4.5.90.git8461.new/python/Makefile.am 2008-09-18 07:24:51.000000000 -0400
@@ -36,5 +36,6 @@ _rpmmodule_la_SOURCES = rpmmodule.c syst
rpmmacro-py.c rpmmacro-py.h \
rpmte-py.c rpmte-py.h \
rpmts-py.c rpmts-py.h \
+ pkg-py.c pkg-py.h \
spec-py.c spec-py.h
endif
diff -rupN rpm-4.5.90.git8461.orig/python/pkg-py.c rpm-4.5.90.git8461.new/python/pkg-py.c
--- rpm-4.5.90.git8461.orig/python/pkg-py.c 1969-12-31 19:00:00.000000000 -0500
+++ rpm-4.5.90.git8461.new/python/pkg-py.c 2008-09-18 07:24:45.000000000 -0400
@@ -0,0 +1,113 @@
+/** \ingroup py_c
+ * \file python/pkg-py.c
+ */
+
+#include "system.h"
+
+#include "pkg-py.h"
+#include "header-py.h"
+
+/** \ingroup python
+ * \name Class: Rpmpkg
+ * \class Rpmpkg
+ *
+ */
+
+
+static void
+pkg_dealloc(pkgObject * s)
+{
+ PyObject_Del(s);
+}
+
+static int
+pkg_print(pkgObject * s)
+{
+ return 0;
+}
+
+
+static hdrObject *
+pkg_get_header(pkgObject *s)
+{
+ PyObject *headerObj;
+ Package pkg;
+
+ pkg = pkgFromPkg(s);
+ if ( pkg != NULL) {
+ return hdr_Wrap(pkg->header);
+ }
+ else {
+ return NULL;
+ }
+
+}
+
+/**
+ */
+
+static char pkg_doc[] = "RPM Pkg file object";
+
+static PyMethodDef pkg_Pkg_methods[] = {
+ {"header", (PyCFunction) pkg_get_header, METH_VARARGS, NULL },
+ {NULL} /* Sentinel */
+};
+
+PyTypeObject pkg_Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, /*ob_size*/
+ "rpm.pkg", /*tp_name*/
+ sizeof(pkgObject), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ (destructor) pkg_dealloc, /*tp_dealloc*/
+ (printfunc) pkg_print, /*tp_print*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_compare*/
+ 0, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash */
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
+ pkg_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ pkg_Pkg_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+};
+
+Package pkgFromPkg(pkgObject *s)
+{
+ return s->pkg;
+}
+
+pkgObject *
+pkg_Wrap(Package pkg)
+{
+ pkgObject * s = PyObject_New(pkgObject, &pkg_Type);
+ if (s == NULL)
+ return NULL;
+ s->pkg = pkg;
+ return s;
+}
diff -rupN rpm-4.5.90.git8461.orig/python/pkg-py.h rpm-4.5.90.git8461.new/python/pkg-py.h
--- rpm-4.5.90.git8461.orig/python/pkg-py.h 1969-12-31 19:00:00.000000000 -0500
+++ rpm-4.5.90.git8461.new/python/pkg-py.h 2008-09-18 07:24:48.000000000 -0400
@@ -0,0 +1,26 @@
+#ifndef RPMPYTHON_PKG
+#define RPMPYTHON_PKG
+
+#include <rpm/rpmbuild.h>
+
+/** \ingroup py_c
+ * \file python/pkg-py.h
+ */
+
+typedef struct pkgObject_s {
+ PyObject_HEAD
+ /*type specific fields */
+ Package pkg;
+} pkgObject;
+
+extern PyTypeObject pkg_Type;
+
+/**
+ */
+Package pkgFromPkg(pkgObject * pkg);
+
+/**
+ */
+pkgObject * pkg_Wrap(Package pkg);
+
+#endif /* RPMPYTHON_PKG */
diff -rupN rpm-4.5.90.git8461.orig/python/rpmmodule.c rpm-4.5.90.git8461.new/python/rpmmodule.c
--- rpm-4.5.90.git8461.orig/python/rpmmodule.c 2008-06-30 08:15:38.000000000 -0400
+++ rpm-4.5.90.git8461.new/python/rpmmodule.c 2008-09-18 07:59:37.000000000 -0400
@@ -21,6 +21,7 @@
#include "rpmte-py.h"
#include "rpmts-py.h"
#include "spec-py.h"
+#include "pkg-py.h"
#include "debug.h"
@@ -247,6 +248,7 @@ void init_rpm(void)
if (PyType_Ready(&rpmte_Type) < 0) return;
if (PyType_Ready(&rpmts_Type) < 0) return;
if (PyType_Ready(&spec_Type) < 0) return;
+ if (PyType_Ready(&pkg_Type) < 0) return;
#endif
m = Py_InitModule3("_rpm", rpmModuleMethods, rpm__doc__);
@@ -304,6 +306,9 @@ void init_rpm(void)
Py_INCREF(&spec_Type);
PyModule_AddObject(m, "spec", (PyObject *) &spec_Type);
+
+ Py_INCREF(&pkg_Type);
+ PyModule_AddObject(m, "pkg", (PyObject *) &pkg_Type);
#else
hdr_Type.ob_type = &PyType_Type;
rpmal_Type.ob_type = &PyType_Type;
@@ -315,6 +320,7 @@ void init_rpm(void)
rpmte_Type.ob_type = &PyType_Type;
rpmts_Type.ob_type = &PyType_Type;
spec_Type.ob_type = &PyType_Type;
+ pkg_Type.ob_type = &PyType_Type;
#endif
dict = PyDict_New();
@@ -492,5 +498,250 @@ void init_rpm(void)
REGISTER_ENUM(RPMDBI_PACKAGES);
REGISTER_ENUM((int)RPMAL_NOMATCH);
+
+ /* Sync with build/rpmspec.h */
+ REGISTER_ENUM(RPMBUILD_ISSOURCE);
+ REGISTER_ENUM(RPMBUILD_ISPATCH);
+ REGISTER_ENUM(RPMBUILD_ISICON);
+ REGISTER_ENUM(RPMBUILD_ISNO);
+
+
+ /* Sync with lib/rpmtag.h */
+ REGISTER_ENUM(RPMTAG_HEADERIMAGE);
+ REGISTER_ENUM(RPMTAG_HEADERSIGNATURES);
+ REGISTER_ENUM(RPMTAG_HEADERIMMUTABLE);
+ REGISTER_ENUM(RPMTAG_HEADERREGIONS);
+ REGISTER_ENUM(RPMTAG_HEADERI18NTABLE);
+ REGISTER_ENUM(RPMTAG_SIG_BASE);
+ REGISTER_ENUM(RPMTAG_SIGSIZE);
+ REGISTER_ENUM(RPMTAG_SIGLEMD5_1);
+ REGISTER_ENUM(RPMTAG_SIGPGP);
+ REGISTER_ENUM(RPMTAG_SIGLEMD5_2);
+ REGISTER_ENUM(RPMTAG_SIGMD5);
+ REGISTER_ENUM(RPMTAG_PKGID);
+ REGISTER_ENUM(RPMTAG_SIGGPG);
+ REGISTER_ENUM(RPMTAG_SIGPGP5);
+ REGISTER_ENUM(RPMTAG_BADSHA1_1);
+ REGISTER_ENUM(RPMTAG_BADSHA1_2);
+ REGISTER_ENUM(RPMTAG_PUBKEYS);
+ REGISTER_ENUM(RPMTAG_DSAHEADER);
+ REGISTER_ENUM(RPMTAG_RSAHEADER);
+ REGISTER_ENUM(RPMTAG_SHA1HEADER);
+ REGISTER_ENUM(RPMTAG_HDRID);
+ REGISTER_ENUM(RPMTAG_LONGSIGSIZE);
+ REGISTER_ENUM(RPMTAG_LONGARCHIVESIZE);
+ REGISTER_ENUM(RPMTAG_NAME);
+ REGISTER_ENUM(RPMTAG_N);
+ REGISTER_ENUM(RPMTAG_VERSION);
+ REGISTER_ENUM(RPMTAG_V);
+ REGISTER_ENUM(RPMTAG_RELEASE);
+ REGISTER_ENUM(RPMTAG_R);
+ REGISTER_ENUM(RPMTAG_EPOCH);
+ REGISTER_ENUM(RPMTAG_E);
+ REGISTER_ENUM(RPMTAG_SUMMARY);
+ REGISTER_ENUM(RPMTAG_DESCRIPTION);
+ REGISTER_ENUM(RPMTAG_BUILDTIME);
+ REGISTER_ENUM(RPMTAG_BUILDHOST);
+ REGISTER_ENUM(RPMTAG_INSTALLTIME);
+ REGISTER_ENUM(RPMTAG_SIZE);
+ REGISTER_ENUM(RPMTAG_DISTRIBUTION);
+ REGISTER_ENUM(RPMTAG_VENDOR);
+ REGISTER_ENUM(RPMTAG_GIF);
+ REGISTER_ENUM(RPMTAG_XPM);
+ REGISTER_ENUM(RPMTAG_LICENSE);
+ REGISTER_ENUM(RPMTAG_PACKAGER);
+ REGISTER_ENUM(RPMTAG_GROUP);
+ REGISTER_ENUM(RPMTAG_CHANGELOG);
+ REGISTER_ENUM(RPMTAG_SOURCE);
+ REGISTER_ENUM(RPMTAG_PATCH);
+ REGISTER_ENUM(RPMTAG_URL);
+ REGISTER_ENUM(RPMTAG_OS);
+ REGISTER_ENUM(RPMTAG_ARCH);
+ REGISTER_ENUM(RPMTAG_PREIN);
+ REGISTER_ENUM(RPMTAG_POSTIN);
+ REGISTER_ENUM(RPMTAG_PREUN);
+ REGISTER_ENUM(RPMTAG_POSTUN);
+ REGISTER_ENUM(RPMTAG_OLDFILENAMES);
+ REGISTER_ENUM(RPMTAG_FILESIZES);
+ REGISTER_ENUM(RPMTAG_FILESTATES);
+ REGISTER_ENUM(RPMTAG_FILEMODES);
+ REGISTER_ENUM(RPMTAG_FILEUIDS);
+ REGISTER_ENUM(RPMTAG_FILEGIDS);
+ REGISTER_ENUM(RPMTAG_FILERDEVS);
+ REGISTER_ENUM(RPMTAG_FILEMTIMES);
+ REGISTER_ENUM(RPMTAG_FILEDIGESTS);
+ REGISTER_ENUM(RPMTAG_FILEMD5S);
+ REGISTER_ENUM(RPMTAG_FILELINKTOS);
+ REGISTER_ENUM(RPMTAG_FILEFLAGS);
+ REGISTER_ENUM(RPMTAG_ROOT);
+ REGISTER_ENUM(RPMTAG_FILEUSERNAME);
+ REGISTER_ENUM(RPMTAG_FILEGROUPNAME);
+ REGISTER_ENUM(RPMTAG_EXCLUDE);
+ REGISTER_ENUM(RPMTAG_EXCLUSIVE);
+ REGISTER_ENUM(RPMTAG_ICON);
+ REGISTER_ENUM(RPMTAG_SOURCERPM);
+ REGISTER_ENUM(RPMTAG_FILEVERIFYFLAGS);
+ REGISTER_ENUM(RPMTAG_ARCHIVESIZE);
+ REGISTER_ENUM(RPMTAG_PROVIDENAME);
+ REGISTER_ENUM(RPMTAG_PROVIDES);
+ REGISTER_ENUM(RPMTAG_P);
+ REGISTER_ENUM(RPMTAG_REQUIREFLAGS);
+ REGISTER_ENUM(RPMTAG_REQUIRENAME);
+ REGISTER_ENUM(RPMTAG_REQUIRES);
+ REGISTER_ENUM(RPMTAG_REQUIREVERSION);
+ REGISTER_ENUM(RPMTAG_NOSOURCE);
+ REGISTER_ENUM(RPMTAG_NOPATCH);
+ REGISTER_ENUM(RPMTAG_CONFLICTFLAGS);
+ REGISTER_ENUM(RPMTAG_CONFLICTNAME);
+ REGISTER_ENUM(RPMTAG_CONFLICTS);
+ REGISTER_ENUM(RPMTAG_C);
+ REGISTER_ENUM(RPMTAG_CONFLICTVERSION);
+ REGISTER_ENUM(RPMTAG_DEFAULTPREFIX);
+ REGISTER_ENUM(RPMTAG_BUILDROOT);
+ REGISTER_ENUM(RPMTAG_INSTALLPREFIX);
+ REGISTER_ENUM(RPMTAG_EXCLUDEARCH);
+ REGISTER_ENUM(RPMTAG_EXCLUDEOS);
+ REGISTER_ENUM(RPMTAG_EXCLUSIVEARCH);
+ REGISTER_ENUM(RPMTAG_EXCLUSIVEOS);
+ REGISTER_ENUM(RPMTAG_AUTOREQPROV);
+ REGISTER_ENUM(RPMTAG_RPMVERSION);
+ REGISTER_ENUM(RPMTAG_TRIGGERSCRIPTS);
+ REGISTER_ENUM(RPMTAG_TRIGGERNAME);
+ REGISTER_ENUM(RPMTAG_TRIGGERVERSION);
+ REGISTER_ENUM(RPMTAG_TRIGGERFLAGS);
+ REGISTER_ENUM(RPMTAG_TRIGGERINDEX);
+ REGISTER_ENUM(RPMTAG_VERIFYSCRIPT);
+ REGISTER_ENUM(RPMTAG_CHANGELOGTIME);
+ REGISTER_ENUM(RPMTAG_CHANGELOGNAME);
+ REGISTER_ENUM(RPMTAG_CHANGELOGTEXT);
+ REGISTER_ENUM(RPMTAG_BROKENMD5);
+ REGISTER_ENUM(RPMTAG_PREREQ);
+ REGISTER_ENUM(RPMTAG_PREINPROG);
+ REGISTER_ENUM(RPMTAG_POSTINPROG);
+ REGISTER_ENUM(RPMTAG_PREUNPROG);
+ REGISTER_ENUM(RPMTAG_POSTUNPROG);
+ REGISTER_ENUM(RPMTAG_BUILDARCHS);
+ REGISTER_ENUM(RPMTAG_OBSOLETENAME);
+ REGISTER_ENUM(RPMTAG_OBSOLETES);
+ REGISTER_ENUM(RPMTAG_O);
+ REGISTER_ENUM(RPMTAG_VERIFYSCRIPTPROG);
+ REGISTER_ENUM(RPMTAG_TRIGGERSCRIPTPROG);
+ REGISTER_ENUM(RPMTAG_DOCDIR);
+ REGISTER_ENUM(RPMTAG_COOKIE);
+ REGISTER_ENUM(RPMTAG_FILEDEVICES);
+ REGISTER_ENUM(RPMTAG_FILEINODES);
+ REGISTER_ENUM(RPMTAG_FILELANGS);
+ REGISTER_ENUM(RPMTAG_PREFIXES);
+ REGISTER_ENUM(RPMTAG_INSTPREFIXES);
+ REGISTER_ENUM(RPMTAG_TRIGGERIN);
+ REGISTER_ENUM(RPMTAG_TRIGGERUN);
+ REGISTER_ENUM(RPMTAG_TRIGGERPOSTUN);
+ REGISTER_ENUM(RPMTAG_AUTOREQ);
+ REGISTER_ENUM(RPMTAG_AUTOPROV);
+ REGISTER_ENUM(RPMTAG_CAPABILITY);
+ REGISTER_ENUM(RPMTAG_SOURCEPACKAGE);
+ REGISTER_ENUM(RPMTAG_OLDORIGFILENAMES);
+ REGISTER_ENUM(RPMTAG_BUILDPREREQ);
+ REGISTER_ENUM(RPMTAG_BUILDREQUIRES);
+ REGISTER_ENUM(RPMTAG_BUILDCONFLICTS);
+ REGISTER_ENUM(RPMTAG_BUILDMACROS);
+ REGISTER_ENUM(RPMTAG_PROVIDEFLAGS);
+ REGISTER_ENUM(RPMTAG_PROVIDEVERSION);
+ REGISTER_ENUM(RPMTAG_OBSOLETEFLAGS);
+ REGISTER_ENUM(RPMTAG_OBSOLETEVERSION);
+ REGISTER_ENUM(RPMTAG_DIRINDEXES);
+ REGISTER_ENUM(RPMTAG_BASENAMES);
+ REGISTER_ENUM(RPMTAG_DIRNAMES);
+ REGISTER_ENUM(RPMTAG_ORIGDIRINDEXES);
+ REGISTER_ENUM(RPMTAG_ORIGBASENAMES);
+ REGISTER_ENUM(RPMTAG_ORIGDIRNAMES);
+ REGISTER_ENUM(RPMTAG_OPTFLAGS);
+ REGISTER_ENUM(RPMTAG_DISTURL);
+ REGISTER_ENUM(RPMTAG_PAYLOADFORMAT);
+ REGISTER_ENUM(RPMTAG_PAYLOADCOMPRESSOR);
+ REGISTER_ENUM(RPMTAG_PAYLOADFLAGS);
+ REGISTER_ENUM(RPMTAG_INSTALLCOLOR);
+ REGISTER_ENUM(RPMTAG_INSTALLTID);
+ REGISTER_ENUM(RPMTAG_REMOVETID);
+ REGISTER_ENUM(RPMTAG_SHA1RHN);
+ REGISTER_ENUM(RPMTAG_RHNPLATFORM);
+ REGISTER_ENUM(RPMTAG_PLATFORM);
+ REGISTER_ENUM(RPMTAG_PATCHESNAME);
+ REGISTER_ENUM(RPMTAG_PATCHESFLAGS);
+ REGISTER_ENUM(RPMTAG_PATCHESVERSION);
+ REGISTER_ENUM(RPMTAG_CACHECTIME);
+ REGISTER_ENUM(RPMTAG_CACHEPKGPATH);
+ REGISTER_ENUM(RPMTAG_CACHEPKGSIZE);
+ REGISTER_ENUM(RPMTAG_CACHEPKGMTIME);
+ REGISTER_ENUM(RPMTAG_FILECOLORS);
+ REGISTER_ENUM(RPMTAG_FILECLASS);
+ REGISTER_ENUM(RPMTAG_CLASSDICT);
+ REGISTER_ENUM(RPMTAG_FILEDEPENDSX);
+ REGISTER_ENUM(RPMTAG_FILEDEPENDSN);
+ REGISTER_ENUM(RPMTAG_DEPENDSDICT);
+ REGISTER_ENUM(RPMTAG_SOURCEPKGID);
+ REGISTER_ENUM(RPMTAG_FILECONTEXTS);
+ REGISTER_ENUM(RPMTAG_FSCONTEXTS);
+ REGISTER_ENUM(RPMTAG_RECONTEXTS);
+ REGISTER_ENUM(RPMTAG_POLICIES);
+ REGISTER_ENUM(RPMTAG_PRETRANS);
+ REGISTER_ENUM(RPMTAG_POSTTRANS);
+ REGISTER_ENUM(RPMTAG_PRETRANSPROG);
+ REGISTER_ENUM(RPMTAG_POSTTRANSPROG);
+ REGISTER_ENUM(RPMTAG_DISTTAG);
+ REGISTER_ENUM(RPMTAG_SUGGESTSNAME);
+ REGISTER_ENUM(RPMTAG_SUGGESTS);
+ REGISTER_ENUM(RPMTAG_SUGGESTSVERSION);
+ REGISTER_ENUM(RPMTAG_SUGGESTSFLAGS);
+ REGISTER_ENUM(RPMTAG_ENHANCESNAME);
+ REGISTER_ENUM(RPMTAG_ENHANCES);
+ REGISTER_ENUM(RPMTAG_ENHANCESVERSION);
+ REGISTER_ENUM(RPMTAG_ENHANCESFLAGS);
+ REGISTER_ENUM(RPMTAG_PRIORITY);
+ REGISTER_ENUM(RPMTAG_CVSID);
+ REGISTER_ENUM(RPMTAG_SVNID);
+ REGISTER_ENUM(RPMTAG_BLINKPKGID);
+ REGISTER_ENUM(RPMTAG_BLINKHDRID);
+ REGISTER_ENUM(RPMTAG_BLINKNEVRA);
+ REGISTER_ENUM(RPMTAG_FLINKPKGID);
+ REGISTER_ENUM(RPMTAG_FLINKHDRID);
+ REGISTER_ENUM(RPMTAG_FLINKNEVRA);
+ REGISTER_ENUM(RPMTAG_PACKAGEORIGIN);
+ REGISTER_ENUM(RPMTAG_TRIGGERPREIN);
+ REGISTER_ENUM(RPMTAG_BUILDSUGGESTS);
+ REGISTER_ENUM(RPMTAG_BUILDENHANCES);
+ REGISTER_ENUM(RPMTAG_SCRIPTSTATES);
+ REGISTER_ENUM(RPMTAG_SCRIPTMETRICS);
+ REGISTER_ENUM(RPMTAG_BUILDCPUCLOCK);
+ REGISTER_ENUM(RPMTAG_FILEDIGESTALGO);
+ REGISTER_ENUM(RPMTAG_VARIANTS);
+ REGISTER_ENUM(RPMTAG_XMAJOR);
+ REGISTER_ENUM(RPMTAG_XMINOR);
+ REGISTER_ENUM(RPMTAG_REPOTAG);
+ REGISTER_ENUM(RPMTAG_KEYWORDS);
+ REGISTER_ENUM(RPMTAG_BUILDPLATFORMS);
+ REGISTER_ENUM(RPMTAG_PACKAGECOLOR);
+ REGISTER_ENUM(RPMTAG_PACKAGEPREFCOLOR);
+ REGISTER_ENUM(RPMTAG_XATTRSDICT);
+ REGISTER_ENUM(RPMTAG_FILEXATTRSX);
+ REGISTER_ENUM(RPMTAG_DEPATTRSDICT);
+ REGISTER_ENUM(RPMTAG_CONFLICTATTRSX);
+ REGISTER_ENUM(RPMTAG_OBSOLETEATTRSX);
+ REGISTER_ENUM(RPMTAG_PROVIDEATTRSX);
+ REGISTER_ENUM(RPMTAG_REQUIREATTRSX);
+ REGISTER_ENUM(RPMTAG_BUILDPROVIDES);
+ REGISTER_ENUM(RPMTAG_BUILDOBSOLETES);
+ REGISTER_ENUM(RPMTAG_FILENAMES);
+ REGISTER_ENUM(RPMTAG_FILEPROVIDE);
+ REGISTER_ENUM(RPMTAG_FILEREQUIRE);
+ REGISTER_ENUM(RPMTAG_FSNAMES);
+ REGISTER_ENUM(RPMTAG_FSSIZES);
+ REGISTER_ENUM(RPMTAG_TRIGGERCONDS);
+ REGISTER_ENUM(RPMTAG_TRIGGERTYPE);
+ REGISTER_ENUM(RPMTAG_ORIGFILENAMES);
+ REGISTER_ENUM(RPMTAG_LONGFILESIZES);
+ REGISTER_ENUM(RPMTAG_LONGSIZE);
+
+
}
diff -rupN rpm-4.5.90.git8461.orig/python/spec-py.c rpm-4.5.90.git8461.new/python/spec-py.c
--- rpm-4.5.90.git8461.orig/python/spec-py.c 2008-06-26 05:26:01.000000000 -0400
+++ rpm-4.5.90.git8461.new/python/spec-py.c 2008-09-18 07:24:45.000000000 -0400
@@ -5,6 +5,7 @@
#include "system.h"
#include "spec-py.h"
+#include "pkg-py.h"
/** \ingroup python
* \name Class: Rpmspec
@@ -147,13 +148,40 @@ spec_get_sources(specObject *s)
}
+static PyObject *
+spec_get_packages(specObject *s)
+{
+ Package pkg;
+ PyObject *packageList, *pkgObj;
+ rpmSpec spec;
+
+ packageList = PyList_New(0);
+ spec = specFromSpec(s);
+ if ( spec != NULL) {
+ pkg = spec->packages;
+
+ while (pkg != NULL) {
+ pkgObj = (PyObject *)pkg_Wrap(pkg);
+ PyList_Append(packageList, pkgObj);
+ pkg=pkg->next;
+ }
+
+ return PyList_AsTuple(packageList);
+ }
+ else {
+ return NULL;
+ }
+
+}
+
/**
*/
-static char spec_doc[] = "RPM Spec file object";
+static char spec_doc[] = "RPM Spec file package object";
static PyMethodDef spec_Spec_methods[] = {
{"sources", (PyCFunction) spec_get_sources, METH_VARARGS, NULL },
+ {"packages", (PyCFunction) spec_get_packages, METH_VARARGS, NULL },
{"prep", (PyCFunction) spec_get_prep, METH_VARARGS, NULL },
{"build", (PyCFunction) spec_get_build, METH_VARARGS, NULL },
{"install", (PyCFunction) spec_get_install, METH_VARARGS, NULL },
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the Rpm-maint
mailing list