Commit 6dd809d2 authored by Jim Fulton's avatar Jim Fulton

Converted to a buildout and converted externals to dependencies.

(Merged from 3.7 branch.)
parent 16e60e9a
ZEO
ZODB
ZODB-Scripts
ZopeUndo
This diff is collapsed.
include MANIFEST MANIFEST.in
include *.txt
include test.py log.ini
recursive-include src *.h *.c *.xml *.txt *.sh *.conf *.bat
include src/ZConfig/scripts/zconfig
graft doc
graft src/scripts
graft src/ZConfig/doc
global-exclude .cvsignore
......@@ -35,8 +35,23 @@ Blobs
use from a few kilobytes to at least multiple hundred megabytes.
What's new on ZODB 3.7b2?
=========================
What's new on ZODB 3.7.0b3?
===========================
Packaging
---------
- (3.7.0b3) ZODB is now packaged without it's dependencies
ZODB no longer includes copies of dependencies such as
ZConfig, zope.interface and so on. It now treats these as
dependencies. If ZODB is installed with easy_install or
zc.buildout, the dependencies will be installed automatically.
- (3.7.0b3) ZODB is now a buildout
ZODB checkouts are now built and tested using zc.buildout.
ClientStorage
-------------
......
<distribution>
doc
log.ini
test.py
COPYRIGHT.txt
LICENSE.txt
NEWS.txt
README.txt
</distribution>
<collection>
doc -
setup.py -
src -
zpkg.conf -
buildsupport -
</collection>
Metadata-version: 1.1
Name: ZODB3
License: ZPL 2.1
Home-page: http://www.zope.org/Wikis/ZODB
Summary: Zope Object Database: object database and persistence
Description:
The Zope Object Database provides an object-oriented database
for Python that provides a high-degree of transparency.
Applications can take advantage of object database features
with few, if any, changes to application logic. ZODB includes
features such as a plugable storage interface, rich
transaction support, and undo.
Maintainer: ZODB Developers
Maintainer-email: zodb-dev@zope.org
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Zope Public License
Classifier: Programming Language :: Python
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: Unix
......@@ -16,7 +16,6 @@ The components you get with the ZODB release are as follows:
- Standard storages such as FileStorage
- The persistent BTrees modules
- ZEO
- ZConfig -- a Zope configuration language
- documentation
Our primary development platforms are Linux and Windows 2000. The
......@@ -34,7 +33,7 @@ older versions of the BTrees package will not be able to load
persistent BTrees that use 64-bit data (an exception will be raised on
load).
The Zope 2.8 release, and Zope3 releases, should be compatible with this
The Zope 2.10 release, and Zope 3.3 releases, should be compatible with this
version of ZODB. Note that Zope 2.7 and higher includes ZEO, so this package
should only be needed to run a ZEO server.
......@@ -74,11 +73,24 @@ be sure that you've installed the development RPMs too, since ZODB
builds Python extensions. If you have the source release of ZODB,
you will need a C compiler.
You also need the ZConfig, zdaemon, zope.interface, zope.proxy and
zope.testing packages. If you are using easy_install or zc.buildout to
install ZODB, then these will be installed for you automatically.
Installation
------------
ZODB is released as a distutils package. To build it, run the setup
script::
ZODB is released as a distutils package. The easiest ways to build
and install it are to use `easy_install
<http://peak.telecommunity.com/DevCenter/EasyInstall>`_, or
`zc.buildout <http://www.python.org/pypi/zc.buildout>`_.
To install by hand, first install the dependencies, ZConfig, zdaemon,
zope.interface, zope.proxy and zope.testing. These can be found
either in the `Python Package Index <http://www.python.org/pypi>`_,
or at http://download.zope.org/distribution/.
To build it, run the setup script::
% python setup.py build
......@@ -104,13 +116,19 @@ This should now make all of ZODB accessible to your Python programs.
Testing for Developers
----------------------
When working from a ZODB checkout, do an in-place build instead::
The ZODB check outs are `buldouts <http://www.python.org/pypi/zc.buildout>`_.
When working from a ZODB checkout, first run the bootstrap.py script
to initialize the buildout:
% python bootstrap.py
% python setup.py build_ext -i
and then use the buildout script to build ZODB and gather the dependencies:
% bin/buildout
followed by::
This creates a test script:
% python test.py -v
% bin/test -v
This command will run all the tests, printing a single dot for each
test. When it finishes, it will print a test summary. The exact
......
##############################################################################
#
# Copyright (c) 2004 Zope Corporation and Contributors.
# Copyright (c) 2006 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
......@@ -11,5 +11,42 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
#
# This file is necessary to make this directory a package.
"""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.
$Id$
"""
import os, shutil, sys, tempfile, urllib2
tmpeggs = tempfile.mkdtemp()
ez = {}
exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
).read() in ez
ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
import pkg_resources
cmd = 'from setuptools.command.easy_install import main; main()'
if sys.platform == 'win32':
cmd = '"%s"' % cmd # work around spawn lamosity on windows
ws = pkg_resources.working_set
assert os.spawnle(
os.P_WAIT, sys.executable, sys.executable,
'-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
dict(os.environ,
PYTHONPATH=
ws.find(pkg_resources.Requirement.parse('setuptools')).location
),
) == 0
ws.add_entry(tmpeggs)
ws.require('zc.buildout')
import zc.buildout.buildout
zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
shutil.rmtree(tmpeggs)
[buildout]
develop = .
parts = test scripts
find-links = http://download.zope.org/distribution/
[test]
recipe = zc.recipe.testrunner
eggs = ZODB3
[scripts]
recipe = zc.recipe.egg
eggs = ZODB3
interpreter = py
\documentclass{howto}
\title{ZODB/ZEO Programming Guide}
\release{3.7.0a0}
\release{3.7.0b3}
\date{\today}
\author{A.M.\ Kuchling}
......
......@@ -20,6 +20,8 @@ to application logic. ZODB includes features such as a plugable storage
interface, rich transaction support, and undo.
"""
VERSION = "3.7.0b3"
# The (non-obvious!) choices for the Trove Development Status line:
# Development Status :: 5 - Production/Stable
# Development Status :: 4 - Beta
......@@ -39,17 +41,15 @@ Operating System :: Unix
import glob
import os
import sys
from distutils.core import setup
from distutils.extension import Extension
from distutils import dir_util
from distutils.core import setup
from distutils.dist import Distribution
from distutils.command.install_lib import install_lib
from distutils.command.build_py import build_py
from distutils.util import convert_path
if sys.version_info < (2, 3, 4):
print "ZODB 3.3 requires Python 2.3.4 or higher"
if sys.version_info < (2, 4, 2):
print "This version of ZODB requires Python 2.4.2 or higher"
sys.exit(0)
# Include directories for C extensions
......@@ -113,32 +113,15 @@ TimeStamp = Extension(name = 'persistent.TimeStamp',
sources= ['src/persistent/TimeStamp.c']
)
##coptimizations = Extension(name = 'ZODB.coptimizations',
## include_dirs = include,
## sources= ['src/ZODB/coptimizations.c']
## )
winlock = Extension(name = 'ZODB.winlock',
include_dirs = include,
sources = ['src/ZODB/winlock.c']
)
cZopeInterface = Extension(
name = 'zope.interface._zope_interface_coptimizations',
sources= ['src/zope/interface/_zope_interface_coptimizations.c']
)
cZopeProxy = Extension(
name = 'zope.proxy._zope_proxy_proxy',
sources= ['src/zope/proxy/_zope_proxy_proxy.c']
)
exts += [cPersistence,
cPickleCache,
TimeStamp,
winlock,
cZopeInterface,
cZopeProxy,
]
# The ZODB.zodb4 code is not being packaged, because it is only
......@@ -147,80 +130,26 @@ exts += [cPersistence,
packages = ["BTrees", "BTrees.tests",
"ZEO", "ZEO.auth", "ZEO.zrpc", "ZEO.tests",
"ZODB", "ZODB.FileStorage", "ZODB.tests",
#"Persistence", "Persistence.tests",
"persistent", "persistent.tests",
"transaction", "transaction.tests",
"ThreadedAsync",
"zdaemon", "zdaemon.tests",
"zope",
"zope.interface", "zope.interface.tests",
"zope.interface.common", "zope.interface.common.tests",
"zope.proxy", "zope.proxy.tests",
"zope.testing",
"ZopeUndo", "ZopeUndo.tests",
"ZConfig", "ZConfig.tests",
"ZConfig.components",
"ZConfig.components.basic", "ZConfig.components.basic.tests",
"ZConfig.components.logger", "ZConfig.components.logger.tests",
"ZConfig.tests.library", "ZConfig.tests.library.widget",
"ZConfig.tests.library.thing",
]
scripts = ["src/scripts/fsdump.py",
"src/scripts/fsoids.py",
"src/scripts/fsrefs.py",
"src/scripts/fstail.py",
"src/scripts/fstest.py",
"src/scripts/repozo.py",
"src/scripts/zeopack.py",
"src/scripts/runzeo.py",
"src/scripts/zeopasswd.py",
"src/scripts/mkzeoinst.py",
"src/scripts/zeoctl.py",
"src/ZConfig/scripts/zconfig",
"src/zdaemon/zdrun.py",
"src/zdaemon/zdctl.py",
]
def copy_other_files(cmd, outputbase):
# A delicate dance to copy files with certain extensions
# into a package just like .py files.
extensions = ["*.conf", "*.xml", "*.txt", "*.sh"]
directories = [
"transaction",
"transaction/tests",
"persistent/tests",
"ZConfig/components/basic",
"ZConfig/components/logger",
"ZConfig/tests/input",
"ZConfig/tests/library",
"ZConfig/tests/library/thing",
"ZConfig/tests/library/thing/extras",
"ZConfig/tests/library/widget",
"ZEO",
"ZODB",
"ZODB/tests",
"zdaemon",
"zdaemon/tests",
"zope/interface", "zope/interface/tests",
"zope/testing",
]
# zope.testing's testrunner-ex is not a package, but contains
# packages, in a fairly elaborate subtree. Major special-casing
# for this. First find all the (non-SVN) directories starting
# there, and append them all to `directories`.
for root, dirs, files in os.walk("src/zope/testing/testrunner-ex"):
dirs[:] = [d for d in dirs if ".svn" not in d]
assert root.startswith("src/")
normpath = root[4:].replace("\\", "/")
directories.append(normpath)
for dir in directories:
exts = extensions
if dir.startswith("zope/testing/testrunner-ex"):
# testrunner-ex isn't a package, so not even the .py files
# get copied unless we force that there.
exts = extensions + ["*.py"]
dir = convert_path(dir)
inputdir = os.path.join("src", dir)
outputdir = os.path.join(outputbase, dir)
......@@ -263,8 +192,55 @@ class MyDistribution(Distribution):
doclines = __doc__.split("\n")
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
extra = dict(
scripts = ["src/ZODB/scripts/fsdump.py",
"src/ZODB/scripts/fsoids.py",
"src/ZODB/scripts/fsrefs.py",
"src/ZODB/scripts/fstail.py",
"src/ZODB/scripts/fstest.py",
"src/ZODB/scripts/repozo.py",
"src/ZEO/scripts/zeopack.py",
"src/ZEO/scripts/runzeo.py",
"src/ZEO/scripts/zeopasswd.py",
"src/ZEO/scripts/mkzeoinst.py",
"src/ZEO/scripts/zeoctl.py",
],
)
else:
entry_points = """
[console_scripts]
fsdump = ZODB.FileStorage.fsdump:main
fsoids = ZODB.scripts.fsoids:main
fsrefs = ZODB.scripts.fsrefs:main
fstail = ZODB.scripts.fstail:Main
repozo = ZODB.scripts.repozo:main
zeopack = ZEO.scripts.zeopack:main
runzeo = ZEO.runzeo:main
zeopasswd = ZEO.zeopasswd:main
mkzeoinst = ZEO.mkzeoinst:main
zeoctl = ZEO.zeoctl:main
"""
extra = dict(
install_requires = [
'zope.interface',
'zope.proxy',
'zope.testing',
'ZConfig',
'zdaemon',
],
zip_safe = False,
dependency_links = ['http://download.zope.org/distribution/'],
entry_points = entry_points,
)
scripts = []
setup(name="ZODB3",
version="3.5.0a6",
version=VERSION,
maintainer="Zope Corporation",
maintainer_email="zodb-dev@zope.org",
url = "http://www.zope.org/Wikis/ZODB",
......@@ -280,5 +256,4 @@ setup(name="ZODB3",
classifiers = filter(None, classifiers.split("\n")),
long_description = "\n".join(doclines[2:]),
distclass = MyDistribution,
scripts = scripts,
)
**extra)
......@@ -22,4 +22,4 @@ ZEO is now part of ZODB; ZODB's home on the web is
"""
# The next line must use double quotes, so release.py recognizes it.
version = "3.7.0a0"
version = "3.7.0b3"
This directory contains a collection of utilities for working with
ZEO. Some are more useful than others. If you install ZODB using
distutils ("python setup.py install"), some of these will be
installed.
Unless otherwise noted, these scripts are invoked with the name of the
Data.fs file as their only argument. Example: checkbtrees.py data.fs.
parsezeolog.py -- parse BLATHER logs from ZEO server
This script may be obsolete. It has not been tested against the
current log output of the ZEO server.
Reports on the time and size of transactions committed by a ZEO
server, by inspecting log messages at BLATHER level.
timeout.py -- script to test transaction timeout
usage: timeout.py address delay [storage-name]
This script connects to a storage, begins a transaction, calls store()
and tpc_vote(), and then sleeps forever. This should trigger the
transaction timeout feature of the server.
zeopack.py -- pack a ZEO server
The script connects to a server and calls pack() on a specific
storage. See the script for usage details.
zeoreplay.py -- experimental script to replay transactions from a ZEO log
Like parsezeolog.py, this may be obsolete because it was written
against an earlier version of the ZEO server. See the script for
usage details.
zeoup.py
usage: zeoup.py [options]
The test will connect to a ZEO server, load the root object, and
attempt to update the zeoup counter in the root. It will report
success if it updates to counter or if it gets a ConflictError. A
ConflictError is considered a success, because the client was able to
start a transaction.
See the script for details about the options.
zeoserverlog.py -- analyze ZEO server log for performance statistics
See the module docstring for details; there are a large number of
options. New in ZODB3 3.1.4.
zeoqueue.py -- report number of clients currently waiting in the ZEO queue
See the module docstring for details.
......@@ -101,6 +101,8 @@ def options(args):
return auth_protocol, auth_db, auth_realm, delete, username, password
def main(args=None, dbclass=None):
if args is None:
args = sys.argv[1:]
p, auth_db, auth_realm, delete, username, password = options(args)
if p is None:
usage("Error: configuration does not specify auth protocol")
......
......@@ -130,3 +130,7 @@ class Dumper:
if not dlen:
sbp = self.file.read(8)
print >> self.dest, "backpointer: %d" % u64(sbp)
def main():
import sys
fsdump(sys.argv[1])
......@@ -13,7 +13,7 @@
##############################################################################
# The next line must use double quotes, so release.py recognizes it.
__version__ = "3.7.0a0"
__version__ = "3.7.0b3"
import sys
......
This directory contains a collection of utilities for managing ZODB
databases. Some are more useful than others. If you install ZODB
using distutils ("python setup.py install"), fsdump.py, fstest.py,
repozo.py, and zeopack.py will be installed in /usr/local/bin.
using distutils ("python setup.py install"), a few of these will be installed.
Unless otherwise noted, these scripts are invoked with the name of the
Data.fs file as their only argument. Example: checkbtrees.py data.fs.
......@@ -95,45 +94,12 @@ This script connects to a storage, begins a transaction, calls store()
and tpc_vote(), and then sleeps forever. This should trigger the
transaction timeout feature of the server.
zeopack.py -- pack a ZEO server
The script connects to a server and calls pack() on a specific
storage. See the script for usage details.
zeoreplay.py -- experimental script to replay transactions from a ZEO log
Like parsezeolog.py, this may be obsolete because it was written
against an earlier version of the ZEO server. See the script for
usage details.
zeoup.py
usage: zeoup.py [options]
The test will connect to a ZEO server, load the root object, and
attempt to update the zeoup counter in the root. It will report
success if it updates to counter or if it gets a ConflictError. A
ConflictError is considered a success, because the client was able to
start a transaction.
See the script for details about the options.
zodbload.py -- exercise ZODB under a heavy synthesized Zope-like load
See the module docstring for details. Note that this script requires
Zope. New in ZODB3 3.1.4.
zeoserverlog.py -- analyze ZEO server log for performance statistics
See the module docstring for details; there are a large number of
options. New in ZODB3 3.1.4.
fsrefs.py -- check FileStorage for dangling references
......@@ -148,8 +114,3 @@ Optional argument -n specifies ntxn, and defaults to 10.
migrate.py -- do a storage migration and gather statistics
See the module docstring for details.
zeoqueue.py -- report number of clients currently waiting in the ZEO queue
See the module docstring for details.
......@@ -130,6 +130,9 @@ def analyze_rec(report, record):
except Exception, err:
print err
if __name__ == "__main__":
def main():
path = sys.argv[1]
report(analyze(path))
if __name__ == "__main__":
main()
......@@ -65,7 +65,15 @@ def get_subobjects(obj):
return sub
def main(fname):
def main(fname=None):
if fname is None:
import sys
try:
fname, = sys.argv[1:]
except:
print __doc__
sys.exit(2)
fs = FileStorage(fname, read_only=1)
cn = ZODB.DB(fs).open()
rt = cn.root()
......@@ -112,11 +120,4 @@ def main(fname):
print "total", len(fs._index), "found", found
if __name__ == "__main__":
import sys
try:
fname, = sys.argv[1:]
except:
print __doc__
sys.exit(2)
main(fname)
main()
......@@ -2,8 +2,7 @@
"""Print a text summary of the contents of a FileStorage."""
from ZODB.FileStorage.fsdump import fsdump
from ZODB.FileStorage.fsdump import main
if __name__ == "__main__":
import sys
fsdump(sys.argv[1])
main()
......@@ -95,7 +95,19 @@ def report(oid, data, serial, missing):
print "\toid %s %s: %r" % (oid_repr(oid), reason, description)
print
def main(path):
def main(path=None):
if path is None:
import sys
import getopt
opts, args = getopt.getopt(sys.argv[1:], "v")
for k, v in opts:
if k == "-v":
VERBOSE += 1
path, = args
fs = FileStorage(path, read_only=1)
# Set of oids in the index that failed to load due to POSKeyError.
......@@ -142,13 +154,4 @@ def main(path):
report(oid, data, serial, missing)
if __name__ == "__main__":
import sys
import getopt
opts, args = getopt.getopt(sys.argv[1:], "v")
for k, v in opts:
if k == "-v":
VERBOSE += 1
path, = args
main(path)
main()
......@@ -121,7 +121,9 @@ def revision_detail(lifetimes, classes):
if keep:
h.report("Number of revisions for %s" % name, binsize=10)
def main(path):
def main(path=None):
if path is None:
path = sys.argv[1]
txn_objects = Histogram() # histogram of txn size in objects
txn_bytes = Histogram() # histogram of txn size in bytes
obj_size = Histogram() # histogram of object size
......@@ -196,4 +198,4 @@ def main(path):
class_detail(class_size)
if __name__ == "__main__":
main(sys.argv[1])
main()
......@@ -39,11 +39,15 @@ def main(path, ntxn):
th = th.prev_txn()
i -= 1
if __name__ == "__main__":
def Main():
ntxn = 10
opts, args = getopt.getopt(sys.argv[1:], "n:")
path, = args
for k, v in opts:
if k == '-n':
ntxn = int(v)
main(path, ntxn)
Main(path, ntxn)
if __name__ == "__main__":
Main()
......@@ -203,7 +203,7 @@ def usage():
print __doc__
sys.exit(-1)
if __name__ == "__main__":
def main():
import getopt
try:
......@@ -223,3 +223,6 @@ if __name__ == "__main__":
sys.exit(-1)
chatter("no errors detected")
if __name__ == "__main__":
main()
# Some simple tests for zeopack.py
# For this to work, zeopack.py must by on your PATH.
from ZODB.FileStorage import FileStorage
from ZODB.tests.StorageTestBase import StorageTestBase
from ZEO.tests import forker
import ZODB
import os
import socket
import tempfile
import threading
import time
import unittest
# TODO: The forker interface isn't clearly defined. It's different on
# different branches of ZEO. This will break someday.
# TODO: Only handle the Unix variant of the forker. Just to give Tim
# something to do.
class PackerTests(StorageTestBase):
def setUp(self):
self.started = 0
def start(self):
self.started =1
self.path = tempfile.mktemp(suffix=".fs")
self._storage = FileStorage(self.path)
self.db = ZODB.DB(self._storage)
self.do_updates()
self.pid, self.exit = forker.start_zeo_server(self._storage, self.addr)
def do_updates(self):
for i in range(100):
self._dostore()
def tearDown(self):
if not self.started:
return
self.db.close()
self._storage.close()
self.exit.close()
try:
os.kill(self.pid, 9)
except os.error:
pass
try:
os.waitpid(self.pid, 0)
except os.error, err:
##print "waitpid failed", err
pass
for ext in '', '.old', '.lock', '.index', '.tmp':
path = self.path + ext
try:
os.remove(path)
except os.error:
pass
def set_inet_addr(self):
self.host = socket.gethostname()
self.port = forker.get_port()
self.addr = self.host, self.port
def testPack(self):
self.set_inet_addr()
self.start()
status = os.system("zeopack.py -h %s -p %s" % (self.host, self.port))
assert status == 0
assert os.path.exists(self.path + ".old")
def testPackDays(self):
self.set_inet_addr()
self.start()
status = os.system("zeopack.py -h %s -p %s -d 1" % (self.host,
self.port))
# Since we specified one day, nothing should get packed
assert status == 0
assert not os.path.exists(self.path + ".old")
def testAF_UNIXPack(self):
self.addr = tempfile.mktemp(suffix=".zeo-socket")
self.start()
status = os.system("zeopack.py -U %s" % self.addr)
assert status == 0
assert os.path.exists(self.path + ".old")
def testNoServer(self):
status = os.system("zeopack.py -p 19")
assert status != 0
def testWaitForServer(self):
self.set_inet_addr()
def delayed_start():
time.sleep(11)
self.start()
t = threading.Thread(target=delayed_start)
t.start()
status = os.system("zeopack.py -h %s -p %s -W" % (self.host,
self.port))
t.join()
assert status == 0
assert os.path.exists(self.path + ".old")
class UpTest(unittest.TestCase):
def testUp(self):
status = os.system("zeoup.py -p 19")
# There is no ZEO server on port 19, so we should see non-zero
# exit status.
assert status != 0
if __name__ == "__main__":
unittest.main()
......@@ -95,7 +95,7 @@ def main(path):
path = paths.get(oid, '-')
print fmt % (U64(oid), len(data), total_size(oid), path, mod, klass)
if __name__ == "__main__":
def Main():
import sys
import getopt
......@@ -118,3 +118,6 @@ if __name__ == "__main__":
if o == '-v':
VERBOSE += 1
main(path)
if __name__ == "__main__":
Main()
# zope is a container package, so it really doesn't include much.
<collection>
__init__.py
README.txt
</collection>
=====================
Zope Project Packages
=====================
The ``zope`` package is a pure namespace package holding packages
developed as part of the Zope 3 project.
Generally, the immediate subpackages of the ``zope`` package should be
useful and usable outside of the Zope application server. Subpackages
of the ``zope`` package should have minimal interdependencies,
although most depend on ``zope.interface``.
The one subpackage that's not usable outside the application server is
the ``app`` subpackage, ``zope.app``, which *is* the application
server. Sub-packages of ``zope.app`` are not usable outside of the
application server. If there's something in ``zope.app`` you want to
use elsewhere, let us know and we can talk about abstracting some of
it up out of ``zope.app``.
# zpkg config file
#
# To getnerate a ZODB release, use:
#
# zpkg -C zpkg.conf -v <version>
#
build-application no
collect-dependencies yes
default-collection ZODB3
<resources>
# This is the ZODB3 release package:
#
ZODB3 .
# This group is maintained as part of the ZODB project:
#
BTrees src/BTrees
persistent src/persistent
transaction src/transaction
ThreadedAsync src/ThreadedAsync
ZEO src/ZEO
ZODB src/ZODB
ZODB-Scripts src/scripts
ZopeUndo src/ZopeUndo
# These are copied in from the Zope3 project; they are needed for ZODB
# 3.4 and newer:
#
zope src/zope
zope.interface src/zope/interface
zope.proxy src/zope/proxy
zope.testing src/zope/testing
# These are copied in from the ZConfig and zdaemon projects:
#
ZConfig src/ZConfig
zdaemon src/zdaemon
</resources>
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