- fix python match iterator regression wrt boolean representation

This commit is contained in:
Panu Matilainen 2010-03-24 08:09:48 +00:00
parent ecc5d6babb
commit 7d0e69f0b5
2 changed files with 63 additions and 1 deletions

View File

@ -0,0 +1,57 @@
commit 40f788a7bf3741f9c613ff302d4e1b0ceec2658c
Author: Panu Matilainen <pmatilai@redhat.com>
Date: Wed Mar 24 09:53:25 2010 +0200
Add __bool__() / __nonzero__() method to python rpmmi objects (ticket #153)
- Objects supporting __len__() use (len > 0) for boolean representation,
which normally makes sense but as the match iterator count is often
zero despite the iterator actually existing and returning something,
and breaks existing code (rpmlint at least)
- Adding a __bool__() (known as __nonzero__() in Python < 3) method
returning true for non-NULL iterator fixes this and gives more
meaningful answers than pre 4.8.0 which simply always returned True
diff --git a/python/rpmmi-py.c b/python/rpmmi-py.c
index f6dd802..b7bfb1b 100644
--- a/python/rpmmi-py.c
+++ b/python/rpmmi-py.c
@@ -137,11 +137,30 @@ static Py_ssize_t rpmmi_length(rpmmiObject * s)
return s->mi ? rpmdbGetIteratorCount(s->mi) : 0;
}
+static int rpmmi_bool(rpmmiObject *s)
+{
+ return (s->mi != NULL);
+}
+
PyMappingMethods rpmmi_as_mapping = {
(lenfunc) rpmmi_length, /* mp_length */
0,
};
+static PyNumberMethods rpmmi_as_number = {
+ 0, /* nb_add */
+ 0, /* nb_subtract */
+ 0, /* nb_multiply */
+ 0, /* nb_divide */
+ 0, /* nb_remainder */
+ 0, /* nb_divmod */
+ 0, /* nb_power */
+ 0, /* nb_negative */
+ 0, /* nb_positive */
+ 0, /* nb_absolute */
+ (inquiry)rpmmi_bool, /* nb_bool/nonzero */
+};
+
static char rpmmi_doc[] =
"";
@@ -156,7 +175,7 @@ PyTypeObject rpmmi_Type = {
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
- 0, /* tp_as_number */
+ &rpmmi_as_number, /* tp_as_number */
0, /* tp_as_sequence */
&rpmmi_as_mapping, /* tp_as_mapping */
0, /* tp_hash */

View File

@ -21,7 +21,7 @@
Summary: The RPM package management system
Name: rpm
Version: %{rpmver}
Release: 12%{?dist}
Release: 13%{?dist}
Group: System Environment/Base
Url: http://www.rpm.org/
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
@ -49,6 +49,7 @@ Patch204: rpm-4.8.0-lazy-statfs.patch
Patch205: rpm-4.8.0-erasure-dsi.patch
Patch206: rpm-4.8.0-prep-keep-empty.patch
Patch207: rpm-4.8.0-python-nocontexts.patch
Patch208: rpm-4.8.0-python-mibool.patch
# These are not yet upstream
Patch301: rpm-4.6.0-niagara.patch
@ -203,6 +204,7 @@ packages on a system.
%patch205 -p1 -b .erasure-dsi
%patch206 -p1 -b .prep-keep-empty
%patch207 -p1 -b .python-nocontexts
%patch208 -p1 -b .python-mibool
%patch301 -p1 -b .niagara
%patch302 -p1 -b .geode
@ -419,6 +421,9 @@ exit 0
%doc doc/librpm/html/*
%changelog
* Wed Mar 24 2010 Panu Matilainen <pmatilai@redhat.com> - 4.8.0-13
- fix python match iterator regression wrt boolean representation
* Wed Mar 17 2010 Panu Matilainen <pmatilai@redhat.com> - 4.8.0-12
- unbreak find-lang --with-man from yesterdays braindamage