[Mesa-dev] [PATCH 5/6] tools/trace: Do a better job at comparing multi line strings.

jfonseca at vmware.com jfonseca at vmware.com
Fri Jun 21 04:53:29 PDT 2013


From: José Fonseca <jfonseca at vmware.com>

For TGSI diffing.
---
 src/gallium/tools/trace/diff_state.py | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/gallium/tools/trace/diff_state.py b/src/gallium/tools/trace/diff_state.py
index 470aeda..00853ba 100755
--- a/src/gallium/tools/trace/diff_state.py
+++ b/src/gallium/tools/trace/diff_state.py
@@ -28,6 +28,7 @@
 import json
 import optparse
 import re
+import difflib
 import sys
 
 
@@ -131,7 +132,7 @@ class Dumper(Visitor):
         self._write(']')
 
     def visitValue(self, node):
-        self._write(json.dumps(node))
+        self._write(json.dumps(node, allow_nan=True))
 
 
 
@@ -246,6 +247,38 @@ class Differ(Visitor):
             self.replace(a, b)
 
     def replace(self, a, b):
+        if isinstance(a, basestring) and isinstance(b, basestring):
+            if '\n' in a or '\n' in b:
+                a = a.splitlines()
+                b = b.splitlines()
+                differ = difflib.Differ()
+                result = differ.compare(a, b)
+                self.dumper.level += 1
+                for entry in result:
+                    self.dumper._newline()
+                    self.dumper._indent()
+                    tag = entry[:2]
+                    text = entry[2:]
+                    if tag == '? ':
+                        tag = '  '
+                        prefix = ' '
+                        text = text.rstrip()
+                        suffix = ''
+                    else:
+                        prefix = '"'
+                        suffix = '\\n"'
+                    line = tag + prefix + text + suffix
+                    self.dumper._write(line)
+                self.dumper.level -= 1
+                return
+        self.dumper.visit(a)
+        self.dumper._write(' -> ')
+        self.dumper.visit(b)
+
+    def isMultilineString(self, value):
+        return isinstance(value, basestring) and '\n' in value
+    
+    def replaceMultilineString(self, a, b):
         self.dumper.visit(a)
         self.dumper._write(' -> ')
         self.dumper.visit(b)
-- 
1.8.1.2



More information about the mesa-dev mailing list