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  | 

