[Commits] (vajda) - merging children collections with same names -> RENAME error

commits at osafoundation.org commits at osafoundation.org
Wed Sep 15 15:43:17 PDT 2004


Commit by: vajda
Modified files:
chandler/repository/item/ItemRef.py 1.95 1.96
chandler/repository/persistence/RepositoryError.py 1.5 1.6
chandler/repository/persistence/XMLRefDict.py 1.9 1.10
chandler/repository/tests/TestMerge.py 1.3 1.4

Log message:
   - merging children collections with same names -> RENAME error


ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/ItemRef.py.diff?r1=text&tr1=1.95&r2=text&tr2=1.96
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/RepositoryError.py.diff?r1=text&tr1=1.5&r2=text&tr2=1.6
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/XMLRefDict.py.diff?r1=text&tr1=1.9&r2=text&tr2=1.10
http://cvs.osafoundation.org/index.cgi/chandler/repository/tests/TestMerge.py.diff?r1=text&tr1=1.3&r2=text&tr2=1.4

Index: chandler/repository/item/ItemRef.py
diff -u chandler/repository/item/ItemRef.py:1.95 chandler/repository/item/ItemRef.py:1.96
--- chandler/repository/item/ItemRef.py:1.95	Wed Sep 15 12:41:32 2004
+++ chandler/repository/item/ItemRef.py	Wed Sep 15 15:43:14 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.95 $"
-__date__      = "$Date: 2004/09/15 19:41:32 $"
+__revision__  = "$Revision: 1.96 $"
+__date__      = "$Date: 2004/09/15 22:43:14 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -107,7 +107,7 @@
 
         if isinstance(old, RefDict):
             old._removeRef(item._uuid)
-            old._item.setDirty(item.VDIRTY, otherName)
+            old._item.setDirty(item.RDIRTY, otherName)
         else:
             other._removeRef(otherName)
             other.setDirty(item.VDIRTY, otherName)

Index: chandler/repository/persistence/RepositoryError.py
diff -u chandler/repository/persistence/RepositoryError.py:1.5 chandler/repository/persistence/RepositoryError.py:1.6
--- chandler/repository/persistence/RepositoryError.py:1.5	Mon Sep 13 14:29:09 2004
+++ chandler/repository/persistence/RepositoryError.py	Wed Sep 15 15:43:14 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.5 $"
-__date__      = "$Date: 2004/09/13 21:29:09 $"
+__revision__  = "$Revision: 1.6 $"
+__date__      = "$Date: 2004/09/15 22:43:14 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -29,17 +29,23 @@
 
 
 class MergeError(VersionConflictError):
-    "(%s) merging %s failed because %s"
+    "(%s) merging %s failed because %s, reason code: %s"
 
     def __str__(self):
-        return self.__doc__ %(self.args[0], self.args[1].itsPath, self.args[2])
+        return self.__doc__ %(self.args[0], self.args[1].itsPath, self.args[2],
+                              self.getReasonCodeName())
 
     def getReasonCode(self):
         return self.args[3]
 
+    def getReasonCodeName(self):
+        return MergeError.codeNames.get(self.args[3], str(self.args[3]))
+
     def getItem(self):
         return self.args[1]
 
     BUG    = 0
     RENAME = 1
     MOVE   = 2
+
+    codeNames = { BUG: 'BUG', RENAME: 'RENAME', 'MOVE': MOVE }

Index: chandler/repository/persistence/XMLRefDict.py
diff -u chandler/repository/persistence/XMLRefDict.py:1.9 chandler/repository/persistence/XMLRefDict.py:1.10
--- chandler/repository/persistence/XMLRefDict.py:1.9	Tue Sep 14 20:35:48 2004
+++ chandler/repository/persistence/XMLRefDict.py	Wed Sep 15 15:43:14 2004
@@ -1,6 +1,6 @@
 
-__revision__  = "$Revision: 1.9 $"
-__date__      = "$Date: 2004/09/15 03:35:48 $"
+__revision__  = "$Revision: 1.10 $"
+__date__      = "$Date: 2004/09/15 22:43:14 $"
 __copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -534,6 +534,9 @@
                 if oldAlias != alias and link._alias != alias:
                     raise MergeError, ('merging children', self.item,
                                        'child %s renamed to %s and %s' %(oldAlias, link._alias, alias), MergeError.RENAME)
+        elif link._alias in self._aliases:
+            raise MergeError, ('merging children', self.item,
+                               'child %s conflicts with other child %s, both are named %s' %(child, self._aliases[link._alias], link._alias), MergeError.RENAME)
 
         if prev is None:
             if exists:

Index: chandler/repository/tests/TestMerge.py
diff -u chandler/repository/tests/TestMerge.py:1.3 chandler/repository/tests/TestMerge.py:1.4
--- chandler/repository/tests/TestMerge.py:1.3	Mon Sep 13 14:29:10 2004
+++ chandler/repository/tests/TestMerge.py	Wed Sep 15 15:43:15 2004
@@ -2,8 +2,8 @@
 Test merging of items
 """
 
-__revision__  = "$Revision: 1.3 $"
-__date__      = "$Date: 2004/09/13 21:29:10 $"
+__revision__  = "$Revision: 1.4 $"
+__date__      = "$Date: 2004/09/15 22:43:15 $"
 __copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -42,12 +42,12 @@
         ko = self.rep.findPath('//Schema/Core/Item')
         ao = []
         for i in xrange(o):
-            ao.append(ko.itsKind.newItem('ao_%02d' %(i), po))
+            ao.append(ko.newItem('ao_%02d' %(i), po))
         view.commit()
 
         view = self.rep.setCurrentView(main)
         for i in xrange(m):
-            am.append(km.itsKind.newItem('am_%02d' %(i), pm))
+            am.append(km.newItem('am_%02d' %(i), pm))
         main.commit()
 
         ic = [c.itsName for c in pm.iterChildren()]
@@ -158,6 +158,30 @@
             self.move('foo', 'bar')
         except MergeError, e:
             self.assert_(e.getReasonCode() == MergeError.MOVE)
+        else:
+            self.assert_(False)
+
+    def testCreateSameName(self):
+        view = self.rep.createView('view')
+        main = self.rep.setCurrentView(view)
+        po = self.rep['p']
+        ko = self.rep.findPath('//Schema/Core/Item')
+
+        ko.newItem('foo', po)
+        view.commit()
+        
+        view = self.rep.setCurrentView(main)
+        pm = self.rep['p']
+        km = self.rep.findPath('//Schema/Core/Item')
+
+        ko.newItem('foo', pm)
+
+        try:
+            main.commit()
+        except MergeError, e:
+            self.assert_(e.getReasonCode() == MergeError.RENAME)
+        else:
+            self.assert_(False)
 
 
 if __name__ == "__main__":



More information about the Commits mailing list