| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Compare the artifacts from two builds.""" | 6 """Compare the artifacts from two builds.""" |
| 7 | 7 |
| 8 import difflib | 8 import difflib |
| 9 import json | 9 import json |
| 10 import optparse | 10 import optparse |
| 11 import os | 11 import os |
| 12 import struct | 12 import struct |
| 13 import sys | 13 import sys |
| 14 import time | 14 import time |
| 15 | 15 |
| 16 | 16 |
| 17 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | 17 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) |
| 18 | 18 |
| 19 | 19 |
| 20 def get_files_to_compare(build_dir, recursive=False): | 20 def get_files_to_compare(build_dir, recursive=False): |
| 21 """Get the list of files to compare.""" | 21 """Get the list of files to compare.""" |
| 22 allowed = frozenset( | 22 allowed = frozenset( |
| 23 ('', '.apk', '.app', '.dll', '.dylib', '.exe', '.nexe', '.so')) | 23 ('', '.apk', '.app', '.dll', '.dylib', '.exe', '.nexe', '.so')) |
| 24 non_x_ok_exts = frozenset(('.apk', '.isolated')) |
| 24 def check(f): | 25 def check(f): |
| 25 if not os.path.isfile(f): | 26 if not os.path.isfile(f): |
| 26 return False | 27 return False |
| 27 if os.path.basename(f).startswith('.'): | 28 if os.path.basename(f).startswith('.'): |
| 28 return False | 29 return False |
| 29 ext = os.path.splitext(f)[1] | 30 ext = os.path.splitext(f)[1] |
| 30 if ext == '.isolated': | 31 if ext in non_x_ok_exts: |
| 31 return True | 32 return True |
| 32 return ext in allowed and os.access(f, os.X_OK) | 33 return ext in allowed and os.access(f, os.X_OK) |
| 33 | 34 |
| 34 ret_files = set() | 35 ret_files = set() |
| 35 for root, dirs, files in os.walk(build_dir): | 36 for root, dirs, files in os.walk(build_dir): |
| 36 if not recursive: | 37 if not recursive: |
| 37 dirs[:] = [d for d in dirs if d.endswith('_apk')] | 38 dirs[:] = [d for d in dirs if d.endswith('_apk')] |
| 38 for f in (f for f in files if check(os.path.join(root, f))): | 39 for f in (f for f in files if check(os.path.join(root, f))): |
| 39 ret_files.add(os.path.relpath(os.path.join(root, f), build_dir)) | 40 ret_files.add(os.path.relpath(os.path.join(root, f), build_dir)) |
| 40 return ret_files | 41 return ret_files |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 if not options.second_build_dir: | 182 if not options.second_build_dir: |
| 182 parser.error('--second-build-dir is required') | 183 parser.error('--second-build-dir is required') |
| 183 | 184 |
| 184 return compare_build_artifacts(os.path.abspath(options.first_build_dir), | 185 return compare_build_artifacts(os.path.abspath(options.first_build_dir), |
| 185 os.path.abspath(options.second_build_dir), | 186 os.path.abspath(options.second_build_dir), |
| 186 options.recursive) | 187 options.recursive) |
| 187 | 188 |
| 188 | 189 |
| 189 if __name__ == '__main__': | 190 if __name__ == '__main__': |
| 190 sys.exit(main()) | 191 sys.exit(main()) |
| OLD | NEW |