tools/trace: Do a better job at comparing multi line strings.

For TGSI diffing.
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
José Fonseca 2013-06-21 11:08:56 +01:00
parent 9b7d21f8f5
commit c14f516e58

View file

@ -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)