[Commits] (vajda) - fixed bug 1187 and several other related bugs

commits at osafoundation.org commits at osafoundation.org
Tue Feb 3 19:38:23 PST 2004


Commit by: vajda
Modified files:
osaf/chandler/Chandler/repository/item/Item.py 1.108 1.109
osaf/chandler/Chandler/repository/persistence/Repository.py 1.65 1.66
osaf/chandler/Chandler/repository/persistence/XMLRepository.py 1.62 1.63
osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py 1.26 1.27
osaf/chandler/Chandler/repository/tests/TestMove.py None 1.1
osaf/chandler/Chandler/repository/tests/.cvsignore 1.2 1.3
osaf/chandler/Chandler/repository/tests/TestItems.py 1.6 1.7

Log message:
   - fixed bug 1187 and several other related bugs
   - added TestMove unit test


ViewCVS links:
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/item/Item.py.diff?r1=text&tr1=1.108&r2=text&tr2=1.109
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/persistence/Repository.py.diff?r1=text&tr1=1.65&r2=text&tr2=1.66
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/persistence/XMLRepository.py.diff?r1=text&tr1=1.62&r2=text&tr2=1.63
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py.diff?r1=text&tr1=1.26&r2=text&tr2=1.27
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/tests/TestMove.py?rev=1.1&content-type=text/vnd.viewcvs-markup
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/tests/.cvsignore.diff?r1=text&tr1=1.2&r2=text&tr2=1.3
http://cvs.osafoundation.org/index.cgi/osaf/chandler/Chandler/repository/tests/TestItems.py.diff?r1=text&tr1=1.6&r2=text&tr2=1.7

Index: osaf/chandler/Chandler/repository/persistence/XMLRepository.py
diff -u osaf/chandler/Chandler/repository/persistence/XMLRepository.py:1.62 osaf/chandler/Chandler/repository/persistence/XMLRepository.py:1.63
--- osaf/chandler/Chandler/repository/persistence/XMLRepository.py:1.62	Wed Jan 28 16:53:39 2004
+++ osaf/chandler/Chandler/repository/persistence/XMLRepository.py	Tue Feb  3 19:37:51 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.62 $"
-__date__      = "$Date: 2004/01/29 00:53:39 $"
+__revision__  = "$Revision: 1.63 $"
+__date__      = "$Date: 2004/02/04 03:37:51 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -219,6 +219,10 @@
                     if (doc.getMetaData('', 'deleted', value) and
                         value.asString() == 'True'):
                         doc = None
+                    else:
+                        uuid = self.getDocUUID(doc)
+                        if store._versions.getDocVersion(uuid, version) != ver:
+                            doc = None
 
                 return doc
 
@@ -267,6 +271,9 @@
         for name, (ver, doc) in roots.iteritems():
             if (doc.getMetaData('', 'deleted', value) and
                 value.asString() == 'True'):
+                continue
+            uuid = self.getDocUUID(doc)
+            if store._versions.getDocVersion(uuid, version) != ver:
                 continue
             if not name in view._roots:
                 view._loadDoc(doc)

Index: osaf/chandler/Chandler/repository/item/Item.py
diff -u osaf/chandler/Chandler/repository/item/Item.py:1.108 osaf/chandler/Chandler/repository/item/Item.py:1.109
--- osaf/chandler/Chandler/repository/item/Item.py:1.108	Mon Feb  2 19:29:12 2004
+++ osaf/chandler/Chandler/repository/item/Item.py	Tue Feb  3 19:37:50 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.108 $"
-__date__      = "$Date: 2004/02/03 03:29:12 $"
+__revision__  = "$Revision: 1.109 $"
+__date__      = "$Date: 2004/02/04 03:37:50 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -474,7 +474,9 @@
 
     def hasChild(self, name, load=True):
 
-        return (self.__dict__.has_key('_children') and
+        return ('_children' in self.__dict__ and
+                not ('_notChildren' in self.__dict__ and
+                     name in self._notChildren) and
                 self._children.has_key(name, load))
 
     def hasChildren(self):
@@ -1099,6 +1101,7 @@
             if parent._isRepository():
                 parent = parent.view
             self._parent = parent
+            self._root = None
             self._setRoot(parent._addItem(self, previous, next))
         else:
             self._parent = None
@@ -1127,7 +1130,13 @@
 
     def _removeItem(self, item):
 
-        del self._children[item.getItemName()]
+        name = item.getItemName()
+        del self._children[name]
+
+        if '_notChildren' in self.__dict__:
+            self._notChildren[name] = name
+        else:
+            self._notChildren = { name: name }
 
     def getItemChild(self, name, load=True):
         'Return the child as named or None if not found.'
@@ -1136,12 +1145,12 @@
             raise ValueError, "item is stale: %s" %(self)
 
         child = None
-        if self.__dict__.has_key('_children'):
+        if '_children' in self.__dict__:
             child = self._children.get(name, None, False)
 
         if load and child is None:
-            hasNot = self.__dict__.has_key('_notChildren')
-            if not hasNot or not self._notChildren.has_key(name):
+            hasNot = '_notChildren' in self.__dict__
+            if not (hasNot and name in self._notChildren):
                 child = self.getRepository()._loadChild(self, name)
                 if child is None:
                     if not hasNot:

Index: osaf/chandler/Chandler/repository/persistence/Repository.py
diff -u osaf/chandler/Chandler/repository/persistence/Repository.py:1.65 osaf/chandler/Chandler/repository/persistence/Repository.py:1.66
--- osaf/chandler/Chandler/repository/persistence/Repository.py:1.65	Sun Feb  1 19:08:34 2004
+++ osaf/chandler/Chandler/repository/persistence/Repository.py	Tue Feb  3 19:37:51 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.65 $"
-__date__      = "$Date: 2004/02/02 03:08:34 $"
+__revision__  = "$Revision: 1.66 $"
+__date__      = "$Date: 2004/02/04 03:37:51 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -503,13 +503,10 @@
 
     def _addItem(self, item, previous=None, next=None):
 
-        try:
-            name = item.getItemName()
-            current = self._roots[name]
-        except KeyError:
-            pass
-        else:
-            current.delete()
+        name = item.getItemName()
+
+        if name in self._roots:
+            raise ValueError, "A root named '%s' exists already" %(name)
 
         self._roots[name] = item
 
@@ -658,7 +655,8 @@
 
         self._hooks = None
         self.version = repository.store.getVersion()
-
+        self._notRoots = {}
+        
     def _loadDoc(self, doc):
 
         try:
@@ -720,6 +718,14 @@
 
         return self._loadChild(None, name)
 
+    def getRoots(self, load=True):
+        'Return a list of the roots in the repository.'
+
+        if load:
+            self.repository.store.loadRoots(self.version)
+            
+        return super(OnDemandRepositoryView, self).getRoots(load)
+
     def _loadChild(self, parent, name):
 
         if parent is not None and parent is not self:
@@ -765,6 +771,31 @@
             self._hooks = hooks
             self.setLoading(loading)
 
+    def _addItem(self, item, previous=None, next=None):
+
+        super(OnDemandRepositoryView, self)._addItem(item, previous, next)
+
+        name = item.getItemName()
+        if name in self._notRoots:
+            del self._notRoots[name]
+
+        return item
+
+    def _removeItem(self, item):
+
+        super(OnDemandRepositoryView, self)._removeItem(item)
+
+        name = item.getItemName()
+        self._notRoots[name] = name
+
+    def getRoot(self, name, load=True):
+
+        if not name in self._notRoots:
+            return super(OnDemandRepositoryView, self).getRoot(name, load)
+
+        return None
+
+
 
 class RepositoryNotifications(dict):
 
@@ -821,8 +852,6 @@
     def run(self):
 
         try:
-            result = attachCurrentThread(super(RepositoryThread, self))
+            return attachCurrentThread(super(RepositoryThread, self))
         finally:
             self.repository.closeView()
-
-        return result

Index: osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py
diff -u osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py:1.26 osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py:1.27
--- osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py:1.26	Mon Jan 26 19:10:54 2004
+++ osaf/chandler/Chandler/repository/persistence/XMLRepositoryView.py	Tue Feb  3 19:37:51 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.26 $"
-__date__      = "$Date: 2004/01/27 03:10:54 $"
+__revision__  = "$Revision: 1.27 $"
+__date__      = "$Date: 2004/02/04 03:37:51 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -34,14 +34,6 @@
         self._log = []
         self._notifications = RepositoryNotifications(repository)
         
-    def getRoots(self, load=True):
-        'Return a list of the roots in the repository.'
-
-        if load:
-            self.repository.store.loadRoots(self.version)
-            
-        return super(XMLRepositoryView, self).getRoots()
-
     def logItem(self, item):
         
         if super(XMLRepositoryView, self).logItem(item):
@@ -66,6 +58,7 @@
                 item._unloadItem()
 
         del self._log[:]
+        self._notRoots.clear()
 
     def queryItems(self, query, load=True):
 
@@ -262,12 +255,14 @@
                 if lock:
                     env.lock_put(lock)
 
+                self._notRoots.clear()
                 self._notifications.dispatchChanges()
 
                 if count > 0:
                     self.logger.info('%s committed %d items (%ld bytes) in %s',
                                      self, count, size,
                                      datetime.now() - before)
+                
                 return
 
     def _saveItem(self, item, newVersion, data, versions, history):

Index: osaf/chandler/Chandler/repository/tests/.cvsignore
diff -u osaf/chandler/Chandler/repository/tests/.cvsignore:1.2 osaf/chandler/Chandler/repository/tests/.cvsignore:1.3
--- osaf/chandler/Chandler/repository/tests/.cvsignore:1.2	Sat Jan  3 00:41:49 2004
+++ osaf/chandler/Chandler/repository/tests/.cvsignore	Tue Feb  3 19:37:52 2004
@@ -1,2 +1,3 @@
 *.pyc *.pyo
 __repository__
+RepositoryUnitTest-Repository

Index: osaf/chandler/Chandler/repository/tests/TestItems.py
diff -u osaf/chandler/Chandler/repository/tests/TestItems.py:1.6 osaf/chandler/Chandler/repository/tests/TestItems.py:1.7
--- osaf/chandler/Chandler/repository/tests/TestItems.py:1.6	Sun Jan 11 22:28:50 2004
+++ osaf/chandler/Chandler/repository/tests/TestItems.py	Tue Feb  3 19:37:52 2004
@@ -2,8 +2,8 @@
 Basic Unit tests for Chandler repository
 """
 
-__revision__  = "$Revision: 1.6 $"
-__date__      = "$Date: 2004/01/12 06:28:50 $"
+__revision__  = "$Revision: 1.7 $"
+__date__      = "$Date: 2004/02/04 03:37:52 $"
 __copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -149,9 +149,8 @@
         item = self._find('//test')
         child1 = item['child1']
         child2 = item['child2']
-        child3 = child2['child3']
+        child3 = self.rep['child3']
 
-        child3.move(self.rep)
         self.assert_(child3 in self.rep.getRoots())
         self.assertItemPathEqual(child3, '//child3')
         self.assertIsRoot(child3.getRoot())



More information about the Commits mailing list