v8/tools/compare_torque_output.py

67 lines
2.0 KiB
Python
Raw Normal View History

#!/usr/bin/env python
# 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)