Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline.py

Issue 2152663003: Refactor the buildbot module in webkitpy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright (c) 2010 Google Inc. All rights reserved. 1 # Copyright (c) 2010 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 results_directory_option = optparse.make_option("--results-directory", help= "Local results directory to use.") 62 results_directory_option = optparse.make_option("--results-directory", help= "Local results directory to use.")
63 63
64 suffixes_option = optparse.make_option("--suffixes", default=','.join(BASELI NE_SUFFIX_LIST), action="store", 64 suffixes_option = optparse.make_option("--suffixes", default=','.join(BASELI NE_SUFFIX_LIST), action="store",
65 help="Comma-separated-list of file ty pes to rebaseline.") 65 help="Comma-separated-list of file ty pes to rebaseline.")
66 66
67 def __init__(self, options=None): 67 def __init__(self, options=None):
68 super(AbstractRebaseliningCommand, self).__init__(options=options) 68 super(AbstractRebaseliningCommand, self).__init__(options=options)
69 self._baseline_suffix_list = BASELINE_SUFFIX_LIST 69 self._baseline_suffix_list = BASELINE_SUFFIX_LIST
70 self._scm_changes = {'add': [], 'delete': [], 'remove-lines': []} 70 self._scm_changes = {'add': [], 'delete': [], 'remove-lines': []}
71 71
72 def _results_url(self, builder_name, build_number=None):
73 builder = self._tool.buildbot.builder_with_name(builder_name)
74 if build_number:
75 build = builder.build(build_number)
76 return build.results_url()
77 return builder.latest_layout_test_results_url()
78
79 def _add_to_scm_later(self, path): 72 def _add_to_scm_later(self, path):
80 self._scm_changes['add'].append(path) 73 self._scm_changes['add'].append(path)
81 74
82 def _delete_from_scm_later(self, path): 75 def _delete_from_scm_later(self, path):
83 self._scm_changes['delete'].append(path) 76 self._scm_changes['delete'].append(path)
84 77
85 def _print_scm_changes(self): 78 def _print_scm_changes(self):
86 print(json.dumps(self._scm_changes)) 79 print(json.dumps(self._scm_changes))
87 80
88 81
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 port = self._tool.port_factory.get_from_builder_name(options.builder) 211 port = self._tool.port_factory.get_from_builder_name(options.builder)
219 if port.reference_files(options.test): 212 if port.reference_files(options.test):
220 if 'png' in self._baseline_suffix_list: 213 if 'png' in self._baseline_suffix_list:
221 _log.warning("Cannot rebaseline image result for reftest: %s", o ptions.test) 214 _log.warning("Cannot rebaseline image result for reftest: %s", o ptions.test)
222 return 215 return
223 assert self._baseline_suffix_list == ['txt'] 216 assert self._baseline_suffix_list == ['txt']
224 217
225 if options.results_directory: 218 if options.results_directory:
226 results_url = 'file://' + options.results_directory 219 results_url = 'file://' + options.results_directory
227 else: 220 else:
228 results_url = self._results_url(options.builder, build_number=option s.build_number) 221 results_url = self._tool.buildbot.results_url(options.builder, build _number=options.build_number)
229 222
230 for suffix in self._baseline_suffix_list: 223 for suffix in self._baseline_suffix_list:
231 self._rebaseline_test(options.builder, options.test, suffix, results _url) 224 self._rebaseline_test(options.builder, options.test, suffix, results _url)
232 self._scm_changes['remove-lines'].append({'builder': options.builder, 't est': options.test}) 225 self._scm_changes['remove-lines'].append({'builder': options.builder, 't est': options.test})
233 226
234 def execute(self, options, args, tool): 227 def execute(self, options, args, tool):
235 self._rebaseline_test_and_update_expectations(options) 228 self._rebaseline_test_and_update_expectations(options)
236 self._print_scm_changes() 229 self._print_scm_changes()
237 230
238 231
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 """Base class for rebaseline commands that do some tasks in parallel.""" 276 """Base class for rebaseline commands that do some tasks in parallel."""
284 # Not overriding execute() - pylint: disable=abstract-method 277 # Not overriding execute() - pylint: disable=abstract-method
285 278
286 def __init__(self, options=None): 279 def __init__(self, options=None):
287 super(AbstractParallelRebaselineCommand, self).__init__(options=options) 280 super(AbstractParallelRebaselineCommand, self).__init__(options=options)
288 281
289 @memoized 282 @memoized
290 def builder_data(self): 283 def builder_data(self):
291 builder_to_results = {} 284 builder_to_results = {}
292 for builder_name in self._release_builders(): 285 for builder_name in self._release_builders():
293 builder = self._tool.buildbot.builder_with_name(builder_name) 286 builder_results = self._tool.buildbot.accumulated_results_url_base(b uilder_name)
294 builder_results = builder.latest_layout_test_results()
295 if builder_results: 287 if builder_results:
296 builder_to_results[builder_name] = builder_results 288 builder_to_results[builder_name] = builder_results
297 else: 289 else:
298 raise Exception("No result for builder %s." % builder_name) 290 raise Exception("No result for builder %s." % builder_name)
299 return builder_to_results 291 return builder_to_results
300 292
301 # The release builders cycle much faster than the debug ones and cover all t he platforms. 293 # The release builders cycle much faster than the debug ones and cover all t he platforms.
302 def _release_builders(self): 294 def _release_builders(self):
303 release_builders = [] 295 release_builders = []
304 for builder_name in self._tool.builders.all_continuous_builder_names(): 296 for builder_name in self._tool.builders.all_continuous_builder_names():
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 super(Rebaseline, self).__init__(options=[ 617 super(Rebaseline, self).__init__(options=[
626 self.no_optimize_option, 618 self.no_optimize_option,
627 # FIXME: should we support the platform options in addition to (or i nstead of) --builders? 619 # FIXME: should we support the platform options in addition to (or i nstead of) --builders?
628 self.suffixes_option, 620 self.suffixes_option,
629 self.results_directory_option, 621 self.results_directory_option,
630 optparse.make_option("--builders", default=None, action="append", 622 optparse.make_option("--builders", default=None, action="append",
631 help="Comma-separated-list of builders to pull new baselines from (can also be provided multiple times)."), 623 help="Comma-separated-list of builders to pull new baselines from (can also be provided multiple times)."),
632 ]) 624 ])
633 625
634 def _builders_to_pull_from(self): 626 def _builders_to_pull_from(self):
635 chosen_names = self._tool.user.prompt_with_list( 627 return self._tool.user.prompt_with_list(
636 "Which builder to pull results from:", self._release_builders(), can _choose_multiple=True) 628 "Which builder to pull results from:", self._release_builders(), can _choose_multiple=True)
637 return [self._builder_with_name(name) for name in chosen_names]
638
639 def _builder_with_name(self, name):
640 return self._tool.buildbot.builder_with_name(name)
641 629
642 def execute(self, options, args, tool): 630 def execute(self, options, args, tool):
643 if not args: 631 if not args:
644 _log.error("Must list tests to rebaseline.") 632 _log.error("Must list tests to rebaseline.")
645 return 633 return
646 634
647 if options.builders: 635 if options.builders:
648 builders_to_check = [] 636 builders_to_check = []
649 for builder_names in options.builders: 637 for builder_names in options.builders:
650 builders_to_check += [self._builder_with_name(name) for name in builder_names.split(",")] 638 builders_to_check += builder_names.split(",")
651 else: 639 else:
652 builders_to_check = self._builders_to_pull_from() 640 builders_to_check = self._builders_to_pull_from()
653 641
654 test_prefix_list = {} 642 test_prefix_list = {}
655 suffixes_to_update = options.suffixes.split(",") 643 suffixes_to_update = options.suffixes.split(",")
656 644
657 for builder in builders_to_check: 645 for builder in builders_to_check:
658 for test in args: 646 for test in args:
659 if test not in test_prefix_list: 647 if test not in test_prefix_list:
660 test_prefix_list[test] = {} 648 test_prefix_list[test] = {}
661 test_prefix_list[test][builder.name()] = suffixes_to_update 649 test_prefix_list[test][builder] = suffixes_to_update
662 650
663 if options.verbose: 651 if options.verbose:
664 _log.debug("rebaseline-json: " + str(test_prefix_list)) 652 _log.debug("rebaseline-json: " + str(test_prefix_list))
665 653
666 self._rebaseline(options, test_prefix_list) 654 self._rebaseline(options, test_prefix_list)
667 655
668 656
669 class AutoRebaseline(AbstractParallelRebaselineCommand): 657 class AutoRebaseline(AbstractParallelRebaselineCommand):
670 name = "auto-rebaseline" 658 name = "auto-rebaseline"
671 help_text = "Rebaselines any NeedsRebaseline lines in TestExpectations that have cycled through all the bots." 659 help_text = "Rebaselines any NeedsRebaseline lines in TestExpectations that have cycled through all the bots."
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 issue_already_closed = tool.executive.run_command( 913 issue_already_closed = tool.executive.run_command(
926 ['git', 'config', 'branch.%s.rietveldissue' % rebaseline _branch_name], 914 ['git', 'config', 'branch.%s.rietveldissue' % rebaseline _branch_name],
927 return_exit_code=True) 915 return_exit_code=True)
928 if not issue_already_closed: 916 if not issue_already_closed:
929 self._run_git_cl_command(options, ['set_close']) 917 self._run_git_cl_command(options, ['set_close'])
930 918
931 tool.scm().ensure_cleanly_tracking_remote_master() 919 tool.scm().ensure_cleanly_tracking_remote_master()
932 if old_branch_name_or_ref: 920 if old_branch_name_or_ref:
933 tool.scm().checkout_branch(old_branch_name_or_ref) 921 tool.scm().checkout_branch(old_branch_name_or_ref)
934 tool.scm().delete_branch(rebaseline_branch_name) 922 tool.scm().delete_branch(rebaseline_branch_name)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698