OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """A tool to archive layout test results. | 6 """A tool to archive layout test results. |
7 | 7 |
8 To archive files on Google Storage, pass a GS bucket name via --gs-bucket. | 8 To archive files on Google Storage, pass a GS bucket name via --gs-bucket. |
9 To control access to archives, pass a value for --gs-acl (e.g. 'public-read', | 9 To control access to archives, pass a value for --gs-acl (e.g. 'public-read', |
10 see https://developers.google.com/storage/docs/accesscontrol#extension | 10 see https://developers.google.com/storage/docs/accesscontrol#extension |
(...skipping 17 matching lines...) Expand all Loading... | |
28 from common import archive_utils | 28 from common import archive_utils |
29 from common import chromium_utils | 29 from common import chromium_utils |
30 from slave import build_directory | 30 from slave import build_directory |
31 from slave import slave_utils | 31 from slave import slave_utils |
32 | 32 |
33 # Directory name, above the build directory, in which test results can be | 33 # Directory name, above the build directory, in which test results can be |
34 # found if no --results-dir option is given. | 34 # found if no --results-dir option is given. |
35 RESULT_DIR = 'layout-test-results' | 35 RESULT_DIR = 'layout-test-results' |
36 | 36 |
37 | 37 |
38 def _CollectArchiveFiles(output_dir): | 38 def _CollectZipArchiveFiles(output_dir): |
39 """Returns a list of actual layout test result files to archive.""" | 39 """Returns a list of layout test result files to archive in a zip file.""" |
40 actual_file_list = [] | 40 file_list = [] |
41 | 41 |
42 for path, _, files in os.walk(output_dir): | 42 for path, _, files in os.walk(output_dir): |
43 rel_path = path[len(output_dir + '\\'):] | 43 rel_path = path[len(output_dir + '\\'):] |
44 for name in files: | 44 for name in files: |
45 if _IsActualResultFile(name): | 45 if _IsActualResultFile(name): |
46 actual_file_list.append(os.path.join(rel_path, name)) | 46 file_list.append(os.path.join(rel_path, name)) |
47 if _IsDiffFile(name): | |
48 diff_file_list.append(os.path.join(rel_path, name)) | |
Dirk Pranke
2016/10/18 20:00:51
diff_file_list isn't declared or returned? Did you
qyearsley
2016/10/18 20:50:33
Right, that's what I meant -- now merged them and
| |
47 elif name.endswith('.json'): | 49 elif name.endswith('.json'): |
48 actual_file_list.append(os.path.join(rel_path, name)) | 50 file_list.append(os.path.join(rel_path, name)) |
49 | 51 |
50 if os.path.exists(os.path.join(output_dir, 'results.html')): | 52 if os.path.exists(os.path.join(output_dir, 'results.html')): |
51 actual_file_list.append('results.html') | 53 file_list.append('results.html') |
52 | 54 |
53 if sys.platform == 'win32': | 55 if sys.platform == 'win32': |
54 if os.path.exists(os.path.join(output_dir, 'access_log.txt')): | 56 if os.path.exists(os.path.join(output_dir, 'access_log.txt')): |
55 actual_file_list.append('access_log.txt') | 57 file_list.append('access_log.txt') |
56 if os.path.exists(os.path.join(output_dir, 'error_log.txt')): | 58 if os.path.exists(os.path.join(output_dir, 'error_log.txt')): |
57 actual_file_list.append('error_log.txt') | 59 file_list.append('error_log.txt') |
58 | 60 |
59 return actual_file_list | 61 return file_list |
60 | 62 |
61 | 63 |
62 def _IsActualResultFile(name): | 64 def _IsActualResultFile(name): |
63 if '-stack.' in name or '-crash-log.' in name: | 65 if '-stack.' in name or '-crash-log.' in name: |
64 return True | 66 return True |
65 extension = os.path.splitext(name)[1] | 67 extension = os.path.splitext(name)[1] |
66 return ('-actual.' in name and extension in | 68 return ('-actual.' in name and extension in |
67 ('.txt', '.png', '.checksum', '.wav')) | 69 ('.txt', '.png', '.checksum', '.wav')) |
68 | 70 |
69 | 71 |
72 def _IsDiffFile(name): | |
73 return ('-wdiff.' in name or | |
74 '-expected.' in name or | |
75 name.endswith('-diff.txt') or | |
76 name.endswith('-diff.png')) | |
77 | |
78 | |
70 def archive_layout(options): | 79 def archive_layout(options): |
71 chrome_dir = os.path.abspath(options.build_dir) | 80 chrome_dir = os.path.abspath(options.build_dir) |
72 results_dir_basename = os.path.basename(options.results_dir) | 81 results_dir_basename = os.path.basename(options.results_dir) |
73 if options.results_dir is not None: | 82 if options.results_dir is not None: |
74 options.results_dir = os.path.abspath(os.path.join(options.build_dir, | 83 options.results_dir = os.path.abspath(os.path.join(options.build_dir, |
75 options.results_dir)) | 84 options.results_dir)) |
76 else: | 85 else: |
77 options.results_dir = chromium_utils.FindUpward(chrome_dir, RESULT_DIR) | 86 options.results_dir = chromium_utils.FindUpward(chrome_dir, RESULT_DIR) |
78 print 'Archiving results from %s' % options.results_dir | 87 print 'Archiving results from %s' % options.results_dir |
79 staging_dir = options.staging_dir or slave_utils.GetStagingDir(chrome_dir) | 88 staging_dir = options.staging_dir or slave_utils.GetStagingDir(chrome_dir) |
80 print 'Staging in %s' % staging_dir | 89 print 'Staging in %s' % staging_dir |
81 if not os.path.exists(staging_dir): | 90 if not os.path.exists(staging_dir): |
82 os.makedirs(staging_dir) | 91 os.makedirs(staging_dir) |
83 | 92 |
84 actual_file_list = _CollectArchiveFiles(options.results_dir) | 93 file_list = _CollectZipArchiveFiles(options.results_dir) |
85 zip_file = chromium_utils.MakeZip(staging_dir, | 94 zip_file = chromium_utils.MakeZip(staging_dir, |
86 results_dir_basename, | 95 results_dir_basename, |
87 actual_file_list, | 96 file_list, |
88 options.results_dir)[1] | 97 options.results_dir)[1] |
89 | 98 |
90 # Extract the build name of this slave (e.g., 'chrome-release') from its | 99 # Extract the build name of this slave (e.g., 'chrome-release') from its |
91 # configuration file if not provided as a param. | 100 # configuration file if not provided as a param. |
92 build_name = options.builder_name or slave_utils.SlaveBuildName(chrome_dir) | 101 build_name = options.builder_name or slave_utils.SlaveBuildName(chrome_dir) |
93 build_name = re.sub('[ .()]', '_', build_name) | 102 build_name = re.sub('[ .()]', '_', build_name) |
94 | 103 |
95 wc_dir = os.path.dirname(chrome_dir) | 104 wc_dir = os.path.dirname(chrome_dir) |
96 last_change = slave_utils.GetHashOrRevision(wc_dir) | 105 last_change = slave_utils.GetHashOrRevision(wc_dir) |
97 | 106 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
178 options = _ParseOptions() | 187 options = _ParseOptions() |
179 logging.basicConfig(level=logging.INFO, | 188 logging.basicConfig(level=logging.INFO, |
180 format='%(asctime)s %(filename)s:%(lineno)-3d' | 189 format='%(asctime)s %(filename)s:%(lineno)-3d' |
181 ' %(levelname)s %(message)s', | 190 ' %(levelname)s %(message)s', |
182 datefmt='%y%m%d %H:%M:%S') | 191 datefmt='%y%m%d %H:%M:%S') |
183 return archive_layout(options) | 192 return archive_layout(options) |
184 | 193 |
185 | 194 |
186 if '__main__' == __name__: | 195 if '__main__' == __name__: |
187 sys.exit(main()) | 196 sys.exit(main()) |
OLD | NEW |