[Commits] (vajda) - query test cases now run with ramdb

commits at osafoundation.org commits at osafoundation.org
Thu Dec 16 16:07:57 PST 2004


Commit by: vajda
Modified files:
chandler/crypto/.cvsignore 1.1 1.2
chandler/repository/item/Item.py 1.177 1.178
chandler/repository/item/ItemHandler.py 1.57 1.58
chandler/repository/item/RefCollections.py 1.4 1.5
chandler/repository/item/Values.py 1.30 1.31
chandler/repository/persistence/DBContainer.py 1.27 1.28
chandler/repository/persistence/XMLRefs.py 1.4 1.5
chandler/repository/persistence/XMLRepositoryView.py 1.71 1.72
chandler/repository/query/tests/QueryTestCase.py 1.3 1.4
chandler/repository/schema/Kind.py 1.93 1.94
chandler/repository/util/LinkedMap.py 1.21 1.22

Log message:
   - query test cases now run with ramdb
   - fixed unloading-item-with-changed-references-to-it bug


ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/crypto/.cvsignore.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/Item.py.diff?r1=text&tr1=1.177&r2=text&tr2=1.178
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/ItemHandler.py.diff?r1=text&tr1=1.57&r2=text&tr2=1.58
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/RefCollections.py.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/Values.py.diff?r1=text&tr1=1.30&r2=text&tr2=1.31
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/DBContainer.py.diff?r1=text&tr1=1.27&r2=text&tr2=1.28
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/XMLRefs.py.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/XMLRepositoryView.py.diff?r1=text&tr1=1.71&r2=text&tr2=1.72
http://cvs.osafoundation.org/index.cgi/chandler/repository/query/tests/QueryTestCase.py.diff?r1=text&tr1=1.3&r2=text&tr2=1.4
http://cvs.osafoundation.org/index.cgi/chandler/repository/schema/Kind.py.diff?r1=text&tr1=1.93&r2=text&tr2=1.94
http://cvs.osafoundation.org/index.cgi/chandler/repository/util/LinkedMap.py.diff?r1=text&tr1=1.21&r2=text&tr2=1.22

Index: chandler/repository/persistence/DBContainer.py
diff -u chandler/repository/persistence/DBContainer.py:1.27 chandler/repository/persistence/DBContainer.py:1.28
--- chandler/repository/persistence/DBContainer.py:1.27	Mon Dec 13 16:31:06 2004
+++ chandler/repository/persistence/DBContainer.py	Thu Dec 16 16:07:53 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.27 $"
-__date__      = "$Date: 2004/12/14 00:31:06 $"
+__revision__  = "$Revision: 1.28 $"
+__date__      = "$Date: 2004/12/17 00:07:53 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -1141,3 +1141,7 @@
             name = name.encode('utf-8')
 
         return super(HashTuple, self).__contains__(_uuid.hash(name))
+
+    def hash(self, name):
+
+        return _uuid.hash(name)

Index: chandler/crypto/.cvsignore
diff -u chandler/crypto/.cvsignore:1.1 chandler/crypto/.cvsignore:1.2
--- chandler/crypto/.cvsignore:1.1	Wed Jun 23 11:24:30 2004
+++ chandler/crypto/.cvsignore	Thu Dec 16 16:07:52 2004
@@ -1,3 +1,4 @@
 *.pyc
 *.pyo
 *.log
+randpool.dat

Index: chandler/repository/item/RefCollections.py
diff -u chandler/repository/item/RefCollections.py:1.4 chandler/repository/item/RefCollections.py:1.5
--- chandler/repository/item/RefCollections.py:1.4	Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/RefCollections.py	Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.4 $"
-__date__      = "$Date: 2004/12/14 00:31:05 $"
+__revision__  = "$Revision: 1.5 $"
+__date__      = "$Date: 2004/12/17 00:07:52 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -84,7 +84,7 @@
 
         for key in self.iterkeys():
             link = self._get(key)
-            copyOther = copyFn(copyItem, link._value, policy)
+            copyOther = copyFn(copyItem, link.getValue(self), policy)
             if copyOther is not None and copyOther not in refList:
                 refList.append(copyOther, link._alias)
 
@@ -471,18 +471,6 @@
 
         return False
 
-    def _unloadRef(self, other):
-
-        key = other._uuid
-        if self.has_key(key, load=False):
-            link = self._get(key, load=False)
-            if link is not None:
-                if link._alias is not None:
-                    del self._aliases[link._alias]
-                self._remove(key)
-            else:
-                raise AssertionError, '%s: unloading non-loaded ref %s' %(self, other.itsPath)
-
     def _unload(self):
 
         references = self._item._references
@@ -490,7 +478,7 @@
         otherName = self._otherName
         
         for link in self._values():
-            references._unloadValue(name, link._value, otherName)
+            references._unloadValue(name, link.getValue(self), otherName)
 
     def linkChanged(self, link, key):
 
@@ -711,7 +699,7 @@
         refs = self._item._references
         for key in self.iterkeys():
             link = self._get(key)
-            refs._saveRef(key, link._value,
+            refs._saveRef(key, link.getValue(self),
                           generator, False, version, {}, mode,
                           previous=link._previousKey, next=link._nextKey,
                           alias=link._alias)

Index: chandler/repository/item/Values.py
diff -u chandler/repository/item/Values.py:1.30 chandler/repository/item/Values.py:1.31
--- chandler/repository/item/Values.py:1.30	Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/Values.py	Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.30 $"
-__date__      = "$Date: 2004/12/14 00:31:05 $"
+__revision__  = "$Revision: 1.31 $"
+__date__      = "$Date: 2004/12/17 00:07:52 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -195,7 +195,7 @@
         except AttributeError:
             pass
 
-    def _mergeChanges(self, source):
+    def _copyChanges(self, source):
 
         if '_flags' in source.__dict__:
             for key, flags in source._flags.iteritems():

Index: chandler/repository/item/Item.py
diff -u chandler/repository/item/Item.py:1.177 chandler/repository/item/Item.py:1.178
--- chandler/repository/item/Item.py:1.177	Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/Item.py	Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.177 $"
-__date__      = "$Date: 2004/12/14 00:31:05 $"
+__revision__  = "$Revision: 1.178 $"
+__date__      = "$Date: 2004/12/17 00:07:52 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -695,7 +695,7 @@
         if not load:
             if self._children is not None:
                 for link in self._children._itervalues():
-                    yield link._value
+                    yield link.getValue(self._children)
 
         elif self._children is not None:
             for child in self._children:
@@ -2458,7 +2458,7 @@
             assert item._uuid == self._item._uuid
 
             for link in self._itervalues():
-                link._value._parent = item
+                link.getValue(self)._parent = item
 
         if item is not None and item._isItem():
             item._status |= Item.CONTAINER
@@ -2475,10 +2475,7 @@
 
     def _unloadChild(self, child):
 
-        if child._uuid in self:
-            self._remove(child._uuid)
-            if child._name is not None:
-                del self._aliases[child._name]
+        self._unloadRef(child)
     
     def __repr__(self):
 

Index: chandler/repository/schema/Kind.py
diff -u chandler/repository/schema/Kind.py:1.93 chandler/repository/schema/Kind.py:1.94
--- chandler/repository/schema/Kind.py:1.93	Mon Dec 13 16:31:07 2004
+++ chandler/repository/schema/Kind.py	Thu Dec 16 16:07:54 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.93 $"
-__date__      = "$Date: 2004/12/14 00:31:07 $"
+__revision__  = "$Revision: 1.94 $"
+__date__      = "$Date: 2004/12/17 00:07:54 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -246,7 +246,7 @@
             for uuid, link in inheritedAttributes._iteritems():
                 name = link._alias
                 if not self.resolve(name):
-                    attribute = link._value
+                    attribute = link.getValue(self)
                     for kind in attribute.kinds:
                         if self.isKindOf(kind):
                             break

Index: chandler/repository/util/LinkedMap.py
diff -u chandler/repository/util/LinkedMap.py:1.21 chandler/repository/util/LinkedMap.py:1.22
--- chandler/repository/util/LinkedMap.py:1.21	Mon Dec 13 16:31:08 2004
+++ chandler/repository/util/LinkedMap.py	Thu Dec 16 16:07:54 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.21 $"
-__date__      = "$Date: 2004/12/14 00:31:08 $"
+__revision__  = "$Revision: 1.22 $"
+__date__      = "$Date: 2004/12/17 00:07:54 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -47,6 +47,14 @@
             self._previousKey = previousKey
             linkedMap.linkChanged(self, key)
 
+        def getValue(self, linkedMap):
+
+            return self._value
+
+        def setValue(self, linkedMap, value):
+
+            self._value = value
+
 
     def __init__(self, new):
 
@@ -87,7 +95,7 @@
         target._clear_()
         
         for key, link in super(LinkedMap, self).iteritems():
-            targetLink = target._makeLink(link._value)
+            targetLink = target._makeLink(link.getValue(self))
             link._copy_(targetLink)
             target._insert(key, targetLink)
 
@@ -132,7 +140,7 @@
 
     def __getitem__(self, key, load=True):
 
-        return self._get(key, load)._value
+        return self._get(key, load).getValue(self)
 
     def __setitem__(self, key, value,
                     previousKey=None, nextKey=None, alias=None):
@@ -140,7 +148,7 @@
         link = super(LinkedMap, self).get(key)
 
         if link is not None:
-            link._value = value
+            link.setValue(self, value)
             self.linkChanged(link, key)
 
         else:
@@ -239,7 +247,7 @@
 
         return load and self._load(key)
 
-    def _contains(self, key):
+    def _contains_(self, key):
 
         return super(LinkedMap, self).__contains__(key)
             
@@ -258,7 +266,7 @@
             link = super(LinkedMap, self).get(key, default)
         
         if link is not default:
-            return link._value
+            return link.getValue(self)
 
         return default
 

Index: chandler/repository/item/ItemHandler.py
diff -u chandler/repository/item/ItemHandler.py:1.57 chandler/repository/item/ItemHandler.py:1.58
--- chandler/repository/item/ItemHandler.py:1.57	Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/ItemHandler.py	Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.57 $"
-__date__      = "$Date: 2004/12/14 00:31:05 $"
+__revision__  = "$Revision: 1.58 $"
+__date__      = "$Date: 2004/12/17 00:07:52 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -456,6 +456,8 @@
         self.afterLoadHooks = afterLoadHooks
         self.item = None
         self.new = new
+        self.values = None
+        self.references = None
         
     def refStart(self, itemHandler, attrs):
 
@@ -502,8 +504,10 @@
 
         super(ItemHandler, self).itemStart(itemHandler, attrs)
 
-        self.values = Values(None)
-        self.references = References(None)
+        if self.values is None:
+            self.values = Values(None)
+        if self.references is None:
+            self.references = References(None)
 
         self.refs = []
         self.name = None
@@ -811,19 +815,29 @@
     def __init__(self, repository, origItem):
 
         super(MergeHandler, self).__init__(repository, None, None, False)
+
         self.origItem = origItem
 
+        if hasattr(origItem._values, '_original'):
+            self.values = origItem._values
+        else:
+            self.values = Values(None)
+            self.values._original = origItem._values
+            
+        if hasattr(origItem._references, '_original'):
+            self.references = origItem._references
+        else:
+            self.references = References(None)
+            self.references._original = origItem._references
+
     def itemEnd(self, itemHandler, attrs):
 
         item = self.origItem
         values = self.values
         references = self.references
 
-        values._original = item._values
-        references._original = item._references
-
-        values._mergeChanges(item._values)
-        references._mergeChanges(item._references)
+        values._copyChanges(item._values)
+        references._copyChanges(item._references)
 
         for key, value in item._references.iteritems():
             if value is not None and value._isRefList():

Index: chandler/repository/persistence/XMLRefs.py
diff -u chandler/repository/persistence/XMLRefs.py:1.4 chandler/repository/persistence/XMLRefs.py:1.5
--- chandler/repository/persistence/XMLRefs.py:1.4	Tue Dec 14 15:30:24 2004
+++ chandler/repository/persistence/XMLRefs.py	Thu Dec 16 16:07:53 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.4 $"
-__date__      = "$Date: 2004/12/14 23:30:24 $"
+__revision__  = "$Revision: 1.5 $"
+__date__      = "$Date: 2004/12/17 00:07:53 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -15,7 +15,17 @@
 
 
 class PersistentRefs(object):
-    
+
+    class link(LinkedMap.link):
+
+        def getValue(self, linkedMap):
+
+            value = self._value
+            if value is not None and value._isUUID():
+                self._value = value = linkedMap.view[value]
+
+            return value
+
     def __init__(self, view):
 
         super(PersistentRefs, self).__init__()
@@ -26,6 +36,10 @@
         self._value = None
         self._count = 0
         
+    def _makeLink(self, value):
+
+        return PersistentRefs.link(value)
+
     def __len__(self):
 
         return self._count
@@ -58,6 +72,21 @@
                 # changed element: key, maybe old alias: alias
                 self._changedRefs[key] = (0, alias)
 
+    def _unloadRef(self, item):
+
+        key = item._uuid
+        if self.has_key(key, load=False):
+            link = self._get(key, load=False)
+            if link is not None:
+                if link._alias is not None:
+                    del self._aliases[link._alias]
+                if key in self._changedRefs:
+                    link.setValue(self, key)
+                else:
+                    self._remove(key)                   
+            else:
+                raise AssertionError, '%s: unloading non-loaded ref %s' %(self, item._repr_())
+
     def _removeRef(self, key, link):
 
         if not self.view.isLoading():
@@ -237,7 +266,8 @@
             if not (self._flags & LinkedMap.NEW or
                     item.isAttributeDirty(self._name, item._references) or
                     len(self._changedRefs) == 0):
-                raise AssertionError, '%s.%s not marked dirty' %(Item.__repr__(item), self._name)
+                raise AssertionError, '%s.%s not marked dirty' %(item._repr_(),
+                                                                 self._name)
 
             self._writeRef(self.uuid, version,
                            self._firstKey, self._lastKey, self._count)
@@ -245,7 +275,7 @@
             for key, (op, oldAlias) in self._changedRefs.iteritems():
                 if op == 0:               # change
                     link = self._get(key, load=False)
-                    ref = link._value
+
                     previous = link._previousKey
                     next = link._nextKey
                     alias = link._alias
@@ -301,6 +331,18 @@
 
         return super(XMLRefList, self)._createIndex(indexType, **kwds)
 
+    def _mergeChanges(self, oldVersion, toVersion):
+
+        raise MergeError, ('ref collections', self._item, 'merging ref collections is not yet implemented, overlapping attribute: %s' %(self._name), MergeError.BUG)
+
+#        target = self.view._createRefList(self._item, self._name,
+#                                          self._otherName, True, False, False,
+#                                          self._uuid)
+#        self._copy_(target)
+#        self._item._references[self._name] = target
+#
+#        PersistentRefs._mergeChanges(target, oldVersion, toVersion)
+
 
 class XMLNumericIndex(NumericIndex):
 
@@ -464,7 +506,7 @@
         if not self._isRemoved(key):
             child = self.view.find(key)
             if child is not None:
-                if not self._contains(key):
+                if not self._contains_(key):
                     try:
                         loading = self.view._setLoading(True)
                         self.__setitem__(key, child, alias=child._name)
@@ -533,7 +575,7 @@
                 if alias is not None:
                     store.writeName(version, self.uuid, alias, key)
 
-                if link._value is None:
+                if link.getValue(self) is None:
                     unloads.append((key, link._alias))
 
             elif op == 1:             # remove

Index: chandler/repository/persistence/XMLRepositoryView.py
diff -u chandler/repository/persistence/XMLRepositoryView.py:1.71 chandler/repository/persistence/XMLRepositoryView.py:1.72
--- chandler/repository/persistence/XMLRepositoryView.py:1.71	Mon Dec 13 16:31:06 2004
+++ chandler/repository/persistence/XMLRepositoryView.py	Thu Dec 16 16:07:53 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.71 $"
-__date__      = "$Date: 2004/12/14 00:31:06 $"
+__revision__  = "$Revision: 1.72 $"
+__date__      = "$Date: 2004/12/17 00:07:53 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -428,7 +428,7 @@
                     item._status |= Item.CMERGED
 
                 if newDirty & oldDirty & Item.RDIRTY:
-                    self._mergeRDIRTY(item, dirties)
+                    self._mergeRDIRTY(item, dirties, oldVersion, toVersion)
                     oldDirty &= ~Item.RDIRTY
                     item._status |= Item.RMERGED
 
@@ -443,7 +443,7 @@
                         oldDirty &= ~Item.VDIRTY
                         item._status |= Item.VMERGED
                     if oldDirty & Item.RDIRTY:
-                        self._mergeRDIRTY(item, dirties)
+                        self._mergeRDIRTY(item, dirties, oldVersion, toVersion)
                         oldDirty &= ~Item.RDIRTY
                         item._status |= Item.RMERGED
 
@@ -480,12 +480,17 @@
         if name != item._name:
             self._e_2_rename(item, name)
 
-    def _mergeRDIRTY(self, item, dirties):
+    def _mergeRDIRTY(self, item, dirties, oldVersion, toVersion):
 
         dirties = HashTuple(dirties)
+        merged = []
         for name in item._references._getDirties():
             if name in dirties:
-                self._e_1_overlap(item, name)
+                item._references[name]._mergeChanges(oldVersion, toVersion)
+                merged.append(dirties.hash(name))
+        if merged:
+            dirties = HashTuple(filter(lambda hash: hash not in merged,
+                                       dirties))
         item._references._dirties = dirties
 
     def _mergeVDIRTY(self, item, toVersion, dirties, mergeFn):
@@ -517,10 +522,6 @@
 
         raise MergeError, ('rename', item, 'item %s renamed to %s and %s' %(item._uuid, item._name, name), MergeError.RENAME)
 
-    def _e_1_overlap(self, item, name):
-        
-        raise MergeError, ('ref collections', item, 'merging ref collections is not yet implemented, overlapping attribute: %s' %(name), MergeError.BUG)
-
     def _e_2_overlap(self, item, name):
         
         raise MergeError, ('values', item, 'merging values is not yet implemented, overlapping attribute: %s' %(name), MergeError.BUG)

Index: chandler/repository/query/tests/QueryTestCase.py
diff -u chandler/repository/query/tests/QueryTestCase.py:1.3 chandler/repository/query/tests/QueryTestCase.py:1.4
--- chandler/repository/query/tests/QueryTestCase.py:1.3	Fri Oct  1 15:42:44 2004
+++ chandler/repository/query/tests/QueryTestCase.py	Thu Dec 16 16:07:53 2004
@@ -5,11 +5,11 @@
 class QueryTestCase(RepositoryTestCase.RepositoryTestCase):
     
     def setUp(self):
-        RepositoryTestCase.RepositoryTestCase._setup(self, False)
+        RepositoryTestCase.RepositoryTestCase._setup(self, True)
 
         self.testdir = os.path.join(self.rootdir, 'repository', \
          'query', 'tests')
-        RepositoryTestCase.RepositoryTestCase._openRepository(self, False)
+        RepositoryTestCase.RepositoryTestCase._openRepository(self, True)
 
     def _compileQuery(self, queryString, args=None):
         q = Query.Query(self.rep, queryString)



More information about the Commits mailing list