Log message for revision 39705:
  Use ZODB 3.6.01b1 on the Zope HEAD.
  
  The checkin implies:
  
    - the "DBTab" package has been removed.  It is no longer necessary.
      Instead, we use ZODB 3.6's built-in multidatabase support.
  
    - ZODBMountPoint no longer monkey-patches ZODB to allow for mount
      support.
  
    - We temporarily hack setup.py to allow ZODB 3.6.0b1 to be compiled
      (it expects to be compiled via ZPackage).
  
  

Changed:
  _U  Zope/trunk/doc/
  _U  Zope/trunk/lib/python/
  D   Zope/trunk/lib/python/DBTab/
  D   Zope/trunk/lib/python/Products/ZODBMountPoint/Mount.py
  U   Zope/trunk/lib/python/Products/ZODBMountPoint/MountedObject.py
  U   Zope/trunk/lib/python/Products/ZODBMountPoint/tests/testMountPoint.py
  U   Zope/trunk/lib/python/Zope2/Startup/datatypes.py
  U   Zope/trunk/lib/python/Zope2/Startup/zopeschema.xml
  U   Zope/trunk/setup.py
  _U  Zope/trunk/utilities/

-=-

Property changes on: Zope/trunk/doc
___________________________________________________________________
Name: svn:externals
   - ZEO      svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/doc/ZEO

   + ZEO      svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/doc/ZEO



Property changes on: Zope/trunk/lib/python
___________________________________________________________________
Name: svn:externals
   - ZConfig        svn://svn.zope.org/repos/main/ZConfig/tags/ZConfig-2.3
BTrees         svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/BTrees
persistent     svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/persistent
ThreadedAsync  svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/ThreadedAsync
transaction    svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/transaction
ZEO            svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/ZEO
ZODB           svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/ZODB
ZopeUndo       svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/ZopeUndo
zdaemon        svn://svn.zope.org/repos/main/zdaemon/tags/zdaemon-1.1

   + ZConfig        svn://svn.zope.org/repos/main/ZConfig/tags/ZConfig-2.3
BTrees         svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/BTrees
persistent     svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/persistent
ThreadedAsync  svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/ThreadedAsync
transaction    svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/transaction
ZEO            svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/ZEO
ZODB           svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/ZODB
ZopeUndo       svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/ZopeUndo
zdaemon        svn://svn.zope.org/repos/main/zdaemon/tags/zdaemon-1.1


Deleted: Zope/trunk/lib/python/Products/ZODBMountPoint/Mount.py
===================================================================
--- Zope/trunk/lib/python/Products/ZODBMountPoint/Mount.py      2005-10-28 
23:36:39 UTC (rev 39704)
+++ Zope/trunk/lib/python/Products/ZODBMountPoint/Mount.py      2005-10-28 
23:58:33 UTC (rev 39705)
@@ -1,237 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.0 (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
-#
-##############################################################################
-"""ZODB Mounted database support, simplified for DBTab.
-
-$Id$"""
-
-import sys
-from logging import getLogger
-
-try:
-    from cStringIO import StringIO
-except:
-    from StringIO import StringIO
-import traceback
-
-import Persistence, Acquisition
-from Acquisition import aq_base
-from ZODB.POSException import MountedStorageError, ConnectionStateError
-
-
-LOG = getLogger('Zope.ZODBMountPoint')
-
-class MountPoint(Persistence.Persistent, Acquisition.Implicit):
-    '''The base class for a Zope object which, when traversed,
-    accesses a different database.
-    '''
-
-    # Default values for non-persistent variables.
-    _v_data = None   # An object in an open connection
-    _v_connect_error = None
-
-    def __init__(self, id):
-        self.id = id
-
-    def _getDB(self):
-        """Hook for getting the DB object for this mount point.
-        """
-        raise NotImplementedError
-
-    def _getDBName(self):
-        """Hook for getting the name of the database for this mount point.
-        """
-        raise NotImplementedError
-
-    def _getRootDBName(self):
-        """Hook for getting the name of the root database.
-        """
-        raise NotImplementedError
-
-    def _traverseToMountedRoot(self, root, mount_parent):
-        """Hook for getting the object to be mounted.
-        """
-        raise NotImplementedError
-
-    def __repr__(self):
-        return "%s(id=%s)" % (self.__class__.__name__, repr(self.id))
-
-
-    def _getMountedConnection(self, anyjar):
-        db_name = self._getDBName()
-        conn = anyjar._getMountedConnection(db_name)
-        if conn is None:
-            root_conn = anyjar._getRootConnection()
-            if db_name == self._getRootDBName():
-                conn = root_conn
-            else:
-                conn = self._getDB().open(version=root_conn.getVersion())
-                root_conn._addMountedConnection(db_name, conn)
-        return conn
-
-
-    def _getOrOpenObject(self, parent):
-        t = self._v_data
-        if t is not None:
-            data = t[0]
-        else:
-            self._v_connect_error = None
-            conn = None
-            try:
-                anyjar = self._p_jar
-                if anyjar is None:
-                    anyjar = parent._p_jar
-                conn = self._getMountedConnection(anyjar)
-                root = conn.root()
-                obj = self._traverseToMountedRoot(root, parent)
-                data = aq_base(obj)
-                # Store the data object in a tuple to hide from acquisition.
-                self._v_data = (data,)
-            except:
-                # Possibly broken database.
-                self._logConnectException()
-                raise
-
-            try:
-                # XXX This method of finding the mount point is deprecated.
-                # Do not use the _v_mount_point_ attribute.
-                data._v_mount_point_ = (aq_base(self),)
-            except:
-                # Might be a read-only object.
-                pass
-
-        return data.__of__(parent)
-
-
-    def __of__(self, parent):
-        # Accesses the database, returning an acquisition
-        # wrapper around the connected object rather than around self.
-        try:
-            return self._getOrOpenObject(parent)
-        except:
-            return Acquisition.ImplicitAcquisitionWrapper(self, parent)
-
-
-    def _test(self, parent):
-        '''Tests the database connection.
-        '''
-        self._getOrOpenObject(parent)
-        return 1
-
-
-    def _logConnectException(self):
-        '''Records info about the exception that just occurred.
-        '''
-        try:
-            from cStringIO import StringIO
-        except:
-            from StringIO import StringIO
-        import traceback
-        exc = sys.exc_info()
-        LOG.error('Failed to mount database. %s (%s)' % exc[:2], exc_info=exc)
-        f=StringIO()
-        traceback.print_tb(exc[2], 100, f)
-        self._v_connect_error = (exc[0], exc[1], f.getvalue())
-        exc = None
-
-
-
-class ConnectionPatches:
-    # Changes to Connection.py that might fold into ZODB
-
-    _root_connection = None
-    _mounted_connections = None
-
-    def _getRootConnection(self):
-        root_conn = self._root_connection
-        if root_conn is None:
-            return self
-        else:
-            return root_conn
-
-    def _getMountedConnection(self, name):
-        conns = self._getRootConnection()._mounted_connections
-        if conns is None:
-            return None
-        else:
-            return conns.get(name)
-
-    def _addMountedConnection(self, name, conn):
-        if conn._root_connection is not None:
-            raise ValueError, 'Connection %s is already mounted' % repr(conn)
-        root_conn = self._getRootConnection()
-        conns = root_conn._mounted_connections
-        if conns is None:
-            conns = {}
-            root_conn._mounted_connections = conns
-        if conns.has_key(name):
-            raise KeyError, 'A connection named %s already exists' % repr(name)
-        conn._root_connection = root_conn
-        conns[name] = conn
-
-    def _setDB(self, odb, *args, **kw):
-        self._real_setDB(odb, *args, **kw)
-        conns = self._mounted_connections
-        if conns:
-            for conn in conns.values():
-                conn._setDB(conn._db, *args, **kw)
-
-    def close(self):
-        if self._root_connection is not None:
-            raise RuntimeError("Should not close mounted connections directly")
-        conns = self._mounted_connections
-        if conns:
-            for conn in conns.values():
-                # Notify the activity monitor
-                db = conn.db()
-                f = getattr(db, 'getActivityMonitor', None)
-                if f is not None:
-                    am = f()
-                    if am is not None:
-                        am.closedConnection(conn)
-                conn.cacheGC() # This is a good time to do some GC
-                # XXX maybe we ought to call the close callbacks.
-                conn._storage = conn._normal_storage = None
-                conn._savepoint_storage = None
-                conn.new_oid = conn._opened = None
-                conn._debug_info = ()
-
-                # collector #1350: ensure that the connection is unregistered
-                # from the transaction manager (XXX API method?)
-                if conn._synch:
-                    conn.transaction_manager.unregisterSynch(conn)
-
-                # The mounted connection keeps a reference to
-                # its database, but nothing else.
-                # Note that mounted connections can not operate
-                # independently, so don't use _closeConnection() to
-                # return them to the pool.  Only the root connection
-                # should be returned.
-
-        # Close this connection only after the mounted connections
-        # have been closed.  Otherwise, this connection gets returned
-        # to the pool too early and another thread might use this
-        # connection before the mounted connections have all been
-        # closed.
-        self._real_close()
-
-if 1:
-    # patch Connection.py.
-    from ZODB.Connection import Connection
-    Connection._real_setDB = Connection._setDB
-    Connection._real_close = Connection.close
-
-    for k, v in ConnectionPatches.__dict__.items():
-        if not k.startswith('__'):
-            setattr(Connection, k, v)
-

Modified: Zope/trunk/lib/python/Products/ZODBMountPoint/MountedObject.py
===================================================================
--- Zope/trunk/lib/python/Products/ZODBMountPoint/MountedObject.py      
2005-10-28 23:36:39 UTC (rev 39704)
+++ Zope/trunk/lib/python/Products/ZODBMountPoint/MountedObject.py      
2005-10-28 23:58:33 UTC (rev 39705)
@@ -11,23 +11,29 @@
 # FOR A PARTICULAR PURPOSE
 # 
 ##############################################################################
-"""DBTab mount point (stored in ZODB).
+"""Mount point (stored in ZODB).
 
 $Id$
 """
 
 import os
+import sys
+import traceback
+from cStringIO import StringIO
+from logging import getLogger
 
 import transaction
 
 import Globals
+import Acquisition
 from Acquisition import aq_base, aq_inner, aq_parent
 from AccessControl.ZopeGuards import guarded_getattr
 from OFS.SimpleItem import SimpleItem
 from OFS.Folder import Folder
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from Mount import MountPoint
+from ZODB.POSException import MountedStorageError, ConnectionStateError
 
+LOG = getLogger('Zope.ZODBMountPoint')
 
 _www = os.path.join(os.path.dirname(__file__), 'www')
 
@@ -107,12 +113,12 @@
         obj = context.unrestrictedTraverse(id)
         # Commit a subtransaction to assign the new object to
         # the correct database.
-        transaction.commit(1)
+        transaction.savepoint()
         return obj
 
 
-class MountedObject(MountPoint, SimpleItem):
-    '''A MountPoint with a basic interface for displaying the
+class MountedObject(SimpleItem):
+    '''A database mount point with a basic interface for displaying the
     reason the database did not connect.
     '''
     meta_type = 'ZODB Mount Point'
@@ -124,6 +130,8 @@
     icon = 'p_/broken'
     manage_options = ({'label':'Traceback', 'action':'manage_traceback'},)
     _v_mount_params = None
+    _v_data = None
+    _v_connect_error = None
 
     manage_traceback = PageTemplateFile('mountfail.pt', _www)
 
@@ -131,8 +139,16 @@
         path = str(path)
         self._path = path
         id = path.split('/')[-1]
-        MountPoint.__init__(self, id)
+        self.id = id
 
+    def _getMountedConnection(self, anyjar):
+        db_name = self._getDBName()
+        try:
+            conn = anyjar.get_connection(db_name)
+        except KeyError:
+            conn = self._getDB().open()
+        return conn
+
     def mount_error_(self):
         return self._v_connect_error
 
@@ -177,7 +193,7 @@
                 obj = Application()
                 root[real_root] = obj
                 # Get it into the database
-                transaction.commit(1)
+                transaction.savepoint()
             else:
                 raise
 
@@ -197,6 +213,73 @@
                     raise
         return obj
 
+    def _logConnectException(self):
+        '''Records info about the exception that just occurred.
+        '''
+        try:
+            from cStringIO import StringIO
+        except:
+            from StringIO import StringIO
+        import traceback
+        exc = sys.exc_info()
+        LOG.error('Failed to mount database. %s (%s)' % exc[:2], exc_info=exc)
+        f=StringIO()
+        traceback.print_tb(exc[2], 100, f)
+        self._v_connect_error = (exc[0], exc[1], f.getvalue())
+        exc = None
+
+
+    def __of__(self, parent):
+        # Accesses the database, returning an acquisition
+        # wrapper around the connected object rather than around self.
+        try:
+            return self._getOrOpenObject(parent)
+        except:
+            return Acquisition.ImplicitAcquisitionWrapper(self, parent)
+
+
+    def _test(self, parent):
+        '''Tests the database connection.
+        '''
+        self._getOrOpenObject(parent)
+        return 1
+
+    def _getOrOpenObject(self, parent):
+        t = self._v_data
+        if t is not None:
+            data = t[0]
+        else:
+            self._v_connect_error = None
+            conn = None
+            try:
+                anyjar = self._p_jar
+                if anyjar is None:
+                    anyjar = parent._p_jar
+                conn = self._getMountedConnection(anyjar)
+                root = conn.root()
+                obj = self._traverseToMountedRoot(root, parent)
+                data = aq_base(obj)
+                # Store the data object in a tuple to hide from acquisition.
+                self._v_data = (data,)
+            except:
+                # Possibly broken database.
+                self._logConnectException()
+                raise
+
+            try:
+                # XXX This method of finding the mount point is deprecated.
+                # Do not use the _v_mount_point_ attribute.
+                data._v_mount_point_ = (aq_base(self),)
+            except:
+                # Might be a read-only object.
+                pass
+
+        return data.__of__(parent)
+
+    def __repr__(self):
+        return "%s(id=%s)" % (self.__class__.__name__, repr(self.id))
+
+
 Globals.InitializeClass(MountedObject)
 
 
@@ -231,7 +314,7 @@
 manage_addMountsForm = PageTemplateFile('addMountsForm.pt', _www)
 
 def manage_getMountStatus(dispatcher):
-    """Returns the status of each mount point specified by dbtab.conf.
+    """Returns the status of each mount point specified by zope.conf
     """
     res = []
     conf = getConfiguration()
@@ -316,3 +399,4 @@
             REQUEST['URL1'] + ('/manage_main?manage_tabs_message='
             'Added %d mount points.' % count))
 
+

Modified: Zope/trunk/lib/python/Products/ZODBMountPoint/tests/testMountPoint.py
===================================================================
--- Zope/trunk/lib/python/Products/ZODBMountPoint/tests/testMountPoint.py       
2005-10-28 23:36:39 UTC (rev 39704)
+++ Zope/trunk/lib/python/Products/ZODBMountPoint/tests/testMountPoint.py       
2005-10-28 23:58:33 UTC (rev 39705)
@@ -24,7 +24,7 @@
 from OFS.Folder import Folder
 import App.config
 from Products.ZODBMountPoint.MountedObject import manage_addMounts, 
getMountPoint
-from DBTab.DBTab import DBTab
+from Zope2.Startup.datatypes import DBTab
 
 try:
     __file__
@@ -64,8 +64,6 @@
 
 class DBTabTests (unittest.TestCase):
 
-    
-
     def setUp(self):
         global original_config
         if original_config is None:
@@ -107,7 +105,7 @@
         self.app._p_jar.close()
         del self.app
         del self.db
-        for db in self.conf.opened.values():
+        for db in self.conf.databases.values():
             db.close()
         del self.conf
 
@@ -115,7 +113,6 @@
         self.assertEqual(self.app.mount1.id, 'mount1')
         self.assertEqual(self.app.mount2.id, 'mount2')
 
-
     def testWrite(self):
         app = self.app
         app.mount1.a1 = '1'
@@ -129,41 +126,6 @@
         self.assertEqual(app.mount2._p_changed, 0)
         self.assertEqual(app._p_changed, 0)
 
-
-    def testRaceOnClose(self):
-        # There used to be a race condition in
-        # ConnectionPatches.close().  The root connection was returned
-        # to the pool before the mounted connections were closed.  If
-        # another thread pulled the root connection out of the pool
-        # before the original thread finished closing mounted
-        # connections, when the original thread got control back it
-        # closed the mounted connections even though the new thread
-        # was using them.
-
-        # Test by patching to watch for a vulnerable moment.
-
-        from ZODB.DB import DB
-
-        def _closeConnection(self, connection):
-            self._real_closeConnection(connection)
-            mc = connection._mounted_connections
-            if mc is not None:
-                for c in mc.values():
-                    if c._storage is not None:
-                        raise AssertionError, "Connection remained partly open"
-
-        DB._real_closeConnection = DB._closeConnection
-        DB._closeConnection = _closeConnection
-        try:
-            conn = self.db.open()
-            conn.root()['Application']['mount1']
-            conn.root()['Application']['mount2']
-            conn.close()
-        finally:
-            DB._closeConnection = DB._real_closeConnection
-            del DB._real_closeConnection
-
-
     def testGetMountPoint(self):
         self.assert_(getMountPoint(self.app) is None)
         self.assert_(getMountPoint(self.app.mount1) is not None)
@@ -177,7 +139,6 @@
         transaction.commit()
         self.assert_(getMountPoint(self.app.mount2) is None)
 
-
 def test_suite():
     return unittest.makeSuite(DBTabTests, 'test')
 

Modified: Zope/trunk/lib/python/Zope2/Startup/datatypes.py
===================================================================
--- Zope/trunk/lib/python/Zope2/Startup/datatypes.py    2005-10-28 23:36:39 UTC 
(rev 39704)
+++ Zope/trunk/lib/python/Zope2/Startup/datatypes.py    2005-10-28 23:58:33 UTC 
(rev 39705)
@@ -18,6 +18,7 @@
 
 from ZConfig.components.logger import logger
 from ZODB.config import ZODBDatabase
+import OFS.Uninstalled
 
 # generic datatypes
 
@@ -109,7 +110,7 @@
 
 # Datatype for the root configuration object
 # (adds the softwarehome and zopehome fields; default values for some
-#  computed paths, configures dbtab)
+#  computed paths, configures the dbtab)
 
 def root_config(section):
     from ZConfig import ConfigurationError
@@ -148,9 +149,7 @@
                 raise ConfigurationError(dup_err % (mount_points[point],
                                                     name, point))
             mount_points[point] = name
-    from DBTab.DBTab import DBTab
     section.dbtab = DBTab(mount_factories, mount_points)
-
     pconfigs = {}
     for pconfig in section.product_config:
         section_name = pconfig.getSectionName()
@@ -171,11 +170,12 @@
     """ A ZODB database datatype that can handle an extended set of
     attributes for use by DBTab """
 
-    def createDB(self):
-        return ZODBDatabase.open(self)
+    def createDB(self, database_name, databases):
+        self.config.database_name = database_name
+        return ZODBDatabase.open(self, databases)
 
-    def open(self):
-        DB = self.createDB()
+    def open(self, database_name, databases):
+        DB = self.createDB(database_name, databases)
         if self.config.connection_class:
             # set the connection class
             DB.klass = self.config.connection_class
@@ -188,10 +188,6 @@
     def getName(self):
         return self.name
 
-    def getOpenAtStartup(self):
-        # XXX implement
-        return 0
-
     def computeMountPaths(self):
         mps = []
         for part in self.config.mount_points:
@@ -236,3 +232,110 @@
     Converters.default_encoding = value
     HTTPRequest.default_encoding = value
     HTTPResponse.default_encoding = value
+
+class DBTab:
+    """A Zope database configuration, similar in purpose to /etc/fstab.
+    """
+
+    def __init__(self, db_factories, mount_paths):
+        self.db_factories = db_factories  # { name -> DatabaseFactory }
+        self.mount_paths = mount_paths    # { virtual path -> name }
+        self.databases = {}               # { name -> DB instance }
+
+    def listMountPaths(self):
+        """Returns a sequence of (virtual_mount_path, database_name).
+        """
+        return self.mount_paths.items()
+
+
+    def listDatabaseNames(self):
+        """Returns a sequence of names.
+        """
+        return self.db_factories.keys()
+
+
+    def hasDatabase(self, name):
+        """Returns true if name is the name of a configured database."""
+        return self.db_factories.has_key(name)
+
+
+    def _mountPathError(self, mount_path):
+        from ZConfig import ConfigurationError
+        if mount_path == '/':
+            raise ConfigurationError(
+                "No root database configured")
+        else:
+            raise ConfigurationError(
+                "No database configured for mount point at %s"
+                % mount_path)
+
+    def getDatabase(self, mount_path=None, name=None, is_root=0):
+        """Returns an opened database.  Requires either mount_path or name.
+        """
+        if name is None:
+            name = self.getName(mount_path)
+        db = self.databases.get(name, None)
+        if db is None:
+            factory = self.getDatabaseFactory(name=name)
+            db = factory.open(name, self.databases)
+        return db
+
+    def getDatabaseFactory(self, mount_path=None, name=None):
+        if name is None:
+            name = self.getName(mount_path)
+        if not self.db_factories.has_key(name):
+            raise KeyError('%s is not a configured database' % repr(name))
+        return self.db_factories[name]
+
+    def getName(self, mount_path):
+        name = self.mount_paths.get(mount_path)
+        if name is None:
+            self._mountPathError(mount_path)
+        return name
+
+# class factories (potentially) used by the class-factory parameter in
+# zopeschema.xml
+
+def minimalClassFactory(jar, module, name,
+                        _silly=('__doc__',), _globals={},
+                        ):
+    """Minimal class factory.
+
+    If any class is not found, this class factory will propagate
+    the exception to the application, unlike the other class factories.
+    """
+    m = __import__(module, _globals, _globals, _silly)
+    return getattr(m, name)
+
+def simpleClassFactory(jar, module, name,
+                       _silly=('__doc__',), _globals={},
+                       ):
+    """Class factory without ZClass support.
+    """
+    try:
+        m = __import__(module, _globals, _globals, _silly)
+        return getattr(m, name)
+    except:
+        return OFS.Uninstalled.Broken(jar, None, (module, name))
+
+def zopeClassFactory(jar, module, name,
+                     _silly=('__doc__',), _globals={},
+                     ):
+    """Class factory with ZClass support.
+    """
+    try:
+        if module[:1]=='*':
+            # ZCLass! Yee ha!
+            return jar.root()['ZGlobals'][module]
+        else:
+            m=__import__(module, _globals, _globals, _silly)
+
+        return getattr(m, name)
+    except:
+        return OFS.Uninstalled.Broken(jar, None, (module, name))
+
+# There used to be an "autoClassFactory" whose docstring read "If not the root
+# connection, use the class factory from the root database, otherwise use the
+# Zope class factory."  This no longer works with the implementation of
+# mounted databases, so we just use the zopeClassFactory as the default
+

Modified: Zope/trunk/lib/python/Zope2/Startup/zopeschema.xml
===================================================================
--- Zope/trunk/lib/python/Zope2/Startup/zopeschema.xml  2005-10-28 23:36:39 UTC 
(rev 39704)
+++ Zope/trunk/lib/python/Zope2/Startup/zopeschema.xml  2005-10-28 23:58:33 UTC 
(rev 39705)
@@ -217,7 +217,7 @@
     </key>
 
    <key name="class-factory" datatype=".importable_name"
-        default="DBTab.ClassFactories.autoClassFactory">
+        default="Zope2.Startup.datatypes.zopeClassFactory">
       <description>
        Change the class factory function a database uses on a
        per-database basis to support different class factory policy.

Modified: Zope/trunk/setup.py
===================================================================
--- Zope/trunk/setup.py 2005-10-28 23:36:39 UTC (rev 39704)
+++ Zope/trunk/setup.py 2005-10-28 23:58:33 UTC (rev 39705)
@@ -268,7 +268,11 @@
         self.cmdclass['install_lib'] = MyLibInstaller
 
 
-EXTENSIONCLASS_INCLUDEDIRS = ['ExtensionClass']
+# added . to EXTENSIONCLASS_INCLUDEDIRS in order to be able to compile
+# ZODB HEAD code (which uses qualified paths to find header files).  This
+# should be a temporary change, thrown away once we use zpkg to package
+# Zope.
+EXTENSIONCLASS_INCLUDEDIRS = ['ExtensionClass', '.'] 
 
 # All extension modules must be listed here.
 ext_modules = [


Property changes on: Zope/trunk/utilities
___________________________________________________________________
Name: svn:externals
   - ZODBTools      svn://svn.zope.org/repos/main/ZODB/tags/3.4.2/src/scripts

   + ZODBTools      svn://svn.zope.org/repos/main/ZODB/tags/3.6.0b1/src/scripts


_______________________________________________
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins

Reply via email to