Hello community, here is the log from the commit of package python-ZODB for openSUSE:Factory checked in at 2014-02-03 16:13:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ZODB (Old) and /work/SRC/openSUSE:Factory/.python-ZODB.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-ZODB" Changes: -------- --- /work/SRC/openSUSE:Factory/python-ZODB/python-ZODB.changes 2013-10-01 08:34:36.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-ZODB.new/python-ZODB.changes 2014-02-03 16:13:16.000000000 +0100 @@ -1,0 +2,13 @@ +Sat Feb 1 21:17:50 UTC 2014 - os-dev@jacraig.com + +- Add patch to fix test during build. This is fixed upstream for next release. +- Update old package URL. +- Update to 4.0.0 (minor changes from git commit log): + * Try invoking parent close() via super(), hoping to squash ResourceWarning. + Also, avoid shadowing the 'file' builtin / alias with locals. + * Bend over backward to avoid ResourceWarnings. + * Use os.pathsep when constructing $PYTHONPATH (fix test failure on Windows). + * Update to latest 2.2.0 bootstrap.py + * Correctly quote Windows pathnames + +------------------------------------------------------------------- Old: ---- ZODB-4.0.0b3.tar.gz New: ---- ZODB-4.0.0.tar.gz fix-for-upstream-test.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ZODB.spec ++++++ --- /var/tmp/diff_new_pack.38bhF6/_old 2014-02-03 16:13:17.000000000 +0100 +++ /var/tmp/diff_new_pack.38bhF6/_new 2014-02-03 16:13:17.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-ZODB # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2013 LISA GmbH, Bingen, Germany. # # All modifications and additions to the file contributed by third parties @@ -18,28 +18,29 @@ Name: python-ZODB -Version: 4.0.0b3 +Version: 4.0.0 Release: 0 Summary: Zope Object Database: object database and persistence License: ZPL-2.1 Group: Development/Libraries/Python -Url: http://www.zope.org/Products/ZODB +Url: http://www.zodb.org/ Source: https://pypi.python.org/packages/source/Z/ZODB/ZODB-%{version}.tar.gz -BuildRequires: python-setuptools -BuildRequires: python-persistent-devel +# PATCH-FIX-UPSTREAM fix-for-upstream-test.patch -- already fixed in git 4.0.0b3-16-g1cdf9a7 +Patch1: fix-for-upstream-test.patch BuildRequires: python-BTrees BuildRequires: python-ZConfig -BuildRequires: python-transaction +BuildRequires: python-persistent-devel +BuildRequires: python-setuptools BuildRequires: python-six +BuildRequires: python-transaction BuildRequires: python-zc.lockfile BuildRequires: python-zdaemon >= 4.0.0 BuildRequires: python-zope.interface - -Requires: python-persistent Requires: python-BTrees Requires: python-ZConfig -Requires: python-transaction +Requires: python-persistent Requires: python-six +Requires: python-transaction Requires: python-zc.lockfile Requires: python-zdaemon >= 4.0.0 Requires: python-zope.interface @@ -72,6 +73,7 @@ %prep %setup -q -n ZODB-%{version} +%patch1 -p1 %build python setup.py build ++++++ ZODB-4.0.0b3.tar.gz -> ZODB-4.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/.gitignore new/ZODB-4.0.0/.gitignore --- old/ZODB-4.0.0b3/.gitignore 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -bin -eggs -develop-eggs -parts -.installed.cfg -build -docs/_build -__pycache__ -*.pyc -*.so -.tox -.coverage -nosetests.xml -coverage.xml -*.egg-info -*.egg -dist -testing.log diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/.travis.yml new/ZODB-4.0.0/.travis.yml --- old/ZODB-4.0.0b3/.travis.yml 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/.travis.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -language: python -python: - - 2.6 - - 2.7 - - 3.2 - - 3.3 -install: - - travis_retry pip install BTrees ZConfig manuel persistent six transaction zc.lockfile zdaemon zope.interface zope.testing zope.testrunner - - travis_retry pip install -e . -script: - - zope-testrunner -u --test-path=src --auto-color --auto-progress - - zope-testrunner -f --test-path=src --auto-color --auto-progress -notifications: - email: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/CHANGES.rst new/ZODB-4.0.0/CHANGES.rst --- old/ZODB-4.0.0b3/CHANGES.rst 2013-06-12 01:32:05.000000000 +0200 +++ new/ZODB-4.0.0/CHANGES.rst 2013-09-18 12:59:42.000000000 +0200 @@ -2,6 +2,11 @@ Change History ================ +4.0.0 (2013-08-18) +================== + +Finally released. + 4.0.0b3 (2013-06-11) ==================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/COPYING new/ZODB-4.0.0/COPYING --- old/ZODB-4.0.0b3/COPYING 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/COPYING 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -See: - - - the copyright notice in: COPYRIGHT.txt - - - The Zope Public License in LICENSE.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/PKG-INFO new/ZODB-4.0.0/PKG-INFO --- old/ZODB-4.0.0b3/PKG-INFO 2013-06-12 01:34:01.000000000 +0200 +++ new/ZODB-4.0.0/PKG-INFO 2013-09-18 13:03:07.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ZODB -Version: 4.0.0b3 +Version: 4.0.0 Summary: Zope Object Database: object database and persistence Home-page: http://www.zodb.org/ Author: Zope Foundation and Contributors @@ -33,7 +33,7 @@ Compatibility ============= - ZODB 4.0 requires Python 2.6 or 2.7. + ZODB 4.0 requires Python 2.6, 2.7, 3.3. Prerequisites ============= @@ -161,6 +161,11 @@ Change History ================ + 4.0.0 (2013-08-18) + ================== + + Finally released. + 4.0.0b3 (2013-06-11) ==================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/README.rst new/ZODB-4.0.0/README.rst --- old/ZODB-4.0.0b3/README.rst 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/README.rst 2013-09-18 13:01:45.000000000 +0200 @@ -16,7 +16,7 @@ Compatibility ============= -ZODB 4.0 requires Python 2.6 or 2.7. +ZODB 4.0 requires Python 2.6, 2.7, 3.3. Prerequisites ============= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/bootstrap.py new/ZODB-4.0.0/bootstrap.py --- old/ZODB-4.0.0b3/bootstrap.py 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/bootstrap.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,165 +0,0 @@ -############################################################################## -# -# Copyright (c) 2006 Zope Foundation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Bootstrap a buildout-based project - -Simply run this script in a directory containing a buildout.cfg. -The script accepts buildout command-line options, so you can -use the -c option to specify an alternate configuration file. -""" - -import os, shutil, sys, tempfile -from optparse import OptionParser - -tmpeggs = tempfile.mkdtemp() - -usage = '''\ -[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] - -Bootstraps a buildout-based project. - -Simply run this script in a directory containing a buildout.cfg, using the -Python that you want bin/buildout to use. - -Note that by using --setup-source and --download-base to point to -local resources, you can keep this script from going over the network. -''' - -parser = OptionParser(usage=usage) -parser.add_option("-v", "--version", help="use a specific zc.buildout version") - -parser.add_option("-t", "--accept-buildout-test-releases", - dest='accept_buildout_test_releases', - action="store_true", default=False, - help=("Normally, if you do not specify a --version, the " - "bootstrap script and buildout gets the newest " - "*final* versions of zc.buildout and its recipes and " - "extensions for you. If you use this flag, " - "bootstrap and buildout will get the newest releases " - "even if they are alphas or betas.")) -parser.add_option("-c", "--config-file", - help=("Specify the path to the buildout configuration " - "file to be used.")) -parser.add_option("-f", "--find-links", - help=("Specify a URL to search for buildout releases")) - - -options, args = parser.parse_args() - -###################################################################### -# load/install distribute - -to_reload = False -try: - import pkg_resources, setuptools - if not hasattr(pkg_resources, '_distribute'): - to_reload = True - raise ImportError -except ImportError: - ez = {} - - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen - - exec(urlopen('http://python-distribute.org/distribute_setup.py').read(), ez) - setup_args = dict(to_dir=tmpeggs, download_delay=0, no_fake=True) - ez['use_setuptools'](**setup_args) - - if to_reload: - reload(pkg_resources) - import pkg_resources - # This does not (always?) update the default working set. We will - # do it. - for path in sys.path: - if path not in pkg_resources.working_set.entries: - pkg_resources.working_set.add_entry(path) - -###################################################################### -# Install buildout - -ws = pkg_resources.working_set - -cmd = [sys.executable, '-c', - 'from setuptools.command.easy_install import main; main()', - '-mZqNxd', tmpeggs] - -find_links = os.environ.get( - 'bootstrap-testing-find-links', - options.find_links or - ('http://downloads.buildout.org/' - if options.accept_buildout_test_releases else None) - ) -if find_links: - cmd.extend(['-f', find_links]) - -distribute_path = ws.find( - pkg_resources.Requirement.parse('distribute')).location - -requirement = 'zc.buildout' -version = options.version -if version is None and not options.accept_buildout_test_releases: - # Figure out the most recent final version of zc.buildout. - import setuptools.package_index - _final_parts = '*final-', '*final' - def _final_version(parsed_version): - for part in parsed_version: - if (part[:1] == '*') and (part not in _final_parts): - return False - return True - index = setuptools.package_index.PackageIndex( - search_path=[distribute_path]) - if find_links: - index.add_find_links((find_links,)) - req = pkg_resources.Requirement.parse(requirement) - if index.obtain(req) is not None: - best = [] - bestv = None - for dist in index[req.project_name]: - distv = dist.parsed_version - if _final_version(distv): - if bestv is None or distv > bestv: - best = [dist] - bestv = distv - elif distv == bestv: - best.append(dist) - if best: - best.sort() - version = best[-1].version -if version: - requirement = '=='.join((requirement, version)) -cmd.append(requirement) - -import subprocess -if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=distribute_path)) != 0: - raise Exception( - "Failed to execute command:\n%s", - repr(cmd)[1:-1]) - -###################################################################### -# Import and run buildout - -ws.add_entry(tmpeggs) -ws.require(requirement) -import zc.buildout.buildout - -if not [a for a in args if '=' not in a]: - args.append('bootstrap') - -# if -c was provided, we push it back into args for buildout' main function -if options.config_file is not None: - args[0:0] = ['-c', options.config_file] - -zc.buildout.buildout.main(args) -shutil.rmtree(tmpeggs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/buildout.cfg new/ZODB-4.0.0/buildout.cfg --- old/ZODB-4.0.0b3/buildout.cfg 2013-06-08 05:35:53.000000000 +0200 +++ new/ZODB-4.0.0/buildout.cfg 1970-01-01 01:00:00.000000000 +0100 @@ -1,49 +0,0 @@ -[buildout] -develop = . -parts = - test - scripts -versions = versions - -[versions] -zc.recipe.testrunner = 2.0.0 -zc.lockfile = 1.1.0 -zope.interface = 4.0.3 -ZConfig = 3.0.3 -BTrees = 4.0.5 -persistent = 4.0.6 -transaction = 1.4.1 -zdaemon = 4.0.0a1 - -[test] -recipe = zc.recipe.testrunner -eggs = - ZODB [test] -initialization = - import os, tempfile - try: os.mkdir('tmp') - except: pass - tempfile.tempdir = os.path.abspath('tmp') -defaults = ['--all'] - -[coverage-test] -recipe = zc.recipe.testrunner -eggs = ${test:eggs} -initialization = - import os, tempfile - try: os.mkdir('tmp') - except: pass - tempfile.tempdir = os.path.abspath('tmp') -defaults = ['--coverage', '${buildout:directory}/coverage'] - -[coverage-report] -recipe = zc.recipe.egg -eggs = z3c.coverage -scripts = coveragereport=coverage-report -arguments = ('${buildout:directory}/coverage', - '${buildout:directory}/coverage/report') - -[scripts] -recipe = zc.recipe.egg -eggs = ${test:eggs} -interpreter = py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/ez_setup.py new/ZODB-4.0.0/ez_setup.py --- old/ZODB-4.0.0b3/ez_setup.py 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/ez_setup.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,276 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c9" -DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', - 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', - 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', - 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', - 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', - 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', - 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', - 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', - 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', - 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', - 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', - 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', - 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', - 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', -} - -import sys, os -try: from hashlib import md5 -except ImportError: from md5 import md5 - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules - def do_download(): - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - try: - import pkg_resources - except ImportError: - return do_download() - try: - pkg_resources.require("setuptools>="+version); return - except pkg_resources.VersionConflict, e: - if was_imported: - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first, using 'easy_install -U setuptools'." - "\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - else: - del pkg_resources, sys.modules['pkg_resources'] # reload ok - return do_download() - except pkg_resources.DistributionNotFound: - return do_download() - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/log.ini new/ZODB-4.0.0/log.ini --- old/ZODB-4.0.0b3/log.ini 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/log.ini 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -# This file configures the logging module for the test harness: -# critical errors are logged to testing.log; everything else is -# ignored. - -# Documentation for the file format is at -# http://www.red-dove.com/python_logging.html#config - -[logger_root] -level=CRITICAL -handlers=normal - -[handler_normal] -class=FileHandler -level=NOTSET -formatter=common -args=('testing.log', 'a') -filename=testing.log -mode=a - -[formatter_common] -format=------ - %(asctime)s %(levelname)s %(name)s %(message)s -datefmt=%Y-%m-%dT%H:%M:%S - -[loggers] -keys=root - -[handlers] -keys=normal - -[formatters] -keys=common diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/release.py new/ZODB-4.0.0/release.py --- old/ZODB-4.0.0b3/release.py 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/release.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,80 +0,0 @@ -#! /usr/bin/env python -"""Update version numbers and release dates for the next release. - -usage: release.py version date - -version should be a string like "3.2.0c1" -date should be a string like "23-Sep-2003" - -The following files are updated: - - setup.py - - NEWS.txt - - doc/guide/zodb.tex - - src/ZEO/__init__.py - - src/ZEO/version.txt - - src/ZODB/__init__.py -""" - -import fileinput -import os -import re - -# In file filename, replace the first occurrence of regexp pat with -# string repl. -def replace(filename, pat, repl): - from sys import stderr as e # fileinput hijacks sys.stdout - foundone = False - for line in fileinput.input([filename], inplace=True, backup="~"): - if foundone: - print line, - else: - match = re.search(pat, line) - if match is not None: - foundone = True - - new = re.sub(pat, repl, line) - print new, - - print >> e, "In %s, replaced:" % filename - print >> e, " ", repr(line) - print >> e, " ", repr(new) - - else: - print line, - - if not foundone: - print >> e, "*" * 60, "Oops!" - print >> e, " Failed to find %r in %r" % (pat, filename) - -# Nothing in our codebase cares about ZEO/version.txt. Jeremy said -# someone asked for it so that a shell script could read up the ZEO -# version easily. -# Before ZODB 3.4, the ZEO version was one smaller than the ZODB version; -# e.g., ZEO 2.2.7 shipped with ZODB 3.2.7. Now ZEO and ZODB share their -# version number. -def write_zeoversion(path, version): - with open(path, "w") as f: - print >> f, version - -def main(args): - version, date = args - - replace("setup.py", - r'^VERSION = "\S+"$', - 'VERSION = "%s"' % version) - replace("src/ZODB/__init__.py", - r'__version__ = "\S+"', - '__version__ = "%s"' % version) - replace("src/ZEO/__init__.py", - r'version = "\S+"', - 'version = "%s"' % version) - write_zeoversion("src/ZEO/version.txt", version) - replace("NEWS.txt", - r"^Release date: .*", - "Release date: %s" % date) - replace("doc/guide/zodb.tex", - r"release{\S+}", - "release{%s}" % version) -if __name__ == "__main__": - import sys - main(sys.argv[1:]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/setup.py new/ZODB-4.0.0/setup.py --- old/ZODB-4.0.0b3/setup.py 2013-06-12 01:32:09.000000000 +0200 +++ new/ZODB-4.0.0/setup.py 2013-09-18 12:57:06.000000000 +0200 @@ -20,7 +20,7 @@ interface, rich transaction support, and undo. """ -VERSION = "4.0.0b3" +VERSION = "4.0.0" import os import sys diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/src/ZODB/blob.py new/ZODB-4.0.0/src/ZODB/blob.py --- old/ZODB-4.0.0b3/src/ZODB/blob.py 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/src/ZODB/blob.py 2013-09-18 12:56:21.000000000 +0200 @@ -75,8 +75,8 @@ raise TypeError('Blobs do not support subclassing.') self.__setstate__() if data is not None: - with self.open('w') as file: - file.write(data) + with self.open('w') as f: + f.write(data) def __setstate__(self, state=None): # we use lists here because it will allow us to add and remove @@ -315,7 +315,7 @@ def close(self): self.blob.closed(self) - file.close(self) + super(BlobFile, self).close() _pid = str(os.getpid()) @@ -786,8 +786,8 @@ files.sort() latest = files[-1] # depends on ever-increasing tids files.remove(latest) - for file in files: - remove_committed(os.path.join(oid_path, file)) + for f in files: + remove_committed(os.path.join(oid_path, f)) else: remove_committed_dir(oid_path) continue diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/src/ZODB/tests/blob_transaction.txt new/ZODB-4.0.0/src/ZODB/tests/blob_transaction.txt --- old/ZODB-4.0.0b3/src/ZODB/tests/blob_transaction.txt 2013-06-04 19:34:42.000000000 +0200 +++ new/ZODB-4.0.0/src/ZODB/tests/blob_transaction.txt 2013-09-18 12:56:21.000000000 +0200 @@ -27,7 +27,8 @@ >>> blob1._p_oid >>> blob1._p_jar - >>> with blob1.open() as fp: fp.read() + >>> with blob1.open() as fp: + ... fp.read() 'this is blob 1' It doesn't clear the file because there is no previously committed version: @@ -51,7 +52,8 @@ >>> with blob1.open('w') as file: ... _ = file.write(b'this is new blob 1') - >>> with blob1.open() as fp: fp.read() + >>> with blob1.open() as fp: + ... fp.read() 'this is new blob 1' >>> fname = blob1._p_blob_uncommitted >>> os.path.exists(fname) @@ -62,7 +64,8 @@ False >>> blob1._p_blob_uncommitted - >>> with blob1.open() as fp: fp.read() + >>> with blob1.open() as fp: + ... fp.read() 'this is blob 1' Opening a blob gives us a filehandle. Getting data out of the @@ -103,12 +106,12 @@ >>> bool(blob1a._p_changed) False - >>> with blob1a.open('r') as fp: fp.read() + >>> with blob1a.open('r') as fp: + ... fp.read() 'this is blob 1' - >>> blob1afh3 = blob1a.open('a') - >>> bool(blob1a._p_changed) - True - >>> _ = blob1afh3.write(b'woot!') + >>> with blob1a.open('a') as blob1afh3: + ... assert(bool(blob1a._p_changed)) + ... _ = blob1afh3.write(b'woot!') >>> blob1afh3.close() We can open more than one blob object during the course of a single @@ -124,11 +127,14 @@ changes we've made to blob, blob1a (these refer to the same object) and blob2 (a different object) should be evident:: - >>> with blob1.open('r') as fp: fp.read() + >>> with blob1.open('r') as fp: + ... fp.read() 'this is blob 1woot!' - >>> with blob1a.open('r') as fp: fp.read() + >>> with blob1a.open('r') as fp: + ... fp.read() 'this is blob 1woot!' - >>> with blob2.open('r') as fp: fp.read() + >>> with blob2.open('r') as fp: + ... fp.read() 'this is blob 3' We shouldn't be able to persist a blob filehandle at commit time @@ -136,8 +142,9 @@ pickled appears to be particulary unhelpful for casual users at the moment):: - >>> root1['wontwork'] = blob1.open('r') - >>> transaction.commit() + >>> with blob1.open('r') as f: + ... root1['wontwork'] = f + ... transaction.commit() Traceback (most recent call last): ... TypeError: ... @@ -160,7 +167,8 @@ >>> with blob1c4.open('a') as blob1c4fh1: ... _ = blob1c4fh1.write(b'this is from connection 4') >>> tm1.commit() - >>> with root3['blob1'].open('r') as fp: fp.read() + >>> with root3['blob1'].open('r') as fp: + ... fp.read() 'this is blob 1woot!this is from connection 3' >>> tm2.commit() Traceback (most recent call last): @@ -170,10 +178,12 @@ After the conflict, the winning transaction's result is visible on both connections:: - >>> with root3['blob1'].open('r') as fp: fp.read() + >>> with root3['blob1'].open('r') as fp: + ... fp.read() 'this is blob 1woot!this is from connection 3' >>> tm2.abort() - >>> with root4['blob1'].open('r') as fp: fp.read() + >>> with root4['blob1'].open('r') as fp: + ... fp.read() 'this is blob 1woot!this is from connection 3' You can't commit a transaction while blob files are open: @@ -205,21 +215,22 @@ >>> connection5 = database.open() >>> root5 = connection5.root() >>> blob = ZODB.blob.Blob() - >>> blob_fh = blob.open("w") - >>> _ = blob_fh.write(b"I'm a happy blob.") - >>> blob_fh.close() + >>> with blob.open("w") as blob_fh: + ... _ = blob_fh.write(b"I'm a happy blob.") >>> root5['blob'] = blob >>> transaction.commit() - >>> with root5['blob'].open("r") as fp: fp.read() + >>> with root5['blob'].open("r") as fp: + ... fp.read() "I'm a happy blob." - >>> blob_fh = root5['blob'].open("a") - >>> _ = blob_fh.write(b" And I'm singing.") - >>> blob_fh.close() - >>> with root5['blob'].open("r") as fp: fp.read() + >>> with root5['blob'].open("a") as blob_fh: + ... _ = blob_fh.write(b" And I'm singing.") + >>> with root5['blob'].open("r") as fp: + ... fp.read() "I'm a happy blob. And I'm singing." >>> savepoint = transaction.savepoint(optimistic=True) - >>> with root5['blob'].open("r") as fp: fp.read() + >>> with root5['blob'].open("r") as fp: + ... fp.read() "I'm a happy blob. And I'm singing." Savepoints store the blobs in temporary directories in the temporary @@ -241,7 +252,8 @@ >>> with root5['blob'].open("a") as file: ... _ = file.write(b" And I'm dancing.") - >>> with root5['blob'].open("r") as fp: fp.read() + >>> with root5['blob'].open("r") as fp: + ... fp.read() "I'm a happy blob. And I'm singing. And I'm dancing." >>> savepoint = transaction.savepoint() @@ -255,7 +267,8 @@ ... _ = file.write(b" And the weather is beautiful.") >>> savepoint.rollback() - >>> with root5['blob'].open("r") as fp: fp.read() + >>> with root5['blob'].open("r") as fp: + ... fp.read() "I'm a happy blob. And I'm singing. And I'm dancing." >>> transaction.abort() @@ -275,12 +288,12 @@ >>> connection6 = database.open() >>> root6 = connection6.root() >>> blob = ZODB.blob.Blob() - >>> blob_fh = blob.open("w") - >>> _ = blob_fh.write(b"I'm a happy blob.") - >>> blob_fh.close() + >>> with blob.open("w") as blob_fh: + ... _ = blob_fh.write(b"I'm a happy blob.") >>> root6['blob'] = blob >>> transaction.commit() - >>> with open(blob.committed()) as fp: fp.read() + >>> with open(blob.committed()) as fp: + ... fp.read() "I'm a happy blob." We can also read committed data by calling open with a 'c' flag: @@ -344,7 +357,8 @@ BlobError: Uncommitted changes >>> transaction.commit() - >>> with open(blob.committed()) as fp: fp.read() + >>> with open(blob.committed()) as fp: + ... fp.read() "I'm a happy blob." You can't open a committed blob file for writing: @@ -397,7 +411,8 @@ Of course the old data should be unaffected: - >>> with open(blob_storage.loadBlob(blob._p_oid, oldserial)) as fp: fp.read() + >>> with open(blob_storage.loadBlob(blob._p_oid, oldserial)) as fp: + ... fp.read() "I'm a happy blob." Similarly, the new object wasn't added to the storage: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/src/ZODB/tests/testSerialize.py new/ZODB-4.0.0/src/ZODB/tests/testSerialize.py --- old/ZODB-4.0.0b3/src/ZODB/tests/testSerialize.py 2013-06-12 01:29:43.000000000 +0200 +++ new/ZODB-4.0.0/src/ZODB/tests/testSerialize.py 2013-09-18 12:56:21.000000000 +0200 @@ -135,15 +135,15 @@ fqn = os.path.join(self._tempdir, 'Data.fs') prep_args = [sys.executable, '-c', 'from ZODB.tests.testSerialize import _functest_prep; ' - '_functest_prep("%s")' % fqn] + '_functest_prep(%s)' % repr(fqn)] # buildout doesn't arrange for the sys.path to be exported, # so force it ourselves environ = os.environ.copy() - environ['PYTHONPATH'] = ':'.join(sys.path) + environ['PYTHONPATH'] = os.pathsep.join(sys.path) subprocess.check_call(prep_args, env=environ) load_args = [sys.executable, '-c', 'from ZODB.tests.testSerialize import _functest_load; ' - '_functest_load("%s")' % fqn] + '_functest_load(%s)' % repr(fqn)] subprocess.call(load_args, env=environ) def _working_failing_datetimes(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/src/ZODB.egg-info/PKG-INFO new/ZODB-4.0.0/src/ZODB.egg-info/PKG-INFO --- old/ZODB-4.0.0b3/src/ZODB.egg-info/PKG-INFO 2013-06-12 01:34:00.000000000 +0200 +++ new/ZODB-4.0.0/src/ZODB.egg-info/PKG-INFO 2013-09-18 13:03:04.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ZODB -Version: 4.0.0b3 +Version: 4.0.0 Summary: Zope Object Database: object database and persistence Home-page: http://www.zodb.org/ Author: Zope Foundation and Contributors @@ -33,7 +33,7 @@ Compatibility ============= - ZODB 4.0 requires Python 2.6 or 2.7. + ZODB 4.0 requires Python 2.6, 2.7, 3.3. Prerequisites ============= @@ -161,6 +161,11 @@ Change History ================ + 4.0.0 (2013-08-18) + ================== + + Finally released. + 4.0.0b3 (2013-06-11) ==================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/src/ZODB.egg-info/SOURCES.txt new/ZODB-4.0.0/src/ZODB.egg-info/SOURCES.txt --- old/ZODB-4.0.0b3/src/ZODB.egg-info/SOURCES.txt 2013-06-12 01:34:01.000000000 +0200 +++ new/ZODB-4.0.0/src/ZODB.egg-info/SOURCES.txt 2013-09-18 13:03:04.000000000 +0200 @@ -1,20 +1,11 @@ -.gitignore -.travis.yml 3.11.txt CHANGES.rst -COPYING COPYRIGHT.txt HISTORY.txt LICENSE.txt MANIFEST.in README.rst -bootstrap.py -buildout.cfg -ez_setup.py -log.ini -release.py setup.py -tox.ini doc/HISTORY.rst doc/HOWTO-Blobs-NFS.txt doc/storage.pdf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ZODB-4.0.0b3/tox.ini new/ZODB-4.0.0/tox.ini --- old/ZODB-4.0.0b3/tox.ini 2013-06-04 19:34:43.000000000 +0200 +++ new/ZODB-4.0.0/tox.ini 1970-01-01 01:00:00.000000000 +0100 @@ -1,55 +0,0 @@ -[tox] -envlist = py26,py27,py32,py33,simple - -[testenv] -commands = -# Run unit tests first. - zope-testrunner -u --test-path=src --auto-color --auto-progress -# Only run functional tests if unit tests pass. - zope-testrunner -f --test-path=src --auto-color --auto-progress -# without explicit deps, setup.py test will download a bunch of eggs into $PWD -deps = - BTrees - ZConfig - manuel - persistent - six - transaction - zc.lockfile - zdaemon - zope.interface - zope.testing - zope.testrunner - -[testenv:simple] -# Test that 'setup.py test' works -basepython = - python2.7 -commands = - python setup.py test -q -deps = {[testenv]deps} - -[testenv:coverage] -basepython = - python2.7 -commands = -# The installed version messes up nose's test discovery / coverage reporting -# So, we uninstall that from the environment, and then install the editable -# version, before running nosetests. - pip uninstall -y ZODB - pip install -e . - nosetests --with-xunit --with-xcoverage -deps = - nose - coverage - nosexcover - BTrees - ZConfig - manuel - persistent - six - transaction - zc.lockfile - zdaemon - zope.interface - zope.testing ++++++ fix-for-upstream-test.patch ++++++ diff --git a/src/ZODB/tests/testUtils.py b/src/ZODB/tests/testUtils.py index bc3d089..17803cc 100644 --- a/src/ZODB/tests/testUtils.py +++ b/src/ZODB/tests/testUtils.py @@ -20,7 +20,7 @@ from persistent import Persistent from zope.testing import renormalizing from ZODB.utils import U64, p64, u64 -from ZODB._compat import loads, long +from ZODB._compat import loads NUM = 100 @@ -35,9 +35,9 @@ checker = renormalizing.RENormalizing([ class TestUtils(unittest.TestCase): - small = [random.randrange(1, 1<<32, int=long) + small = [random.randrange(1, 1<<32) for i in range(NUM)] - large = [random.randrange(1<<32, 1<<64, int=long) + large = [random.randrange(1<<32, 1<<64) for i in range(NUM)] all = small + large -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org