[Erp5-report] r18864 - in /experimental/bt5/erp5_garbage_collector_experimental: SkinTempla...

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Jan 25 18:26:47 CET 2008


Author: bartek
Date: Fri Jan 25 18:26:47 2008
New Revision: 18864

URL: http://svn.erp5.org?rev=18864&view=rev
Log:
check for inbound relations before removal (as in Folder_delete), so that we don't break relations while degarbaging

Modified:
    experimental/bt5/erp5_garbage_collector_experimental/SkinTemplateItem/portal_skins/erp5_garbage_collector_experimental/ERP5Site_collectGarbage.xml
    experimental/bt5/erp5_garbage_collector_experimental/bt/revision

Modified: experimental/bt5/erp5_garbage_collector_experimental/SkinTemplateItem/portal_skins/erp5_garbage_collector_experimental/ERP5Site_collectGarbage.xml
URL: http://svn.erp5.org/experimental/bt5/erp5_garbage_collector_experimental/SkinTemplateItem/portal_skins/erp5_garbage_collector_experimental/ERP5Site_collectGarbage.xml?rev=18864&r1=18863&r2=18864&view=diff
==============================================================================
--- experimental/bt5/erp5_garbage_collector_experimental/SkinTemplateItem/portal_skins/erp5_garbage_collector_experimental/ERP5Site_collectGarbage.xml (original)
+++ experimental/bt5/erp5_garbage_collector_experimental/SkinTemplateItem/portal_skins/erp5_garbage_collector_experimental/ERP5Site_collectGarbage.xml Fri Jan 25 18:26:47 2008
@@ -79,6 +79,23 @@
   activities (or run it often enough or rarely enough to make it acceptable).\n
 """\n
 \n
+def Object_hasRelation(obj):\n
+  # Check if there is some related objets.\n
+  result = 0\n
+  for o in obj.getIndexableChildValueList():\n
+    for related in obj.portal_categories.getRelatedValueList(o):\n
+      related_url = related.getRelativeUrl()\n
+      if related_url.startswith(obj.getRelativeUrl()):\n
+        continue\n
+      elif related_url.startswith(\'portal_simulation\'):\n
+        continue\n
+      elif related_url.startswith(\'portal_trash\'):\n
+        continue\n
+      else:\n
+        result = 1\n
+        break\n
+  return result\n
+\n
 context.log(\'>>>>>>>>>>>>>>> Collecting garbage\')\n
 sec = DateTime().timeTime() - context.getGarbageObjectAge()\n
 before_date = DateTime(sec).strftime(\'%Y/%m/%d %H:%M:%S\')\n
@@ -92,7 +109,6 @@
   params[\'portal_type\'] = portal_type\n
   res = context.portal_catalog(**params)\n
   predicate = getattr(context, \'%s_isGarbage\' % portal_type.replace(\' \', \'\'), None)\n
-  context.log(predicate)\n
   if predicate is None:\n
     predicate = lambda x: (x.getTitle() is None or x.getTitle() == \'\')\n
   # iterate over the result\n
@@ -102,7 +118,7 @@
   parent_child_dict = {}\n
   for r in res:\n
     o = r.getObject()\n
-    if predicate(o):\n
+    if predicate(o) and not Object_hasRelation(o): # predicate is usu. easier so we do it first\n
       parent = o.getParentValue()\n
       if parent_child_dict.has_key(parent):\n
         parent_child_dict[parent].append(o.getId())\n
@@ -156,6 +172,7 @@
                         <value>
                           <tuple>
                             <string>kw</string>
+                            <string>Object_hasRelation</string>
                             <string>_getattr_</string>
                             <string>context</string>
                             <string>DateTime</string>

Modified: experimental/bt5/erp5_garbage_collector_experimental/bt/revision
URL: http://svn.erp5.org/experimental/bt5/erp5_garbage_collector_experimental/bt/revision?rev=18864&r1=18863&r2=18864&view=diff
==============================================================================
--- experimental/bt5/erp5_garbage_collector_experimental/bt/revision (original)
+++ experimental/bt5/erp5_garbage_collector_experimental/bt/revision Fri Jan 25 18:26:47 2008
@@ -1,1 +1,1 @@
-4
+6




More information about the Erp5-report mailing list