734169f9b0
Bug: v8:9641 Change-Id: Ia85d14677e8eb7d2d14ff7eb150a1b0b279642f4 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1998078 Commit-Queue: Liviu Rau <liviurau@chromium.org> Reviewed-by: Michael Achenbach <machenbach@chromium.org> Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#65892}
67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
#!/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)
|