[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - SkinsTool: Added the ability to do a diff comparison between items

Jens Vagelpohl jens at dataflake.org
Tue Aug 26 10:50:09 EDT 2008


Log message for revision 90336:
  - SkinsTool: Added the ability to do a diff comparison between items
    found using the portal_skins "Find" ZMI tab.
    (https://bugs.launchpad.net/zope-cmf/+bug/238489)
  

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
  A   Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml
  U   Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2008-08-26 14:36:23 UTC (rev 90335)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2008-08-26 14:50:09 UTC (rev 90336)
@@ -4,8 +4,13 @@
 2.2.0 (unreleased)
 ------------------
 
+- SkinsTool: Added the ability to do a diff comparison between items
+  found using the portal_skins "Find" ZMI tab.
+  (https://bugs.launchpad.net/zope-cmf/+bug/238489)
+
 - fiveactionstool: fix typo in a method name that isn't even used in the CMF 
   or Plone.
+  (https://bugs.launchpad.net/zope-cmf/+bug/257259)
 
 - TypeInformation and TypesTool: Added support for add view actions.
   Type infos now have a new 'add_view_expr' property and implement IAction.

Modified: Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py	2008-08-26 14:36:23 UTC (rev 90335)
+++ Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py	2008-08-26 14:50:09 UTC (rev 90336)
@@ -41,6 +41,7 @@
 from utils import _dtmldir
 from utils import getToolByName
 from utils import UniqueObject
+from difflib import unified_diff
 
 def modifiedOptions():
     # Remove the existing "Properties" option and add our own.
@@ -107,8 +108,10 @@
     manage_findForm = DTMLFile('findForm', _dtmldir,
                                management_view='Find')
 
+    security.declareProtected(ManagePortal, 'manage_compareResults')
+    manage_compareResults = DTMLFile('compareResults', _dtmldir,
+                                 management_view='Compare')
 
-
     security.declareProtected(ManagePortal, 'manage_skinLayers')
     def manage_skinLayers(self, chosen=(), add_skin=0, del_skin=0,
                           skinname='', skinpath='', REQUEST=None):
@@ -370,4 +373,25 @@
         if make_default:
             self.default_skin = skinname
 
+    security.declareProtected(AccessContentsInformation, 'getDiff')
+    def getDiff(self, item_one_path, item_two_path, reverse=0):
+        """ Return a diff between one and two.
+        """
+        if not reverse:
+            item_one = self.unrestrictedTraverse(item_one_path)
+            item_two = self.unrestrictedTraverse(item_two_path)
+        else:
+            item_one = self.unrestrictedTraverse(item_two_path)
+            item_two = self.unrestrictedTraverse(item_one_path)
+
+        res =  unified_diff( item_one.read().splitlines()
+                           , item_two.read().splitlines()
+                           , item_one_path
+                           , item_two_path
+                           , ''
+                           , ''
+                           , lineterm=""
+                           )
+        return res
+
 InitializeClass(SkinsTool)

Added: Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml	                        (rev 0)
+++ Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml	2008-08-26 14:50:09 UTC (rev 90336)
@@ -0,0 +1,52 @@
+<dtml-var manage_page_header>
+<dtml-var manage_tabs>
+
+<dtml-if btn_submit>
+  <br/>
+
+  <dtml-if expr="len(item_paths) != 2">
+
+    Please select two items to compare on the <i>Find</i> page.
+
+  <dtml-else>
+    
+    <form action="manage_compareResults" method="POST">
+      <dtml-in item_paths>
+        <input name="item_paths:list" value="&dtml-sequence-item;" type="hidden"/>
+      </dtml-in>
+      <input name="reverse:int" value=<dtml-var expr="abs(REQUEST.get('reverse',0)-1)"> type="hidden"/>
+      <input type="submit" name="btn_submit" value="Reverse Diff">
+    </form>
+
+    <dtml-let lines="[line for line in getDiff(item_paths[0], item_paths[1], REQUEST.get('reverse', 0))]">
+
+      <dtml-if lines>
+        <dtml-in "lines">
+        <dtml-let line="_['sequence-item']">
+
+            <dtml-if "line.startswith('---')">
+              <pre style="color: green; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+            <dtml-elif "line.startswith('+++')">
+              <pre style="color: green; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+            <dtml-elif "line.startswith('@@')">
+              <pre style="color: #daa520; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+            <dtml-elif "line.startswith('-')">
+              <pre style="color: purple; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+            <dtml-elif "line.startswith('+')">
+              <pre style="color: #20b2aa; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+            <dtml-else>
+              <pre style="margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+            </dtml-if>
+
+          </dtml-let>
+        </dtml-in>
+      <dtml-else>
+        No changes
+      </dtml-if>
+    </dtml-let>
+
+  </dtml-if>
+</dtml-if>
+
+Back to <a href="manage_findForm">Find</a>
+<dtml-var manage_page_footer>

Modified: Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml	2008-08-26 14:36:23 UTC (rev 90335)
+++ Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml	2008-08-26 14:50:09 UTC (rev 90336)
@@ -72,6 +72,8 @@
 </tr>
 </dtml-if>
 </table>
+
+<FORM ACTION="manage_compareResults" METHOD="GET">
 <TABLE width="100%" CELLSPACING="0" CELLPADDING="2" border="0">
 <dtml-in results size="batch_size" start="query_start" sort_expr="skey" reverse_expr="rkey">
 <dtml-if sequence-odd>
@@ -79,7 +81,8 @@
 <dtml-else>
 <TR class="row-hilite">
 </dtml-if>
-  <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="16">
+  <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="40">
+  <input type="checkbox" value="&dtml.url_quote-sequence-key;" name="item_paths:list"/>
   <A HREF="&dtml.url_quote-sequence-key;/manage_workspace">
   <IMG SRC="&dtml-BASEPATH1;/&dtml-icon;"
    ALT="[&dtml-meta_type;]" BORDER="0"></A>
@@ -100,7 +103,10 @@
 </TR>
 </dtml-in>
 </TABLE>
+<INPUT TYPE="SUBMIT" NAME="btn_submit" VALUE="Compare">  
+</FORM>
 </dtml-with>
+
 </dtml-if>
 
 <a name="form">



More information about the Checkins mailing list