From: José Fonseca Date: Fri, 21 Jun 2013 10:08:56 +0000 (+0100) Subject: tools/trace: Do a better job at comparing multi line strings. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c14f516e589a16dead466dcfcd4bcb078e5b69dd;p=mesa.git tools/trace: Do a better job at comparing multi line strings. For TGSI diffing. Reviewed-by: Brian Paul --- diff --git a/src/gallium/tools/trace/diff_state.py b/src/gallium/tools/trace/diff_state.py index 470aeda059b..00853bacbf7 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)