diff options
Diffstat (limited to 'llvm/utils')
| -rw-r--r-- | llvm/utils/lit/lit/TestRunner.py | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index ce9e0a0b88b..795eaa79c71 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -2,6 +2,7 @@ from __future__ import absolute_import import difflib import errno import functools +import io import itertools import getopt import os, signal, subprocess, sys @@ -386,9 +387,51 @@ def executeBuiltinDiff(cmd, cmd_shenv): return path, sorted(child_trees) def compareTwoFiles(filepaths): + compare_bytes = False + encoding = None filelines = [] for file in filepaths: - with open(file, 'r') as f: + try: + with open(file, 'r') as f: + filelines.append(f.readlines()) + except UnicodeDecodeError: + try: + with open(file, 'r', encoding="utf-8") as f: + filelines.append(f.readlines()) + encoding = "utf-8" + except: + compare_bytes = True + + if compare_bytes: + return compareTwoBinaryFiles(filepaths) + else: + return compareTwoTextFiles(filepaths, encoding) + + def compareTwoBinaryFiles(filepaths): + filelines = [] + for file in filepaths: + with open(file, 'rb') as f: + filelines.append(f.readlines()) + + exitCode = 0 + if hasattr(difflib, 'diff_bytes'): + # python 3.5 or newer + diffs = difflib.diff_bytes(difflib.unified_diff, filelines[0], filelines[1], filepaths[0].encode(), filepaths[1].encode()) + diffs = [diff.decode() for diff in diffs] + else: + # python 2.7 + func = difflib.unified_diff if unified_diff else difflib.context_diff + diffs = func(filelines[0], filelines[1], filepaths[0], filepaths[1]) + + for diff in diffs: + stdout.write(diff) + exitCode = 1 + return exitCode + + def compareTwoTextFiles(filepaths, encoding): + filelines = [] + for file in filepaths: + with open(file, 'r', encoding=encoding) as f: filelines.append(f.readlines()) exitCode = 0 |

