Panu Matilainen [Thu, 17 Dec 2009 15:28:37 +0000 (17:28 +0200)]
Eliminate unnecessary rpmtsiOc()
- it used to be called from ordering code but now there's precisely
one caller which used it as a fancy way to do increment an integer... rip
Panu Matilainen [Thu, 17 Dec 2009 14:47:12 +0000 (16:47 +0200)]
Eliminate unused + unnecessary transaction element iterator mode
Panu Matilainen [Thu, 17 Dec 2009 14:17:45 +0000 (16:17 +0200)]
Eliminate unnecessary ts ping-pong inside rpmte
- rpmteNew() and the stuff it calls doesn't need the transaction set
for anything since a long time
- document ts argument to be unused
Panu Matilainen [Thu, 17 Dec 2009 14:10:37 +0000 (16:10 +0200)]
Fix ts element package file size on large packages
- RPMTAG_SIGSIZE is limited to 4GB, grab RPMTAG_LONGSIGSIZE through
headerGetNumber() grabs the correct tag automatically and simplifies
the code a bit
Panu Matilainen [Thu, 17 Dec 2009 13:51:58 +0000 (15:51 +0200)]
Eliminate now unnecessary rpmteFd()
- ...which should've never been exported in the first place
Panu Matilainen [Thu, 17 Dec 2009 13:50:09 +0000 (15:50 +0200)]
Move payload open into rpmte (internal) method
- the transaction element has all the necessary info to do this,
having it in psm just requires exposing otherwise unnecessary methods
Panu Matilainen [Thu, 17 Dec 2009 09:35:11 +0000 (11:35 +0200)]
Hardwire lead major version to 3 (RhBug:546663)
- besides the logic being backwards wrt intended --nodirtokens linkage,
LSB wants this to be 3 and .. it just makes no difference whatsover
anyway
Ville Skyttä [Wed, 16 Dec 2009 21:14:04 +0000 (23:14 +0200)]
Use grep -E and grep -F instead of egrep and fgrep.
egrep and fgrep are deprecated in GNU grep and "historical" in POSIX.
Panu Matilainen [Thu, 17 Dec 2009 08:38:08 +0000 (10:38 +0200)]
Move python ts element key refcounting back to C-side of things
- it's really the C-side that needs this, doing it in C avoids nasty
surprises when subclassing rpm.ts
- partial revert of commit
92d18d1d7139b37065ea742cfe0e8cee5e9c3500
Panu Matilainen [Thu, 17 Dec 2009 06:43:31 +0000 (08:43 +0200)]
Permit unexpanded macros to slip through spec tag sanity checks (RhBug:547997)
- For now, let %{} characters through our valid character set checks
on specs. This isn't right really, but unexpanded, unrelated macros
in spec can now cause failure to parse out buildrequires which would
allow those macros to be expanded. This needs a better fix.
Panu Matilainen [Wed, 16 Dec 2009 08:30:17 +0000 (10:30 +0200)]
Avoid mucking with fsm->rdbuf in fsmRmdirs() and fsmMkdirs()
- we already calculate the string length, just use a variable local array
Panu Matilainen [Wed, 16 Dec 2009 08:09:26 +0000 (10:09 +0200)]
Remove now unnecessary const-avoidance construct
Panu Matilainen [Wed, 16 Dec 2009 07:52:59 +0000 (09:52 +0200)]
Const-correctness on fsmRmdirs() and fsmMkdirs()
- both functions need to copy the data anyway as they modify, just use
a helper variable to cleanly avoid the const strings from iterator
Panu Matilainen [Wed, 16 Dec 2009 07:43:55 +0000 (09:43 +0200)]
Remove bogus const from fsm [o]path members and use of _constfree()
- in reality the paths point to allocated memory at all times
Panu Matilainen [Wed, 16 Dec 2009 07:25:55 +0000 (09:25 +0200)]
Simplify fsmFsPath()
Panu Matilainen [Tue, 15 Dec 2009 12:43:40 +0000 (14:43 +0200)]
Kill of ancient unused kludgery over buggy packages
Panu Matilainen [Tue, 15 Dec 2009 12:42:12 +0000 (14:42 +0200)]
Kill off stillborn fsm threading stuff
Panu Matilainen [Tue, 15 Dec 2009 12:39:57 +0000 (14:39 +0200)]
Kill off stillborn "not yet" code from 2001
Panu Matilainen [Mon, 14 Dec 2009 13:23:28 +0000 (15:23 +0200)]
Eliminate transaction disk space checking functions from the API
- The DSI stuff runs from deep inside rpmtsRun() with no chance for
API users to do anything with it. Bury into transaction.c and
make static to let us change the way it works without API constraints...
Panu Matilainen [Wed, 9 Dec 2009 13:11:39 +0000 (15:11 +0200)]
Fix memleak in python ts.hdrFromFdno()
- the python object holds reference to header here, decref the header
so it gets freed eventually
Panu Matilainen [Wed, 9 Dec 2009 12:42:03 +0000 (14:42 +0200)]
Fix a few list-related memleaks in python bindings
- PyList_Append() bumps the object reference count, callers need to
explicitly decref them... oops :)
Panu Matilainen [Wed, 9 Dec 2009 09:17:04 +0000 (11:17 +0200)]
Kick out one remaining sqlite reference (in the translations)
Florian Festi [Wed, 9 Dec 2009 08:50:58 +0000 (09:50 +0100)]
Remove sqlite hacks from rpmdb.c
Panu Matilainen [Tue, 8 Dec 2009 14:22:42 +0000 (16:22 +0200)]
Avoid exposing libmagic dependency in public headers
Panu Matilainen [Tue, 8 Dec 2009 13:58:51 +0000 (15:58 +0200)]
Avoid noise from python bytecompile on non-python pkgs (RhBug:539635)
- If a pattern doesn't match, we'd prefer an empty list instead of
unexpanded garbage thank you... nullglob shell option is just what the
doctor ordered but unfortunately its a bash-specific thing. Otoh there
are number of other bash-specific scripts in rpm so probably not
much of an issue...
Florian Festi [Thu, 3 Dec 2009 12:56:00 +0000 (13:56 +0100)]
Removed obsolete "db3" entry in dbi_config_default
Florian Festi [Thu, 3 Dec 2009 12:50:37 +0000 (13:50 +0100)]
Remove support for sqlite based rpm database
Also remove abstraction layer between rpmdb.h and the back end
in lib/backend/
Panu Matilainen [Mon, 7 Dec 2009 11:51:48 +0000 (13:51 +0200)]
Preparing for 4.8.0-beta1
Panu Matilainen [Mon, 7 Dec 2009 11:35:53 +0000 (13:35 +0200)]
Bump soname for all our libraries
- while the "really public" API of librpmio has only been enhanced,
librpm and librpmbuild use some supposedly internal bits which *have*
changed considerably, so just to prevent anybody thinking they can
combine librpmio from rpm 4.7 and librpm from this...
- librpmbuild hasn't seen much real change but some (unfortunately)
exposed struct members have changed so...
- librpm is mostly compatible but as rpmal has become internal API,
we need to bump (annoyingly, as nothing actually uses rpmal ... sigh)
Panu Matilainen [Mon, 7 Dec 2009 10:38:39 +0000 (12:38 +0200)]
ts.check() is supposed to return empty list when no problems
Panu Matilainen [Mon, 7 Dec 2009 09:32:51 +0000 (11:32 +0200)]
Disable the entire rpm.td type for now
- need to figure out saner semantics & stuff...
Panu Matilainen [Mon, 7 Dec 2009 09:21:14 +0000 (11:21 +0200)]
Make python header iterator return keys, not values
- this is how python built-in dictionary works, be consistent with that
- also avoids having to decide what to do with rpm.td type right now...
Panu Matilainen [Mon, 7 Dec 2009 07:12:44 +0000 (09:12 +0200)]
Always return malloced data from i18n extensions for consistency
Panu Matilainen [Sat, 5 Dec 2009 09:05:39 +0000 (11:05 +0200)]
Bump up the python version requirement to match reality
- Python >= 2.6 is known to work, 2.5 might be possible with __future__
imports but until somebody tests it...
Panu Matilainen [Wed, 2 Dec 2009 13:30:27 +0000 (15:30 +0200)]
Fix the posix chown test for selinux enabled systems (RhBug:543035)
- on selinux enabled systems, 'ls -l' mode string is longer than
expected here, just trim the ls output to our expected length
Panu Matilainen [Wed, 2 Dec 2009 11:22:11 +0000 (13:22 +0200)]
Back out overly strict file type check on %ghost files
- we currently only support creating regular files for %ghosts which
dont exist in the buildroot, but for files that do exist in the buildroot
there's no reason to place such limits (eg its perfectly ok to have
symlinks marked as %ghosts)
Panu Matilainen [Fri, 27 Nov 2009 13:57:44 +0000 (15:57 +0200)]
Use AS_HELP_STRING() for configure option output
Panu Matilainen [Fri, 27 Nov 2009 13:12:52 +0000 (15:12 +0200)]
Remove pointless message translation from check-buildroot
- these scripts aren't processed for translation and unlikely to ever be...
- fixes the remaining complaint from ticket #62
Panu Matilainen [Fri, 27 Nov 2009 13:10:57 +0000 (15:10 +0200)]
Remove ancient broken scripts from the repository
- also eliminates one more "bashism" complaint of ticket #62
Panu Matilainen [Fri, 27 Nov 2009 12:55:12 +0000 (14:55 +0200)]
Fiddling with ulimit settings does not belong to dep extractor scripts
- fixes one of the bashisms in ticket #62
Panu Matilainen [Fri, 27 Nov 2009 07:28:11 +0000 (09:28 +0200)]
Correctly pass optional tag argument from hdr.dsFromHeader() (ticket #108)
Panu Matilainen [Fri, 27 Nov 2009 07:15:56 +0000 (09:15 +0200)]
Dont try to pass anything to rpm.fi() from hdr.fiFromHeader()
- hdr.fiFromHeader() is just a deprecated backwards compatibility dummy
and doesn't need to pass anything as there were no meaningful
parameters in older versions
Panu Matilainen [Thu, 26 Nov 2009 08:22:41 +0000 (10:22 +0200)]
Dont fail build on unrecognized non-executable files (ticket #105)
- Generally only executable files are critical for dependency extraction,
whereas oddball application data files can cause unnecessary build
failure due to libmagic misdetections etc, so just let non-executables
pass with a warning and mark them as unknown data
Panu Matilainen [Thu, 26 Nov 2009 07:46:48 +0000 (09:46 +0200)]
Just use autoreconf in autogen.sh (ticket #109)
- instead of doing stuff by "hand" and getting it wrong, let autoreconf
worry about getting it right (if nothing else, we can then blame
autoreconf instead of ourselves ;)
Panu Matilainen [Wed, 25 Nov 2009 14:42:43 +0000 (16:42 +0200)]
Fix signature password checking result on abnormal conditions (RhBug:496754)
- Execve() failure wasn't returning an error code, causing rpm to
think the password was ok when we couldn't even try verifying
- Stricter return code checking from the password checking child:
the password can only be ok if the child exits with WIFEXITED() *and*
WIFEXITCODE() of 0. Also WIFEXITCODE() should only be called if
WIFEXITED() returns true.
Panu Matilainen [Wed, 25 Nov 2009 13:07:17 +0000 (15:07 +0200)]
We can't handle OpenPGP subkeys or secret keys, so dont even try
- parsing subkeys ends up overwriting data in the main key, causing
bogus signature checking failures
- this is the final missing piece of RhBug:436812, short of adding
proper support for subkeys (maybe someday...)
Panu Matilainen [Tue, 24 Nov 2009 14:57:46 +0000 (16:57 +0200)]
Dont blow up on headers without requireflags in rpmdsNew()
Panu Matilainen [Tue, 24 Nov 2009 12:36:03 +0000 (14:36 +0200)]
Nuke leftover debug junk
Panu Matilainen [Tue, 24 Nov 2009 12:27:49 +0000 (14:27 +0200)]
Support constructing header data from python
- no proper i18n string support yet, just the basic types
- basic data type validation only, no overflow checking for integer types
- for lists, validate all items before trying to insert anything
- duplicate tag creation not permitted
- appending not permitted, only assignment (and deletion already)
- there are probably bugs...
- watch out for librpm bugs when passed incomplete headers, ugh
Panu Matilainen [Tue, 24 Nov 2009 12:02:52 +0000 (14:02 +0200)]
Disable rpm.td type for now
- its not that clear that exporting the td type is really useful
(certainly not in its current form), avoid exporting an interface we
might not want to support
Panu Matilainen [Mon, 23 Nov 2009 14:45:09 +0000 (16:45 +0200)]
Fix hdrContains() return value on error
Panu Matilainen [Mon, 23 Nov 2009 13:12:04 +0000 (15:12 +0200)]
Remove bogus rpmpopt.pot file (ticket #77)
- this is supposed to automatically generated on update-po time from
toplevel rpmpopt file and merged into rpm.pot but has been broken for
a long long time and also the $ translation marking has been deprecated
for security reasons
Panu Matilainen [Sat, 21 Nov 2009 09:31:50 +0000 (11:31 +0200)]
Remove hdr.has_key() method, support 'key in h' style instead
- Python 3 removed has_key() from dictionaries, as the 'in' way is the
way of the future support that from the start (has_key() is not in
any released rpm version so its safe to remove)
Panu Matilainen [Sat, 21 Nov 2009 09:07:29 +0000 (11:07 +0200)]
Remove unnecessary hdr.instance() method
- this is available through tag extension now, no point having a
separate method for it
Panu Matilainen [Sat, 21 Nov 2009 08:55:24 +0000 (10:55 +0200)]
Typos in exception messages
Panu Matilainen [Fri, 20 Nov 2009 14:00:06 +0000 (16:00 +0200)]
Error out early trying to install on readonly fs (ticket #99, RhBug:464750)
- simply make readonly filesystems appear as full, preventing install
early instead of failing with cpio errors in middle of transaction
Panu Matilainen [Fri, 20 Nov 2009 09:49:05 +0000 (11:49 +0200)]
Convert French man page to Unix line-endings
Panu Matilainen [Fri, 20 Nov 2009 09:12:39 +0000 (11:12 +0200)]
Fix build with binutils-gold (ticket #107)
- patch from Michal Čihař
Panu Matilainen [Fri, 20 Nov 2009 08:32:47 +0000 (10:32 +0200)]
Add RPMTAG_EPOCHNUM tag extension
- return RPMTAG_EPOCH but convert non-existent epoch to 0, as rpm internals
treat it
Panu Matilainen [Thu, 19 Nov 2009 08:51:23 +0000 (10:51 +0200)]
Add spec package type with access to headers to python rpmb module
- permits python to access parsed headers from spec files
- ticket #14, RhBug:462726
Panu Matilainen [Thu, 19 Nov 2009 08:16:15 +0000 (10:16 +0200)]
Permit header object generation from PyCObjects
- needed for generating header objects from other extension modules &
might be handy in some other cases too
- patently type-unsafe but as long as python doesn't provide a better
way, not really our headache
Panu Matilainen [Wed, 18 Nov 2009 15:41:39 +0000 (17:41 +0200)]
Lose the silly specFromSpec()
- its our own private data structure we're accessing here, no need
for extra wrappers and nothing outside spec-py.c needs this
Panu Matilainen [Wed, 18 Nov 2009 15:28:13 +0000 (17:28 +0200)]
Turn current python spec methods into read-only attributes via getseters
- incompatible, but nobody is really using the spec bindings for
anything as there's been very little you've been able do with them
- having the stuff accessible as getseters means we dont need 50 different
fooSet() methods if/when we permit modifying these from python
Panu Matilainen [Wed, 18 Nov 2009 15:16:45 +0000 (17:16 +0200)]
Sanitize python spec.sources()
- spec without sources is perfectly valid, just return an empty list
instead of invalid NULL return without exception set and simplify
Panu Matilainen [Wed, 18 Nov 2009 15:03:32 +0000 (17:03 +0200)]
Put a bit of sanity into python spec methods
- prep, build etc missing from spec are not errors
- instead of returning NULLs (with no exception set!), just return None
for anything that doesn't exist
- dont bother with NULL checks, if s->spec is NULL then something else
has screwed up big time
Panu Matilainen [Wed, 18 Nov 2009 10:21:41 +0000 (12:21 +0200)]
Oops, tp_dealloc doesn't return anything
Panu Matilainen [Wed, 18 Nov 2009 09:33:57 +0000 (11:33 +0200)]
Fix rpmProblem reference counting in python bindings
Panu Matilainen [Wed, 18 Nov 2009 09:22:55 +0000 (11:22 +0200)]
Declare a few python functions only taking one argument as such
Panu Matilainen [Wed, 18 Nov 2009 09:17:51 +0000 (11:17 +0200)]
Rip python checkSignals() wtf'ery
- since the function takes no arguments, declare it as such...
Panu Matilainen [Wed, 18 Nov 2009 08:54:58 +0000 (10:54 +0200)]
Python archscore() only ever takes one argument, simplify
Panu Matilainen [Wed, 18 Nov 2009 08:41:26 +0000 (10:41 +0200)]
Make python ts.problems() return a python list, not rpm.ps object
- rpm.ps object only supports iteration and subscript (with wonderfully
wacko semantics), returning a regular list serves us better
- rip the now useless rpm.ps object type
Panu Matilainen [Wed, 18 Nov 2009 07:40:30 +0000 (09:40 +0200)]
Remove unused psFromPs()
Panu Matilainen [Wed, 18 Nov 2009 07:35:41 +0000 (09:35 +0200)]
Eliminate broken rpmps append() method from python bindings (RhBug:538218)
- The code to insert new problems has been using invalid conversion code
causing crashes since 2004 and nobody noticed, safe to say this is an
unused interface. Additionally the method argument flags were wrong, it
was declared as METH_VARARGS but actually expected METH_O semantics. RIP.
Panu Matilainen [Fri, 30 Oct 2009 11:31:01 +0000 (13:31 +0200)]
Add in-memory hash for caching rpmdb dependency lookups
- worst case behavior for uncached dependency lookups can be disastrous,
eg > 35s vs < 1s on my laptop for trying to remove /bin/sh provider
- we only bother caching rpmdb lookups, the other cases plenty fast already
- using in-memory cache avoids nasty in vs out of chroot issues with
temporary db files, which otherwise were about as fast
Panu Matilainen [Fri, 30 Oct 2009 07:37:36 +0000 (09:37 +0200)]
Document our new format extensions
Panu Matilainen [Fri, 30 Oct 2009 07:33:26 +0000 (09:33 +0200)]
Add file verifyflags format extension
Panu Matilainen [Fri, 30 Oct 2009 07:15:36 +0000 (09:15 +0200)]
Add file state format extension
Panu Matilainen [Fri, 30 Oct 2009 07:13:08 +0000 (09:13 +0200)]
Update rpmtd formats comments to match reality
- we dont require exact int32 etc types, any numeric type works
David Malcolm [Thu, 15 Oct 2009 19:14:58 +0000 (15:14 -0400)]
Convert relative imports within rpm package to absolute imports
Panu Matilainen [Thu, 29 Oct 2009 11:54:47 +0000 (13:54 +0200)]
Permit any file-like object in rpm.setLogFile()
- using PyObject_AsFileDescriptor() does away with another Python 3
incompatibility and makes it more flexible.. but also more murky
as rpmlogSetFile() only accepts FILE * streams...
Panu Matilainen [Thu, 29 Oct 2009 10:56:18 +0000 (12:56 +0200)]
Update module initialization to work with both Python 2.x and 3.x
- split common initialization tasks to separate functions, so that only the
details of initializing a python module object differ
- patch from David Malcolm
Panu Matilainen [Wed, 28 Oct 2009 14:35:32 +0000 (16:35 +0200)]
Remove unnecessary (cmpfunc) casts from our type objects
- cmpfunc is no more in Python 3 and casting NULL to anything makes
little sense anyhow
Panu Matilainen [Wed, 28 Oct 2009 14:27:15 +0000 (16:27 +0200)]
Eliminate ambiguous tp_compare and tp_richcompare from rpm.ds
- both comparison types are highly ambiguous, eg what on earth does
"foo provides bar = 1" < "bar requires foo > 2" mean?
- if straight ds1.evr vs ds2.evr comparison is needed, we'll be better
off supporting that through rpm.versionCompare() which has clear semantics
- avoids another Python 3 incompatibility too
Panu Matilainen [Wed, 28 Oct 2009 14:25:46 +0000 (16:25 +0200)]
Add ds.Compare() as a thin wrapper over rpmdsCompare()
Panu Matilainen [Wed, 28 Oct 2009 14:24:16 +0000 (16:24 +0200)]
Type-check rpm.ds() comparison/search arguments everywhere
- also make them only accept one argument, simplifying arg parsing
Panu Matilainen [Wed, 28 Oct 2009 14:17:21 +0000 (16:17 +0200)]
Rip out stillborn code
Panu Matilainen [Wed, 28 Oct 2009 13:22:39 +0000 (15:22 +0200)]
Eliminate the ambigious tp_compare from rpm.hdr
- Avoids another Python 3 incompatibility as it doesn't have tp_compare
anymore
- We could add a compatible tp_richcompare, but comparisons like
'if h1 < h2: do foo' are highly ambiguous, callers are better of
using explicit rpm.versinCompare(h1, h2) instead
Panu Matilainen [Wed, 28 Oct 2009 13:55:35 +0000 (15:55 +0200)]
Use PyObject_AsFileDescriptor() instead of object type comparison
- this permits any file-like object implementing .fileno() method
(including rpm.fd) to be dup'ed, not just PyFile subtypes
- this also avoids yet another incompatibility with Python 3 which doesn't
have PyFile_Check() and PyFile_AsFile() at all
Panu Matilainen [Wed, 28 Oct 2009 08:05:39 +0000 (10:05 +0200)]
Dont bother calculating hardlink counts when the value is not used
- speeds up non-verbose --list queries by some ~50%
Panu Matilainen [Tue, 27 Oct 2009 14:07:43 +0000 (16:07 +0200)]
Support multiple python versions in brp-python-bytecompile (RhBug:53117)
- For *.py files in python library path, use matching python interpreter
version for compiling, this is especially needed for Python 3 which
is very different from Python 2 code. And even if the code compiled
with a wrong version, it would be recompiled at run-time when invoked
with the intended python version, causing verification errors etc.
- For *.py files outside the library path, use "system python" which
might not be always correct but we dont really know any better.
- Patch from David Malcolm
Panu Matilainen [Tue, 27 Oct 2009 13:15:20 +0000 (15:15 +0200)]
Argh, typo in previous commit
Panu Matilainen [Tue, 27 Oct 2009 12:52:08 +0000 (14:52 +0200)]
Remove explicit Py_TPFLAGS_HAVE_RICHCOMPARE from ds type flags
- HAVE_RICHCOMPARE is included in Py_TPFLAGS_DEFAULT since at least
Python 2.3 which is as far back as we care, no need to explicitly
set it. Eliminating the unnecessary flag removes another Python 3
compatibility issue as the flag is gone there.
Panu Matilainen [Tue, 27 Oct 2009 08:57:35 +0000 (10:57 +0200)]
Make disk space problem reporting slightly saner (RhBug:517418)
- Only report disk space/inode issues for packages that are affected
instead of piling up all the problems in all filesystems on all remaining
packages
- The messages are still ambiguous at best, need to figure out something
better one of these days...
Panu Matilainen [Tue, 27 Oct 2009 08:44:04 +0000 (10:44 +0200)]
Let Python decide the "native" string type for tag names
- Py_BuildValue("s", ...) returns unicode objects in Python 3, string
objects in Python 2, this is what we want here
Panu Matilainen [Fri, 23 Oct 2009 19:10:44 +0000 (22:10 +0300)]
Permit unicode as ts.dbMatch() key argument
Panu Matilainen [Fri, 23 Oct 2009 18:25:08 +0000 (21:25 +0300)]
Allow unicode objects as tag name everywhere
Panu Matilainen [Fri, 23 Oct 2009 18:07:10 +0000 (21:07 +0300)]
Add conversion function for handling python unicode -> string issues
- In Python 3 everything is unicode, forcing each and every caller to
convert manually is a bit much.
Panu Matilainen [Thu, 22 Oct 2009 07:37:49 +0000 (10:37 +0300)]
Make --httpproxy and friends work again (RhBug:529214)
- macro fiddling to pass the macros set by --httpproxy etc popt aliases
to the url helper
- ftp proxy and http proxy control the same thing (http proxy) now to
keep things simple
- while at it, add %__urlhelper_localopts for local customization needs
without having to override the entire __urlhelperopts macro
Panu Matilainen [Wed, 21 Oct 2009 10:21:01 +0000 (13:21 +0300)]
On Python 3, use macros to alias all usage of PyInt_ to PyLong_ equivalents
- Python 3 unified PyInt with PyLong, the former no longer exists
- Based on a patch by David Malcolm
Panu Matilainen [Wed, 21 Oct 2009 10:15:44 +0000 (13:15 +0300)]
Replace PyString usage with PyBytes everywhere
- In Python 2.6 PyBytes is just an alias for PyString, Python 3.0
removed PyString entirely
- Add compatibility defines for Python < 2.6
- Based on David Malcolm's Python 3.x efforts