123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/usr/bin/env python3
- # Copyright 2020 the V8 project authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """
- Compare two folders and print any differences between files to both a
- results file and stderr.
- Specifically we use this to compare the output of Torque generator for
- both x86 and x64 (-m32) toolchains.
- """
- import difflib
- import filecmp
- import itertools
- import os
- import sys
- assert len(sys.argv) > 3
- folder1 = sys.argv[1]
- folder2 = sys.argv[2]
- results_file_name = sys.argv[3]
- with open(results_file_name, "w") as results_file:
- def write(line):
- # Print line to both results file and stderr
- sys.stderr.write(line)
- results_file.write(line)
- def has_one_sided_diff(dcmp, side, side_list):
- # Check that we do not have files only on one side of the comparison
- if side_list:
- write("Some files exist only in %s\n" % side)
- for fl in side_list:
- write(fl)
- return side_list
- def has_content_diff(dcmp):
- # Check that we do not have content differences in the common files
- _, diffs, _ = filecmp.cmpfiles(
- dcmp.left, dcmp.right,
- dcmp.common_files, shallow=False)
- if diffs:
- write("Found content differences between %s and %s\n" %
- (dcmp.left, dcmp.right))
- for name in diffs:
- write("File diff %s\n" % name)
- left_file = os.path.join(dcmp.left, name)
- right_file = os.path.join(dcmp.right, name)
- with open(left_file) as f1, open(right_file) as f2:
- diff = difflib.unified_diff(
- f1.readlines(), f2.readlines(),
- dcmp.left, dcmp.right)
- for l in itertools.islice(diff, 100):
- write(l)
- write("\n\n")
- return diffs
- dcmp = filecmp.dircmp(folder1, folder2)
- has_diffs = has_one_sided_diff(dcmp, dcmp.left, dcmp.left_only) \
- or has_one_sided_diff(dcmp, dcmp.right, dcmp.right_only) \
- or has_content_diff(dcmp)
- if has_diffs:
- sys.exit(1)
|