[Zope] BUG with a patch

Jerome Alet alet@unice.fr
Sat, 27 Jan 2001 10:25:38 +0100


--wac7ysb48OaltWcw
Content-Type: text/plain; charset=us-ascii

Hi,

the way the manage_renameObjects() method was coded made it impossible 
to exchange two objects ids in one pass, e.g. rename Obj1 to Obj2 and 
Obj2 to Obj1.

The attached patch seems to correct this problem, however a better 
temporary id construction method is needed.

I've tried to submit it to the colector but I don't know if it succeeded.

hoping this will help

Jerome Alet

--wac7ysb48OaltWcw
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="CopySupport-2.3.0-final.patch"

--- CopySupport.py.2.3.0-final	Sat Jan 27 10:04:42 2001
+++ CopySupport.py	Sat Jan 27 10:10:48 2001
@@ -280,9 +280,20 @@
         """Rename several sub-objects"""
         if len(ids) != len(new_ids):
             raise 'BadRequst','Please rename each listed object.'
+        conflicts = []    
         for i in range(len(ids)):
             if ids[i] != new_ids[i]:
+                if new_ids[i] not in ids :      # may a conflict occur ?
                 self.manage_renameObject(ids[i], new_ids[i], REQUEST)
+                else :        
+                        tempo = ".temporary_%i_" % i
+                        self.manage_renameObject(ids[i], tempo)
+                        conflicts.append((tempo, new_ids[i]))
+                        
+        # now we rename conflictuous objects                
+        for (old, new) in conflicts :               
+                self.manage_renameObject(old, new)
+                
         if REQUEST is not None:
             return self.manage_main(self, REQUEST, update_menu=1)
         return None

--wac7ysb48OaltWcw--