rpms/rpm/F-13 rpm-4.8.0-no-man-dirs.patch, NONE, 1.1 rpm-4.8.0-prep-keep-empty.patch, NONE, 1.1 rpm-4.8.0-psdriver-deps.patch, NONE, 1.1 rpm-4.8.0-python-mibool.patch, NONE, 1.1 rpm-4.8.0-python-nocontexts.patch, NONE, 1.1 rpm.spec, 1.388, 1.389 rpm-4.8.0-psdriver-fixes.patch, 1.1, NONE rpm-4.8.0-psdriver-more-fixes.patch, 1.1, NONE rpm-4.8.0-psdriver.patch, 1.1, NONE

Panu Matilainen pmatilai at fedoraproject.org
Fri Apr 23 11:19:46 UTC 2010


Author: pmatilai

Update of /cvs/pkgs/rpms/rpm/F-13
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv22510

Modified Files:
	rpm.spec 
Added Files:
	rpm-4.8.0-no-man-dirs.patch rpm-4.8.0-prep-keep-empty.patch 
	rpm-4.8.0-psdriver-deps.patch rpm-4.8.0-python-mibool.patch 
	rpm-4.8.0-python-nocontexts.patch 
Removed Files:
	rpm-4.8.0-psdriver-fixes.patch 
	rpm-4.8.0-psdriver-more-fixes.patch rpm-4.8.0-psdriver.patch 
Log Message:
Sync with rawhide to pull in various minor fixes:
- lose dangling symlink to extinct (and useless) berkeley_db_svc (#585174)
- fix python match iterator regression wrt boolean representation (rpmlint)
- support single PPD providing driver for devices (#568351), merge psdriver
  patches
- preserve empty lines in spec prep section (#573339)
- teach python bindings about RPMTRANS_FLAG_NOCONTEXTS (related to #573111)
- dont own localized man directories through find_lang (#569536)


rpm-4.8.0-no-man-dirs.patch:
 find-lang.sh |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE rpm-4.8.0-no-man-dirs.patch ---
diff --git a/scripts/find-lang.sh b/scripts/find-lang.sh
index bb25b31..e4a22db 100755
--- a/scripts/find-lang.sh
+++ b/scripts/find-lang.sh
@@ -173,7 +173,7 @@ s:%lang(C) ::
 find $TOP_DIR -type d|sed '
 s:'"$TOP_DIR"'::
 '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/\)::
-'"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*:
+'"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1/*:
 s:^\([^%].*\)::
 s:%lang(C) ::
 /^$/d' >> $MO_NAME

rpm-4.8.0-prep-keep-empty.patch:
 build/parsePrep.c |    2 +-
 rpmio/argv.c      |   14 +++++++++++---
 rpmio/argv.h      |   14 ++++++++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

--- NEW FILE rpm-4.8.0-prep-keep-empty.patch ---
commit 35052b96232810cbf0d91a4f1d1d3ff25a142fd0
Author: Panu Matilainen <pmatilai at redhat.com>
Date:   Mon Mar 15 11:54:55 2010 +0200

    Add an enhanced argvSplitString() function for splitting strings to argv's
    - Returns the newly created argv instead of useless "this always returns 0"
    - By default make a "real" split, including empty strings
    - Flags argument allows controlling behavior, for now only flag is to
      preserve argvSplit() behavior but leaves room for future enhancements
      such as quoted splitting etc

commit 12802c36c9a3b7260d9f788afc826b1cc5ee05e2
Author: Panu Matilainen <pmatilai at redhat.com>
Date:   Mon Mar 15 12:00:55 2010 +0200

    Avoid eating empty lines in spec %prep section (RhBug:573339)
    - In spec %prep context empty lines don't usually matter but they can
      be significant in eg here-documents.
    - Fixes regression from commit 94ff22b129aeb31c38848231e40f87aa4a5613a1

diff --git a/rpmio/argv.c b/rpmio/argv.c
index d633462..f21da1c 100644
--- a/rpmio/argv.c
+++ b/rpmio/argv.c
@@ -168,7 +168,7 @@ int argvAppend(ARGV_t * argvp, ARGV_const_t av)
     return 0;
 }
 
-int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
+ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags)
 {
     char *dest = xmalloc(strlen(str) + 1);
     ARGV_t argv;
@@ -189,14 +189,22 @@ int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
     argv = xmalloc( (argc + 1) * sizeof(*argv));
 
     for (c = 0, s = dest; s < t; s+= strlen(s) + 1) {
-	if (*s == '\0')
+	if (*s == '\0' && (flags & ARGV_SKIPEMPTY))
 	    continue;
 	argv[c] = xstrdup(s);
 	c++;
     }
     argv[c] = NULL;
-    *argvp = argv;
     free(dest);
+    return argv;
+}
+
+/* Backwards compatibility */
+int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
+{
+    if (argvp) {
+	*argvp = argvSplitString(str, seps, ARGV_SKIPEMPTY);
+    }
     return 0;
 }
 
diff --git a/rpmio/argv.h b/rpmio/argv.h
index 6a6fc7f..86ec137 100644
--- a/rpmio/argv.h
+++ b/rpmio/argv.h
@@ -138,6 +138,20 @@ int argvAddNum(ARGV_t * argvp, int val);
  */
 int argvAppend(ARGV_t * argvp, ARGV_const_t av);
 
+typedef enum argvFlags_e {
+    ARGV_NONE		= 0,
+    ARGV_SKIPEMPTY	= (1 << 0),	/* omit empty strings from result */
+} argvFlags;
+
+/** \ingroup rpmargv
+ * Split a string into an argv array.
+ * @param str		string arg to split
+ * @param seps		seperator characters
+ * @param flags		flags to control behavior
+ * @return		argv array
+ */
+ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags);
+
 /** \ingroup rpmargv
  * Split a string into an argv array.
  * @retval *argvp	argv array
diff --git a/build/parsePrep.c b/build/parsePrep.c
index 8e10c00..394c162 100644
--- a/build/parsePrep.c
+++ b/build/parsePrep.c
@@ -522,7 +522,7 @@ int parsePrep(rpmSpec spec)
 	}
     }
 
-    argvSplit(&saveLines, getStringBuf(sb), "\n");
+    saveLines = argvSplitString(getStringBuf(sb), "\n", ARGV_NONE);
     for (lines = saveLines; *lines; lines++) {
 	res = 0;
 	if (rstreqn(*lines, "%setup", sizeof("%setup")-1)) {

rpm-4.8.0-psdriver-deps.patch:
 build/rpmfc.c                 |   16 ++
 build/rpmfc.h                 |    4 
 macros.in                     |    1 
 scripts/Makefile.am           |    4 
 scripts/Makefile.in           |    4 
 scripts/postscriptdriver.prov |  261 ++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 287 insertions(+), 3 deletions(-)

--- NEW FILE rpm-4.8.0-psdriver-deps.patch ---
diff -up rpm-4.8.0/build/rpmfc.c.psdriver rpm-4.8.0/build/rpmfc.c
--- rpm-4.8.0/build/rpmfc.c.psdriver	2010-03-16 10:54:04.000000000 +0200
+++ rpm-4.8.0/build/rpmfc.c	2010-03-16 10:54:04.000000000 +0200
@@ -489,6 +489,7 @@ static const struct rpmfcTokens_s const 
   { " font metrics",		RPMFC_WHITE|RPMFC_INCLUDE },
   { " font",			RPMFC_FONT|RPMFC_INCLUDE },
   { " Font",			RPMFC_FONT|RPMFC_INCLUDE },
+  { "PPD file",			RPMFC_PSDRIVER|RPMFC_INCLUDE },
 
   { " commands",		RPMFC_SCRIPT|RPMFC_INCLUDE },
   { " script",			RPMFC_SCRIPT|RPMFC_INCLUDE },
@@ -1185,6 +1186,11 @@ exit:
 #endif
 }
 
+static int rpmfcPSDRIVER(rpmfc fc)
+{
+    return rpmfcHelper(fc, 'P', "psdriver");
+}
+
 static int rpmfcMISC(rpmfc fc)
 {
     struct stat st;
@@ -1224,6 +1230,7 @@ static const struct rpmfcApplyTbl_s cons
 			 RPMFC_PKGCONFIG|RPMFC_LIBTOOL) },
     { rpmfcMISC,	RPMFC_FONT|RPMFC_TEXT },
     { rpmfcSYMLINK,	RPMFC_SYMLINK },
+    { rpmfcPSDRIVER,	RPMFC_PSDRIVER },
     { NULL, 0 }
 };
 
@@ -1260,6 +1267,10 @@ rpmRC rpmfcApply(rpmfc fc)
 		    fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON;
 	    }
 	}
+	/* XXX HACK: get cups driver executables also recognized as psdrivers */
+	if (strstr(fc->fn[fc->ix], "/usr/lib/cups/driver/")) {
+	    fc->fcolor->vals[fc->ix] |= RPMFC_PSDRIVER;
+	}
 
 	if (fc->fcolor->vals[fc->ix])
 	for (fcat = rpmfcApplyTable; fcat->func != NULL; fcat++) {
@@ -1401,6 +1412,11 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t arg
 	    else if (rpmFileHasSuffix(s, ".pc"))
 		ftype = "pkgconfig file";
 
+	    /* XXX Make cups .drv's to appear as PPD's for now */
+	    else if (rpmFileHasSuffix(s, ".drv") && 
+		     strstr(s, "/usr/share/cups/drv"))
+		ftype = "PPD file";
+
 	    /* XXX skip all files in /dev/ which are (or should be) %dev dummies. */
 	    else if (slen >= fc->brlen+sizeof("/dev/") && rstreqn(s+fc->brlen, "/dev/", sizeof("/dev/")-1))
 		ftype = "";
diff -up rpm-4.8.0/build/rpmfc.h.psdriver rpm-4.8.0/build/rpmfc.h
--- rpm-4.8.0/build/rpmfc.h.psdriver	2009-12-09 15:37:25.000000000 +0200
+++ rpm-4.8.0/build/rpmfc.h	2010-03-16 10:54:04.000000000 +0200
@@ -31,7 +31,8 @@ enum FCOLOR_e {
 #define	RPMFC_ELF	(RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32)
 	/* (1 << 3) leaks into package headers, reserved */
 
-	/* bits 4-6 unused */
+	/* bits 4-5 unused */
+    RPMFC_PSDRIVER		= (1 <<  6),
     RPMFC_OCAML			= (1 <<  7),
     RPMFC_PKGCONFIG		= (1 <<  8),
     RPMFC_LIBTOOL		= (1 <<  9),
@@ -53,6 +54,7 @@ enum FCOLOR_e {
     RPMFC_MANPAGE		= (7 << 16),
     RPMFC_TEXT			= (8 << 16),
     RPMFC_DOCUMENT		= (9 << 16),
+    RPMFC_PPD			= (10 << 16),
 
     RPMFC_ARCHIVE		= (1 << 20),
     RPMFC_COMPRESSED		= (1 << 21),
diff -up rpm-4.8.0/macros.in.psdriver rpm-4.8.0/macros.in
--- rpm-4.8.0/macros.in.psdriver	2010-03-16 10:54:04.000000000 +0200
+++ rpm-4.8.0/macros.in	2010-03-16 10:54:04.000000000 +0200
@@ -504,6 +504,7 @@ print (t)\
 
 %__fontconfig_provides	%{_rpmconfigdir}/fontconfig.prov
 %__desktop_provides	%{_rpmconfigdir}/desktop-file.prov
+%__psdriver_provides	%{_rpmconfigdir}/postscriptdriver.prov %{buildroot}
 
 #==============================================================================
 # ---- Database configuration macros.
diff -up rpm-4.8.0/scripts/Makefile.am.psdriver rpm-4.8.0/scripts/Makefile.am
--- rpm-4.8.0/scripts/Makefile.am.psdriver	2009-12-07 16:36:49.000000000 +0200
+++ rpm-4.8.0/scripts/Makefile.am	2010-03-16 10:54:04.000000000 +0200
@@ -20,7 +20,8 @@ EXTRA_DIST = \
 	mono-find-requires mono-find-provides \
 	ocaml-find-requires.sh ocaml-find-provides.sh \
 	pkgconfigdeps.sh libtooldeps.sh \
-	fontconfig.prov desktop-file.prov
+	fontconfig.prov desktop-file.prov \
+	postscriptdriver.prov
 
 rpmconfig_SCRIPTS = \
 	brp-compress brp-python-bytecompile brp-java-gcjcompile \
@@ -34,6 +35,7 @@ rpmconfig_SCRIPTS = \
 	pkgconfigdeps.sh libtooldeps.sh \
 	ocaml-find-requires.sh ocaml-find-provides.sh \
 	fontconfig.prov desktop-file.prov \
+	postscriptdriver.prov \
 	rpmdb_loadcvt rpmdiff rpm2cpio.sh tcl.req tgpg 
 
 rpmconfig_DATA = \
diff -up rpm-4.8.0/scripts/Makefile.in.psdriver rpm-4.8.0/scripts/Makefile.in
--- rpm-4.8.0/scripts/Makefile.in.psdriver	2010-01-08 10:35:16.000000000 +0200
+++ rpm-4.8.0/scripts/Makefile.in	2010-03-16 10:54:04.000000000 +0200
@@ -317,7 +317,8 @@ EXTRA_DIST = brp-compress brp-python-byt
 	find-php-provides find-php-requires mono-find-requires \
 	mono-find-provides ocaml-find-requires.sh \
 	ocaml-find-provides.sh pkgconfigdeps.sh libtooldeps.sh \
-	fontconfig.prov desktop-file.prov macros.perl.in macros.php.in \
+	fontconfig.prov desktop-file.prov postscriptdriver.prov \
+	macros.perl.in macros.php.in \
 	macros.python.in
 rpmconfig_SCRIPTS = \
 	brp-compress brp-python-bytecompile brp-java-gcjcompile \
@@ -331,6 +332,7 @@ rpmconfig_SCRIPTS = \
 	pkgconfigdeps.sh libtooldeps.sh \
 	ocaml-find-requires.sh ocaml-find-provides.sh \
 	fontconfig.prov desktop-file.prov \
+	postscriptdriver.prov \
 	rpmdb_loadcvt rpmdiff rpm2cpio.sh tcl.req tgpg 
 
 rpmconfig_DATA = rpmdiff.cgi rpm.daily rpm.log rpm.xinetd macros.perl \
diff -up rpm-4.8.0/scripts/postscriptdriver.prov.psdriver rpm-4.8.0/scripts/postscriptdriver.prov
--- rpm-4.8.0/scripts/postscriptdriver.prov.psdriver	2010-03-16 10:54:04.000000000 +0200
+++ rpm-4.8.0/scripts/postscriptdriver.prov	2010-03-16 10:54:04.000000000 +0200
@@ -0,0 +1,261 @@
+#!/bin/bash
+shopt -s execfail
+exec -a "$0" python -- <(tail -n +4 -- "$0") "$@" || exit 0 # -*- python -*-
+
+## Copyright (C) 2009, 2010 Red Hat, Inc.
+## Author: Tim Waugh <twaugh at redhat.com>
+
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import sys
+
+try:
+    import cups
+    CAN_EXAMINE_PPDS = True
+except:
+    CAN_EXAMINE_PPDS = False
+
+from getopt import getopt
+import errno
+import os
+import posix
+import re
+import shlex
+import signal
+import subprocess
+import sys
+import tempfile
+
+if len (sys.argv) > 1:
+    RPM_BUILD_ROOT = sys.argv[1]
+else:
+    RPM_BUILD_ROOT = None
+
+class TimedOut(Exception):
+    def __init__ (self):
+        Exception.__init__ (self, "Timed out")
+
+class DeviceIDs:
+    def __init__ (self):
+        self.ids = dict()
+
+    def get_dict (self):
+        return self.ids
+
+    def get_tags (self):
+        ret = []
+        for mfg, mdlset in self.ids.iteritems ():
+            mfgl = mfg.lower ().replace (" ", "_")
+            for mdl in mdlset:
+                mdll = mdl.lower ().replace (" ", "_")
+                ret.append ("postscriptdriver(%s;%s;)" % (mfgl,
+                                                          mdll))
+
+        return ret
+
+    def __add__ (self, other):
+        if isinstance(other, DeviceIDs):
+            for omfg, omdlset in other.ids.iteritems ():
+                try:
+                    mdlset = self.ids[omfg]
+                except KeyError:
+                    mdlset = set()
+                    self.ids[omfg] = mdlset
+
+                mdlset.update (omdlset)
+
+            return self
+
+        pieces = other.split (';')
+        mfg = mdl = None
+        for piece in pieces:
+            s = piece.split (":")
+            if len (s) != 2:
+                continue
+            key, value = s
+            key = key.upper ()
+            if key in ["MFG", "MANUFACTURER"]:
+                mfg = value
+            elif key in ["MDL", "MODEL"]:
+                mdl = value
+
+        if mfg and mdl:
+            try:
+                mdlset = self.ids[mfg]
+            except KeyError:
+                mdlset = set()
+                self.ids[mfg] = mdlset
+
+            mdlset.add (mdl)
+
+        return self
+
+class Driver:
+    def __init__ (self):
+        self.ids = DeviceIDs()
+
+    def list (self):
+        return self.ids
+
+class PPDDriver(Driver):
+    def __init__ (self, pathname=None):
+        Driver.__init__ (self)
+        self.pathname = pathname
+
+    def list (self):
+        if self.pathname != None:
+            self.examine_file (self.pathname)
+
+        return Driver.list (self)
+
+    def examine_file (self, path):
+        try:
+            ppd = cups.PPD (path)
+        except RuntimeError, e:
+            # Not a PPD file.  Perhaps it's a drv file.
+            drv = DrvDriver (path)
+            self.ids += drv.list ()
+            return
+
+        attr = ppd.findAttr ('1284DeviceID')
+        while attr:
+            self.ids += attr.value
+            attr = ppd.findNextAttr ('1284DeviceID')
+
+class DynamicDriver(Driver):
+    def __init__ (self, driver):
+        Driver.__init__ (self)
+        self.driver = driver
+        signal.signal (signal.SIGALRM, self._alarm)
+
+    def _alarm (self, sig, stack):
+        raise TimedOut
+
+    def list (self):
+        signal.alarm (60)
+        env = os.environ.copy ()
+        if RPM_BUILD_ROOT:
+            buildroot = RPM_BUILD_ROOT
+            if not buildroot.endswith (os.path.sep):
+                buildroot += os.path.sep
+
+            env["DESTDIR"] = RPM_BUILD_ROOT
+            env["LD_LIBRARY_PATH"] = "%susr/lib64:%susr/lib" % (buildroot,
+                                                                buildroot)
+
+        p = subprocess.Popen ([self.driver, "list"],
+                              stdout=subprocess.PIPE,
+                              stderr=subprocess.PIPE,
+                              env=env)
+        try:
+            (stdout, stderr) = p.communicate ()
+            signal.alarm (0)
+        except TimedOut:
+            posix.kill (p.pid, signal.SIGKILL)
+            raise
+
+	if stderr:
+		print >> sys.stderr, stderr
+
+	ppds = []
+	lines = stdout.split ('\n')
+	for line in lines:
+		l = shlex.split (line)
+		if len (l) < 5:
+                    continue
+                self.ids += l[4]
+
+        return Driver.list (self)
+
+class DrvDriver(PPDDriver):
+    def __init__ (self, pathname):
+        PPDDriver.__init__ (self)
+        self.drv = pathname
+
+    def _alarm (self, sig, stack):
+        raise TimedOut
+
+    def list (self):
+        tmpdir = os.environ.get ("TMPDIR", "/tmp") + os.path.sep
+        outputdir = tempfile.mkdtemp (dir=tmpdir)
+        
+        argv = [ "ppdc",
+                 "-d", outputdir,
+                 "-I", "/usr/share/cups/ppdc",
+                 self.drv ]
+
+        signal.alarm (60)
+        try:
+            p = subprocess.Popen (argv,
+                                  stdout=subprocess.PIPE,
+                                  stderr=subprocess.PIPE)
+        except OSError:
+            # ppdc not available.
+            os.rmdir (outputdir)
+            return Driver.list (self)
+
+        try:
+            (stdout, stderr) = p.communicate ()
+            signal.alarm (0)
+        except TimedOut:
+            posix.kill (p.pid, signal.SIGKILL)
+            raise
+
+        os.path.walk (outputdir, self.examine_directory, None)
+        os.rmdir (outputdir)
+        return Driver.list (self)
+
+    def examine_directory (self, unused, dirname, fnames):
+        for fname in fnames:
+            path = dirname + os.path.sep + fname
+            self.examine_file (path)
+            os.unlink (path)
+
+class TagBuilder:
+    def __init__ (self, filelist=None):
+        if filelist == None:
+            filelist = sys.stdin
+
+        paths = map (lambda x: x.rstrip (), filelist.readlines ())
+        self.ids = DeviceIDs ()
+
+        for path in paths:
+            if path.find ("/usr/lib/cups/driver/") != -1:
+                try:
+                    self.ids += DynamicDriver (path).list ()
+                except TimedOut:
+                    pass
+                except OSError, (e, s):
+                    if e == errno.EACCES or e == errno.ENOENT:
+                        # Not executable
+                        pass
+                    else:
+                        raise
+
+        if CAN_EXAMINE_PPDS:
+            for path in paths:
+                try:
+                    self.ids += PPDDriver (path).list ()
+                except TimedOut:
+                    pass
+
+    def get_tags (self):
+        return self.ids.get_tags ()
+
+if __name__ == "__main__":
+    builder = TagBuilder ()
+    tags = builder.get_tags ()
+    for tag in tags:
+        print tag

rpm-4.8.0-python-mibool.patch:
 rpmmi-py.c |   21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

--- NEW FILE rpm-4.8.0-python-mibool.patch ---
commit 40f788a7bf3741f9c613ff302d4e1b0ceec2658c
Author: Panu Matilainen <pmatilai at 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 */

rpm-4.8.0-python-nocontexts.patch:
 rpmmodule.c |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE rpm-4.8.0-python-nocontexts.patch ---
commit 8c5332984e32d27d28f9a440947b070af0d14c45
Author: Panu Matilainen <pmatilai at redhat.com>
Date:   Mon Mar 15 09:45:49 2010 +0200

    Tell python about RPMTRANS_FLAG_NOCONTEXTS

diff --git a/python/rpmmodule.c b/python/rpmmodule.c
index 4ace4bc..6159aee 100644
--- a/python/rpmmodule.c
+++ b/python/rpmmodule.c
@@ -386,6 +386,7 @@ static int initModule(PyObject *m)
     REGISTER_ENUM(RPMTRANS_FLAG_NODOCS);
     REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES);
     REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE);
+    REGISTER_ENUM(RPMTRANS_FLAG_NOCONTEXTS);
     REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE);
     REGISTER_ENUM(RPMTRANS_FLAG_REVERSE);
     REGISTER_ENUM(RPMTRANS_FLAG_NOPRE);


Index: rpm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/rpm/F-13/rpm.spec,v
retrieving revision 1.388
retrieving revision 1.389
diff -u -p -r1.388 -r1.389
--- rpm.spec	15 Feb 2010 14:24:07 -0000	1.388
+++ rpm.spec	23 Apr 2010 11:19:45 -0000	1.389
@@ -21,7 +21,7 @@
 Summary: The RPM package management system
 Name: rpm
 Version: %{rpmver}
-Release: 10%{?dist}
+Release: 14%{?dist}
 Group: System Environment/Base
 Url: http://www.rpm.org/
 Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
@@ -36,10 +36,9 @@ Patch2: rpm-4.5.90-gstreamer-provides.pa
 # this as Fedora-specific patch for now
 Patch3: rpm-4.7.90-fedora-specspo.patch
 # Postscript driver provides extraction is Fedora specific for now
-# TODO: merge these when things stabilize
-Patch4: rpm-4.8.0-psdriver.patch
-Patch5: rpm-4.8.0-psdriver-fixes.patch
-Patch6: rpm-4.8.0-psdriver-more-fixes.patch
+Patch4: rpm-4.8.0-psdriver-deps.patch
+# In current Fedora, man-pages pkg owns all the localized man directories
+Patch5: rpm-4.8.0-no-man-dirs.patch
 
 # Patches already in upstream
 Patch200: rpm-4.8.0-url-segfault.patch
@@ -48,6 +47,9 @@ Patch202: rpm-4.8.0-pythondeps-parallel.
 Patch203: rpm-4.8.0-python-bytecompile.patch
 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
@@ -191,9 +193,8 @@ packages on a system.
 %patch1 -p1 -b .pkgconfig-path
 %patch2 -p1 -b .gstreamer-prov
 %patch3 -p1 -b .fedora-specspo
-%patch4 -p1 -b .psdriver
-%patch5 -p1 -b .psdriver-fixes
-%patch6 -p1 -b .psdriver-more-fixes
+%patch4 -p1 -b .psdriver-deps
+%patch5 -p1 -b .no-man-dirs
 
 %patch200 -p1 -b .url-segfault
 %patch201 -p1 -b .verify-exitcode
@@ -201,6 +202,9 @@ packages on a system.
 %patch203 -p1 -b .python-bytecompile
 %patch204 -p1 -b .lazy-statfs
 %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
@@ -269,7 +273,6 @@ for dbutil in \
 do
     ln -s ../../bin/%{dbprefix}_${dbutil} $RPM_BUILD_ROOT/%{rpmhome}/rpmdb_${dbutil}
 done
-ln -s ../../bin/berkeley_%{dbprefix}_svc $RPM_BUILD_ROOT/%{rpmhome}/rpmdb_svc
 %endif
 
 %find_lang %{name}
@@ -417,6 +420,22 @@ exit 0
 %doc doc/librpm/html/*
 
 %changelog
+* Fri Apr 23 2010 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-14
+- lose dangling symlink to extinct (and useless) berkeley_db_svc (#585174)
+
+* Wed Mar 24 2010 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-13
+- fix python match iterator regression wrt boolean representation
+
+* Wed Mar 17 2010 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-12
+- unbreak find-lang --with-man from yesterdays braindamage
+
+* Tue Mar 16 2010 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-11
+- support single PPD providing driver for devices (#568351)
+- merge the psdriver patch pile into one
+- preserve empty lines in spec prep section (#573339)
+- teach python bindings about RPMTRANS_FLAG_NOCONTEXTS (related to #573111)
+- dont own localized man directories through find_lang (#569536)
+
 * Mon Feb 15 2010 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-10
 - drop bogus dependency on lzma, xz is used to handle the lzma format too
 


--- rpm-4.8.0-psdriver-fixes.patch DELETED ---


--- rpm-4.8.0-psdriver-more-fixes.patch DELETED ---


--- rpm-4.8.0-psdriver.patch DELETED ---



More information about the scm-commits mailing list