Commit 67aae9fb authored by Jim Fulton's avatar Jim Fulton

Merge branch 'master' of github.com:zopefoundation/ZODB

Conflicts:
	CHANGES.rst
	setup.py
parents 79f7f4ac 2d6773cd
......@@ -16,3 +16,4 @@ coverage.xml
*.egg
dist
testing.log
.eggs/
language: python
sudo: false
python:
- 2.6
- 2.7
- 3.2
- 3.3
- 3.4
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 .
......
......@@ -2,6 +2,17 @@
Change History
================
4.1.0 (unreleased)
==================
- Fix registration of custom logging level names ("BLATHER", "TRACE).
We have been registering them in the wrong order since 2004. Before
Python 3.4, the stdlib ``logging`` module masked the error by registering
them in *both* directions.
- Add support for Python 3.4.
4.0.1 (2014-07-13)
==================
......
include *.rst
include *.txt
include *.py
include *.ini
include .travis.yml
include buildout.cfg
include COPYING
recursive-include doc *
recursive-include src *
......
......@@ -35,7 +35,7 @@ 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 --find-links to point to local resources, you can keep
Note that by using --find-links to point to local resources, you can keep
this script from going over the network.
'''
......@@ -56,6 +56,11 @@ parser.add_option("-c", "--config-file",
"file to be used."))
parser.add_option("-f", "--find-links",
help=("Specify a URL to search for buildout releases"))
parser.add_option("--allow-site-packages",
action="store_true", default=False,
help=("Let bootstrap.py use existing site packages"))
parser.add_option("--setuptools-version",
help="use a specific setuptools version")
options, args = parser.parse_args()
......@@ -63,32 +68,42 @@ options, args = parser.parse_args()
######################################################################
# load/install setuptools
to_reload = False
try:
import pkg_resources
import setuptools
if options.allow_site_packages:
import setuptools
import pkg_resources
from urllib.request import urlopen
except ImportError:
ez = {}
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
# XXX use a more permanent ez_setup.py URL when available.
exec(urlopen('https://bitbucket.org/pypa/setuptools/raw/0.7.2/ez_setup.py'
).read(), ez)
setup_args = dict(to_dir=tmpeggs, download_delay=0)
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)
from urllib2 import urlopen
ez = {}
exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez)
if not options.allow_site_packages:
# ez_setup imports site, which adds site packages
# this will remove them from the path to ensure that incompatible versions
# of setuptools are not in the path
import site
# inside a virtualenv, there is no 'getsitepackages'.
# We can't remove these reliably
if hasattr(site, 'getsitepackages'):
for sitepackage_path in site.getsitepackages():
sys.path[:] = [x for x in sys.path if sitepackage_path not in x]
setup_args = dict(to_dir=tmpeggs, download_delay=0)
if options.setuptools_version is not None:
setup_args['version'] = options.setuptools_version
ez['use_setuptools'](**setup_args)
import setuptools
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
......@@ -119,10 +134,15 @@ if version is None and not options.accept_buildout_test_releases:
_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
try:
return not parsed_version.is_prerelease
except AttributeError:
# Older setuptools
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=[setuptools_path])
if find_links:
......@@ -149,8 +169,7 @@ cmd.append(requirement)
import subprocess
if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0:
raise Exception(
"Failed to execute command:\n%s",
repr(cmd)[1:-1])
"Failed to execute command:\n%s" % repr(cmd)[1:-1])
######################################################################
# Import and run buildout
......
......@@ -20,7 +20,7 @@ to application logic. ZODB includes features such as a plugable storage
interface, rich transaction support, and undo.
"""
VERSION = "4.0.1"
VERSION = "4.1.0dev"
import os
import sys
......@@ -52,6 +52,7 @@ Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
Programming Language :: Python :: 3.2
Programming Language :: Python :: 3.3
Programming Language :: Python :: 3.4
Programming Language :: Python :: Implementation :: CPython
Topic :: Database
Topic :: Software Development :: Libraries :: Python Modules
......
......@@ -43,5 +43,5 @@ __all__ = ["BLATHER", "TRACE"]
BLATHER = 15
TRACE = 5
logging.addLevelName("BLATHER", BLATHER)
logging.addLevelName("TRACE", TRACE)
logging.addLevelName(BLATHER, "BLATHER")
logging.addLevelName(TRACE, "TRACE")
......@@ -70,8 +70,6 @@ from ZODB.utils import u64, oid_repr, get_pickle_metadata
from ZODB.serialize import get_refs
from ZODB.POSException import POSKeyError
VERBOSE = 0
# There's a problem with oid. 'data' is its pickle, and 'serial' its
# serial number. 'missing' is a list of (oid, class, reason) triples,
# explaining what the problem(s) is(are).
......@@ -94,6 +92,7 @@ def report(oid, data, serial, missing):
print()
def main(path=None):
verbose = 0
if path is None:
import sys
import getopt
......@@ -101,7 +100,7 @@ def main(path=None):
opts, args = getopt.getopt(sys.argv[1:], "v")
for k, v in opts:
if k == "-v":
VERBOSE += 1
verbose += 1
path, = args
......@@ -127,7 +126,7 @@ def main(path=None):
except POSKeyError:
undone[oid] = 1
except:
if VERBOSE:
if verbose:
traceback.print_exc()
noload[oid] = 1
......
......@@ -10,7 +10,7 @@ from __future__ import print_function
import ZODB
from ZODB.FileStorage import FileStorage
from ZODB.utils import U64, get_pickle_metadata
from ZODB.referencesf import referencesf
from ZODB.serialize import referencesf
from six.moves import filter
def find_paths(root, maxdist):
......
......@@ -10,7 +10,7 @@
Usage: %(program)s [options]
Where:
Exactly one of -B or -R must be specified:
Exactly one of -B, -R, or -V must be specified:
-B / --backup
Backup current ZODB file.
......
......@@ -141,17 +141,16 @@ def connectionDebugInfo():
>>> c3 = db.open(before=c1.root()._p_serial)
>>> info = db.connectionDebugInfo()
>>> import pprint
>>> pprint.pprint(sorted(info, key=lambda i: str(i['opened'])), width=1)
[{'before': None,
'info': 'test info (2)',
'opened': '2008-12-04T20:40:44Z (1.40s)'},
{'before': '\x03zY\xd8\xc0m9\xdd',
'info': ' (0)',
'opened': '2008-12-04T20:40:45Z (0.30s)'},
{'before': None,
'info': ' (0)',
'opened': None}]
>>> info = sorted(info, key=lambda i: str(i['opened']))
>>> before = [x['before'] for x in info]
>>> opened = [x['opened'] for x in info]
>>> infos = [x['info'] for x in info]
>>> before
[None, '\x03zY\xd8\xc0m9\xdd', None]
>>> opened
['2008-12-04T20:40:44Z (1.40s)', '2008-12-04T20:40:45Z (0.30s)', None]
>>> infos
['test info (2)', ' (0)', ' (0)']
>>> time.time = real_time
......
[tox]
envlist = py26,py27,py32,py33,simple
envlist = py26,py27,py32,py33,py34,simple
[testenv]
commands =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment