Index: tools/determinism/compare_build_artifacts.py |
diff --git a/tools/determinism/compare_build_artifacts.py b/tools/determinism/compare_build_artifacts.py |
index d486cb99db63af1ac1eaa66dcce8164b7e3b6d87..ccd3ddf154447f7976a2f404e0edd12b32e6b7f0 100755 |
--- a/tools/determinism/compare_build_artifacts.py |
+++ b/tools/determinism/compare_build_artifacts.py |
@@ -436,6 +436,22 @@ def diff_dict(a, b): |
return out.rstrip() |
+def may_skip_coff_header(lhs_header, rhs_header): |
+ """Returns True if we can skip checking COFF headers.""" |
+ # COFF header: |
+ # 0 - 1: magic. |
+ # 2 - 3: # sections. |
+ # 4 - 8: timestamp. |
+ # ... |
+ if len(lhs_header) < 8: |
+ return False |
+ lhs_data = [l for l in lhs_header] |
M-A Ruel
2016/09/06 15:35:54
Replace the lines 448-452 with:
return lhs_data[4:
Yoshisato Yanagisawa
2016/09/07 01:50:28
I would basically change the code like so but let
|
+ rhs_data = [r for r in rhs_header] |
+ for x in xrange(4): |
+ lhs_data[4 + x] = rhs_data[4 + x] = chr(0) |
+ return rhs_data == lhs_data |
+ |
+ |
def diff_binary(first_filepath, second_filepath, file_len): |
"""Returns a compact binary diff if the diff is small enough.""" |
CHUNK_SIZE = 32 |
@@ -445,6 +461,17 @@ def diff_binary(first_filepath, second_filepath, file_len): |
offset = 0 |
with open(first_filepath, 'rb') as lhs: |
with open(second_filepath, 'rb') as rhs: |
+ # Skip COFF header on Win32 object file if only timestamps are different. |
+ if sys.platform == 'win32' and first_filepath.endswith('.obj'): |
+ COFF_HEADER_SIZE = 22 |
+ lhs_data = lhs.read(COFF_HEADER_SIZE) |
+ rhs_data = rhs.read(COFF_HEADER_SIZE) |
+ if may_skip_coff_header(lhs_data, rhs_data): |
+ offset += COFF_HEADER_SIZE |
+ else: |
+ lhs.seek(0) |
+ rhs.seek(0) |
+ |
while True: |
lhs_data = lhs.read(CHUNK_SIZE) |
rhs_data = rhs.read(CHUNK_SIZE) |
@@ -559,7 +586,7 @@ def compare_deps(first_dir, second_dir, targets): |
second_file = os.path.join(second_dir, d) |
result = compare_files(first_file, second_file) |
if result: |
- print('%-*s: %s' % (max_filepath_len, d, result)) |
+ print(' %-*s: %s' % (max_filepath_len, d, result)) |
def compare_build_artifacts(first_dir, second_dir, target_platform, |