| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Fetches a copy of the latest state of a W3C test repository and commits. | 5 """Fetches a copy of the latest state of a W3C test repository and commits. |
| 6 | 6 |
| 7 If this script is given the argument --auto-update, it will also attempt to | 7 If this script is given the argument --auto-update, it will also attempt to |
| 8 upload a CL, triggery try jobs, and make any changes that are required for | 8 upload a CL, triggery try jobs, and make any changes that are required for |
| 9 new failing tests before committing. | 9 new failing tests before committing. |
| 10 """ | 10 """ |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 self.run(['git', 'add', destination]) | 66 self.run(['git', 'add', destination]) |
| 67 | 67 |
| 68 elif self.target == 'css': | 68 elif self.target == 'css': |
| 69 import_commitish = self.update(CSS_DEST_NAME, WPT_REPO_URL) | 69 import_commitish = self.update(CSS_DEST_NAME, WPT_REPO_URL) |
| 70 else: | 70 else: |
| 71 raise AssertionError("Unsupported target %s" % self.target) | 71 raise AssertionError("Unsupported target %s" % self.target) |
| 72 | 72 |
| 73 has_changes = self.commit_changes_if_needed(chromium_commitish, import_c
ommitish) | 73 has_changes = self.commit_changes_if_needed(chromium_commitish, import_c
ommitish) |
| 74 | 74 |
| 75 if self.auto_update and has_changes: | 75 if self.auto_update and has_changes: |
| 76 self.do_auto_update() | 76 commit_successful = self.do_auto_update() |
| 77 if not commit_successful: |
| 78 return 1 |
| 77 return 0 | 79 return 0 |
| 78 | 80 |
| 79 def parse_args(self, argv): | 81 def parse_args(self, argv): |
| 80 parser = argparse.ArgumentParser() | 82 parser = argparse.ArgumentParser() |
| 81 parser.description = __doc__ | 83 parser.description = __doc__ |
| 82 parser.add_argument('-v', '--verbose', action='store_true', | 84 parser.add_argument('-v', '--verbose', action='store_true', |
| 83 help='log what we are doing') | 85 help='log what we are doing') |
| 84 parser.add_argument('--allow-local-commits', action='store_true', | 86 parser.add_argument('--allow-local-commits', action='store_true', |
| 85 help='allow script to run even if we have local comm
its') | 87 help='allow script to run even if we have local comm
its') |
| 86 parser.add_argument('--keep-w3c-repos-around', action='store_true', | 88 parser.add_argument('--keep-w3c-repos-around', action='store_true', |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 def print_(self, msg): | 264 def print_(self, msg): |
| 263 self.host.print_(msg) | 265 self.host.print_(msg) |
| 264 | 266 |
| 265 def do_auto_update(self): | 267 def do_auto_update(self): |
| 266 """Attempts to upload a CL, make any required adjustments, and commit. | 268 """Attempts to upload a CL, make any required adjustments, and commit. |
| 267 | 269 |
| 268 This function assumes that the imported repo has already been updated, | 270 This function assumes that the imported repo has already been updated, |
| 269 and that change has been committed. There may be newly-failing tests, | 271 and that change has been committed. There may be newly-failing tests, |
| 270 so before being able to commit these new changes, we may need to update | 272 so before being able to commit these new changes, we may need to update |
| 271 TestExpectations or download new baselines. | 273 TestExpectations or download new baselines. |
| 274 |
| 275 Returns: |
| 276 True if successfully committed, False otherwise. |
| 272 """ | 277 """ |
| 273 email_list = self.get_directory_owners_to_cc() | 278 email_list = self.get_directory_owners_to_cc() |
| 274 self.print_('## Uploading change list.') | 279 self.print_('## Uploading change list.') |
| 275 self.check_run(self.generate_upload_command(email_list)) | 280 self.check_run(self.generate_upload_command(email_list)) |
| 276 self.trigger_try_jobs() | 281 self.trigger_try_jobs() |
| 277 if self.has_failing_results(): | 282 if self.has_failing_results(): |
| 278 self.write_test_expectations() | 283 self.write_test_expectations() |
| 279 # TODO(qyearsley): After writing test expectations, the CL needs | 284 command = ['git', 'cl', 'set-commit', '--rietveld'] |
| 280 # to be tried again on the try bots, and closed if it fails. | 285 if self.auth_refresh_token_json: |
| 281 else: | 286 command += ['--auth-refresh-token-json', self.auth_refresh_token_jso
n] |
| 282 self.print_('No Failures, committing patch.') | 287 self.run(command) |
| 283 self.run(['git', 'cl', 'land', '-f', '--auth-refresh-token-json', self.a
uth_refresh_token_json]) | 288 if self.has_failing_results(): |
| 284 # TODO(qyearsley): Attempting to land should trigger the CQ -- if | 289 self.print_('## CL has failing results when trying to land; aborting
.') |
| 285 # the CQ fails, we should abort and close the CL. | 290 command = ['git', 'cl', 'set-close'] |
| 291 if self.auth_refresh_token_json: |
| 292 command += ['--auth-refresh-token-json', self.auth_refresh_token
_json] |
| 293 self.run(command) |
| 294 return False |
| 295 return True |
| 296 |
| 286 | 297 |
| 287 def get_directory_owners_to_cc(self): | 298 def get_directory_owners_to_cc(self): |
| 288 """Returns a list of email addresses to CC for the current import.""" | 299 """Returns a list of email addresses to CC for the current import.""" |
| 289 self.print_('## Gathering directory owners emails to CC.') | 300 self.print_('## Gathering directory owners emails to CC.') |
| 290 directory_owners_file_path = self.finder.path_from_webkit_base( | 301 directory_owners_file_path = self.finder.path_from_webkit_base( |
| 291 'Tools', 'Scripts', 'webkitpy', 'w3c', 'directory_owners.json') | 302 'Tools', 'Scripts', 'webkitpy', 'w3c', 'directory_owners.json') |
| 292 with open(directory_owners_file_path) as data_file: | 303 with open(directory_owners_file_path) as data_file: |
| 293 directory_to_owner = self.parse_directory_owners(json.load(data_file
)) | 304 directory_to_owner = self.parse_directory_owners(json.load(data_file
)) |
| 294 out = self.check_run(['git', 'diff', 'master', '--name-only']) | 305 out = self.check_run(['git', 'diff', 'master', '--name-only']) |
| 295 changed_files = out.splitlines() | 306 changed_files = out.splitlines() |
| (...skipping 22 matching lines...) Expand all Loading... |
| 318 email_addresses = set() | 329 email_addresses = set() |
| 319 for file_path in changed_files: | 330 for file_path in changed_files: |
| 320 test_path = self.finder.layout_test_name(file_path) | 331 test_path = self.finder.layout_test_name(file_path) |
| 321 test_dir = self.fs.dirname(test_path) | 332 test_dir = self.fs.dirname(test_path) |
| 322 if test_dir in directory_to_owner: | 333 if test_dir in directory_to_owner: |
| 323 email_addresses.add(directory_to_owner[test_dir]) | 334 email_addresses.add(directory_to_owner[test_dir]) |
| 324 return sorted(email_addresses) | 335 return sorted(email_addresses) |
| 325 | 336 |
| 326 def generate_upload_command(self, email_list): | 337 def generate_upload_command(self, email_list): |
| 327 message = 'W3C auto test importer\n\nTBR=qyearsley@chromium.org' | 338 message = 'W3C auto test importer\n\nTBR=qyearsley@chromium.org' |
| 328 command = ['git', 'cl', 'upload', '-f', '-m', message] | 339 command = ['git', 'cl', 'upload', '-f', '-m', message, '--rietveld'] |
| 329 command += ['--cc=' + email for email in email_list] | 340 command += ['--cc=' + email for email in email_list] |
| 330 if self.auth_refresh_token_json: | 341 if self.auth_refresh_token_json: |
| 331 command += ['--auth-refresh-token-json', self.auth_refresh_token_jso
n] | 342 command += ['--auth-refresh-token-json', self.auth_refresh_token_jso
n] |
| 332 return command | 343 return command |
| 333 | 344 |
| 334 def trigger_try_jobs(self): | 345 def trigger_try_jobs(self): |
| 335 """Triggers try jobs on all Blink layout test try bots.""" | 346 """Triggers try jobs on all Blink layout test try bots.""" |
| 336 self.print_('## Triggering try jobs.') | 347 self.print_('## Triggering try jobs.') |
| 337 for try_bot in self.host.builders.all_try_builder_names(): | 348 for try_bot in self.host.builders.all_try_builder_names(): |
| 338 self.run(['git', 'cl', 'try', '-b', try_bot, | 349 self.run(['git', 'cl', 'try', '-b', try_bot, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 else: | 389 else: |
| 379 sets[result_type].add(line.split()[0]) | 390 sets[result_type].add(line.split()[0]) |
| 380 return sets | 391 return sets |
| 381 | 392 |
| 382 def write_test_expectations(self): | 393 def write_test_expectations(self): |
| 383 self.print_('## Adding test expectations lines to LayoutTests/TestExpect
ations.') | 394 self.print_('## Adding test expectations lines to LayoutTests/TestExpect
ations.') |
| 384 script_path = self.path_from_webkit_base('Tools', 'Scripts', 'update-w3c
-test-expectations') | 395 script_path = self.path_from_webkit_base('Tools', 'Scripts', 'update-w3c
-test-expectations') |
| 385 self.run([self.host.executable, script_path]) | 396 self.run([self.host.executable, script_path]) |
| 386 message = '\'Modifies TestExpectations and/or downloads new baselines fo
r tests\'' | 397 message = '\'Modifies TestExpectations and/or downloads new baselines fo
r tests\'' |
| 387 self.check_run(['git', 'commit', '-a', '-m', message]) | 398 self.check_run(['git', 'commit', '-a', '-m', message]) |
| 388 self.check_run(['git', 'cl', 'upload', '-m', message, | 399 self.check_run(['git', 'cl', 'upload', '-m', message, '--rietveld' |
| 389 '--auth-refresh-token-json', self.auth_refresh_token_jso
n]) | 400 '--auth-refresh-token-json', self.auth_refresh_token_jso
n]) |
| OLD | NEW |