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

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

Issue 2144873004: In rebaseline, include build number information with "test_prefix_list" dicts. (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 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 281
282 class AbstractParallelRebaselineCommand(AbstractRebaseliningCommand): 282 class AbstractParallelRebaselineCommand(AbstractRebaseliningCommand):
283 """Base class for rebaseline commands that do some tasks in parallel.""" 283 """Base class for rebaseline commands that do some tasks in parallel."""
284 # Not overriding execute() - pylint: disable=abstract-method 284 # Not overriding execute() - pylint: disable=abstract-method
285 285
286 def __init__(self, options=None): 286 def __init__(self, options=None):
287 super(AbstractParallelRebaselineCommand, self).__init__(options=options) 287 super(AbstractParallelRebaselineCommand, self).__init__(options=options)
288 288
289 @memoized 289 @memoized
290 def builder_data(self): 290 def build_data(self):
wkorman 2016/07/14 01:01:45 Helpful if we document what this returns key/value
qyearsley 2016/07/14 23:53:29 Done -- now added a docstring here, and now instea
291 builder_to_results = {} 291 build_to_results = {}
292 for builder_name in self._release_builders(): 292 for builder_name in self._release_builders():
293 builder = self._tool.buildbot.builder_with_name(builder_name) 293 builder = self._tool.buildbot.builder_with_name(builder_name)
294 builder_results = builder.latest_layout_test_results() 294 builder_results = builder.latest_layout_test_results()
295 if builder_results: 295 if builder_results:
296 builder_to_results[builder_name] = builder_results 296 build_to_results[(builder_name, None)] = builder_results
297 else: 297 else:
298 raise Exception("No result for builder %s." % builder_name) 298 raise Exception("No result for builder %s." % builder_name)
299 return builder_to_results 299 return build_to_results
300 300
301 # The release builders cycle much faster than the debug ones and cover all t he platforms. 301 # The release builders cycle much faster than the debug ones and cover all t he platforms.
302 def _release_builders(self): 302 def _release_builders(self):
303 release_builders = [] 303 release_builders = []
304 for builder_name in self._tool.builders.all_continuous_builder_names(): 304 for builder_name in self._tool.builders.all_continuous_builder_names():
305 if 'ASAN' in builder_name: 305 if 'ASAN' in builder_name:
306 continue 306 continue
307 port = self._tool.port_factory.get_from_builder_name(builder_name) 307 port = self._tool.port_factory.get_from_builder_name(builder_name)
308 if port.test_configuration().build_type == 'release': 308 if port.test_configuration().build_type == 'release':
309 release_builders.append(builder_name) 309 release_builders.append(builder_name)
310 return release_builders 310 return release_builders
311 311
312 def _run_webkit_patch(self, args, verbose): 312 def _run_webkit_patch(self, args, verbose):
313 try: 313 try:
314 verbose_args = ['--verbose'] if verbose else [] 314 verbose_args = ['--verbose'] if verbose else []
315 stderr = self._tool.executive.run_command([self._tool.path()] + verb ose_args + 315 stderr = self._tool.executive.run_command([self._tool.path()] + verb ose_args +
316 args, cwd=self._tool.scm() .checkout_root, return_stderr=True) 316 args, cwd=self._tool.scm() .checkout_root, return_stderr=True)
317 for line in stderr.splitlines(): 317 for line in stderr.splitlines():
318 _log.warning(line) 318 _log.warning(line)
319 except ScriptError: 319 except ScriptError:
320 traceback.print_exc(file=sys.stderr) 320 traceback.print_exc(file=sys.stderr)
321 321
322 def _builders_to_fetch_from(self, builders_to_check): 322 def _builders_to_fetch_from(self, builders_to_check):
323 """Returns the subset of builders that will cover all of the baseline se arch paths 323 """Returns the subset of builders that will cover all of the baseline
324 used in the input list. 324 search paths used in the input list.
325 325
326 In particular, if the input list contains both Release and Debug 326 In particular, if the input list contains both Release and Debug
327 versions of a configuration, we *only* return the Release version 327 versions of a configuration, we *only* return the Release version
328 (since we don't save debug versions of baselines). 328 (since we don't save debug versions of baselines).
329 329
330 Args: 330 Args:
331 builders_to_check: List of builder names. 331 builders_to_check: List of builder names.
332 """ 332 """
333 release_builders = set() 333 release_builders = set()
334 debug_builders = set() 334 debug_builders = set()
335 builders_to_fallback_paths = {} 335 builders_to_fallback_paths = {}
336 for builder in builders_to_check: 336 for builder in builders_to_check:
337 port = self._tool.port_factory.get_from_builder_name(builder) 337 port = self._tool.port_factory.get_from_builder_name(builder)
338 if port.test_configuration().build_type == 'release': 338 if port.test_configuration().build_type == 'release':
339 release_builders.add(builder) 339 release_builders.add(builder)
340 else: 340 else:
341 debug_builders.add(builder) 341 debug_builders.add(builder)
342 for builder in list(release_builders) + list(debug_builders): 342 for builder in list(release_builders) + list(debug_builders):
343 port = self._tool.port_factory.get_from_builder_name(builder) 343 port = self._tool.port_factory.get_from_builder_name(builder)
344 fallback_path = port.baseline_search_path() 344 fallback_path = port.baseline_search_path()
345 if fallback_path not in builders_to_fallback_paths.values(): 345 if fallback_path not in builders_to_fallback_paths.values():
346 builders_to_fallback_paths[builder] = fallback_path 346 builders_to_fallback_paths[builder] = fallback_path
347 return builders_to_fallback_paths.keys() 347 return builders_to_fallback_paths.keys()
348 348
349 def _rebaseline_commands(self, test_prefix_list, options, skip_checking_actu al_results=False): 349 def _rebaseline_commands(self, test_prefix_list, options, skip_checking_actu al_results=False):
350 path_to_webkit_patch = self._tool.path() 350 path_to_webkit_patch = self._tool.path()
351 cwd = self._tool.scm().checkout_root 351 cwd = self._tool.scm().checkout_root
352 copy_baseline_commands = [] 352 copy_baseline_commands = []
353 rebaseline_commands = [] 353 rebaseline_commands = []
354 lines_to_remove = {} 354 lines_to_remove = {}
355 port = self._tool.port_factory.get() 355 port = self._tool.port_factory.get()
356 356
357 for test_prefix in test_prefix_list: 357 for test_prefix in test_prefix_list:
358 for test in port.tests([test_prefix]): 358 for test in port.tests([test_prefix]):
359 for builder in self._builders_to_fetch_from(test_prefix_list[tes t_prefix]): 359 builders_to_fetch_from = self._builders_to_fetch_from([b for b, _ in test_prefix_list[test_prefix]])
360 for build in test_prefix_list[test_prefix]:
360 # TODO(qyearsley): Remove the parameter skip_checking_actual _results 361 # TODO(qyearsley): Remove the parameter skip_checking_actual _results
361 # and instead refactor the existing code so that this is not necessary. 362 # and instead refactor the existing code so that this is not necessary.
363 builder, build_number = build
364 if builder not in builders_to_fetch_from:
365 break
362 if skip_checking_actual_results: 366 if skip_checking_actual_results:
363 actual_failures_suffixes = test_prefix_list[test_prefix] [builder] 367 actual_failures_suffixes = test_prefix_list[test_prefix] [build]
364 else: 368 else:
365 actual_failures_suffixes = self._suffixes_for_actual_fai lures( 369 actual_failures_suffixes = self._suffixes_for_actual_fai lures(
366 test, builder, test_prefix_list[test_prefix][builder ]) 370 test, build, test_prefix_list[test_prefix][build])
367 if not actual_failures_suffixes: 371 if not actual_failures_suffixes:
368 # If we're not going to rebaseline the test because it's passing on this 372 # If we're not going to rebaseline the test because it's passing on this
369 # builder, we still want to remove the line from TestExp ectations. 373 # builder, we still want to remove the line from TestExp ectations.
370 if test not in lines_to_remove: 374 if test not in lines_to_remove:
371 lines_to_remove[test] = [] 375 lines_to_remove[test] = []
372 lines_to_remove[test].append(builder) 376 lines_to_remove[test].append(builder)
373 continue 377 continue
374 378
375 suffixes = ','.join(actual_failures_suffixes) 379 suffixes = ','.join(actual_failures_suffixes)
376 cmd_line = ['--suffixes', suffixes, '--builder', builder, '- -test', test] 380 cmd_line = ['--suffixes', suffixes, '--builder', builder, '- -test', test]
381 if build_number:
382 cmd_line.extend(['--build-number', build_number])
377 if options.results_directory: 383 if options.results_directory:
378 cmd_line.extend(['--results-directory', options.results_ directory]) 384 cmd_line.extend(['--results-directory', options.results_ directory])
379 if options.verbose: 385 if options.verbose:
380 cmd_line.append('--verbose') 386 cmd_line.append('--verbose')
381 copy_baseline_commands.append( 387 copy_baseline_commands.append(
382 tuple([[self._tool.executable, path_to_webkit_patch, 'co py-existing-baselines-internal'] + cmd_line, cwd])) 388 tuple([[self._tool.executable, path_to_webkit_patch, 'co py-existing-baselines-internal'] + cmd_line, cwd]))
383 rebaseline_commands.append( 389 rebaseline_commands.append(
384 tuple([[self._tool.executable, path_to_webkit_patch, 're baseline-test-internal'] + cmd_line, cwd])) 390 tuple([[self._tool.executable, path_to_webkit_patch, 're baseline-test-internal'] + cmd_line, cwd]))
385 return copy_baseline_commands, rebaseline_commands, lines_to_remove 391 return copy_baseline_commands, rebaseline_commands, lines_to_remove
386 392
(...skipping 24 matching lines...) Expand all
411 417
412 if not file_added: 418 if not file_added:
413 _log.debug('Could not add file based off output "%s"' % output) 419 _log.debug('Could not add file based off output "%s"' % output)
414 420
415 return list(files_to_add), list(files_to_delete), lines_to_remove 421 return list(files_to_add), list(files_to_delete), lines_to_remove
416 422
417 def _optimize_baselines(self, test_prefix_list, verbose=False): 423 def _optimize_baselines(self, test_prefix_list, verbose=False):
418 optimize_commands = [] 424 optimize_commands = []
419 for test in test_prefix_list: 425 for test in test_prefix_list:
420 all_suffixes = set() 426 all_suffixes = set()
421 for builder in self._builders_to_fetch_from(test_prefix_list[test]): 427 builders_to_fetch_from = self._builders_to_fetch_from([b for b, _ in test_prefix_list[test]])
422 all_suffixes.update(self._suffixes_for_actual_failures(test, bui lder, test_prefix_list[test][builder])) 428 for build in test_prefix_list[test]:
429 builder, _ = build
430 if builder not in builders_to_fetch_from:
431 break
432 all_suffixes.update(self._suffixes_for_actual_failures(test, bui ld, test_prefix_list[test][build]))
423 433
424 # No need to optimize baselines for a test with no failures. 434 # No need to optimize baselines for a test with no failures.
425 if not all_suffixes: 435 if not all_suffixes:
426 continue 436 continue
427 437
428 # FIXME: We should propagate the platform options as well. 438 # FIXME: We should propagate the platform options as well.
429 cmd_line = ['--no-modify-scm', '--suffixes', ','.join(all_suffixes), test] 439 cmd_line = ['--no-modify-scm', '--suffixes', ','.join(all_suffixes), test]
430 if verbose: 440 if verbose:
431 cmd_line.append('--verbose') 441 cmd_line.append('--verbose')
432 442
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 if files_to_add: 505 if files_to_add:
496 self._tool.scm().add_list(files_to_add) 506 self._tool.scm().add_list(files_to_add)
497 return lines_to_remove 507 return lines_to_remove
498 508
499 def _rebaseline(self, options, test_prefix_list, skip_checking_actual_result s=False): 509 def _rebaseline(self, options, test_prefix_list, skip_checking_actual_result s=False):
500 """Downloads new baselines in parallel, then updates expectations files 510 """Downloads new baselines in parallel, then updates expectations files
501 and optimizes baselines. 511 and optimizes baselines.
502 512
503 Args: 513 Args:
504 options: An object with the options passed to the current command. 514 options: An object with the options passed to the current command.
505 test_prefix_list: A map of test names to builder names to baseline 515 test_prefix_list: A map of test names to (builder name, build number )
506 suffixes to rebaseline. For example: 516 pairs to baseline suffixes to rebaseline. For example:
507 { 517 {
508 "some/test.html": {"builder-1": ["txt"], "builder-2": ["txt" ]}, 518 "some/test.html": {("builder-1", 412): ["txt"], ("builder-2" , 100): ["txt"]},
509 "some/other.html": {"builder-1": ["txt"]} 519 "some/other.html": {("builder-1", 412): ["txt"]}
510 } 520 }
511 This would mean that new text baselines should be downloaded for 521 This would mean that new text baselines should be downloaded for
512 "some/test.html" on both builder-1 and builder-2, and new text 522 "some/test.html" on both builder-1 (build 412) and builder-2
513 baselines should be downloaded for "some/other.html" but only 523 (build 100), and new text baselines should be downloaded for
514 from builder-1. 524 "some/other.html" but only from builder-1.
515 skip_checking_actual_results: If True, then the lists of suffixes 525 skip_checking_actual_results: If True, then the lists of suffixes
516 to rebaseline from |test_prefix_list| will be used directly; 526 to rebaseline from |test_prefix_list| will be used directly;
517 if False, then the list of suffixes will filtered to include 527 if False, then the list of suffixes will filtered to include
518 suffixes with mismatches in actual results. 528 suffixes with mismatches in actual results.
519 """ 529 """
520 for test, builders_to_check in sorted(test_prefix_list.items()): 530 for test, builds_to_check in sorted(test_prefix_list.items()):
521 _log.info("Rebaselining %s" % test) 531 _log.info("Rebaselining %s" % test)
522 for builder, suffixes in sorted(builders_to_check.items()): 532 for build, suffixes in sorted(builds_to_check.items()):
523 _log.debug(" %s: %s" % (builder, ",".join(suffixes))) 533 _log.debug(" %s: %s" % (build, ",".join(suffixes)))
524 534
525 copy_baseline_commands, rebaseline_commands, extra_lines_to_remove = sel f._rebaseline_commands( 535 copy_baseline_commands, rebaseline_commands, extra_lines_to_remove = sel f._rebaseline_commands(
526 test_prefix_list, options, skip_checking_actual_results) 536 test_prefix_list, options, skip_checking_actual_results)
527 lines_to_remove = {} 537 lines_to_remove = {}
528 538
529 self._run_in_parallel_and_update_scm(copy_baseline_commands) 539 self._run_in_parallel_and_update_scm(copy_baseline_commands)
530 lines_to_remove = self._run_in_parallel_and_update_scm(rebaseline_comman ds) 540 lines_to_remove = self._run_in_parallel_and_update_scm(rebaseline_comman ds)
531 541
532 for test in extra_lines_to_remove: 542 for test in extra_lines_to_remove:
533 if test in lines_to_remove: 543 if test in lines_to_remove:
534 lines_to_remove[test] = lines_to_remove[test] + extra_lines_to_r emove[test] 544 lines_to_remove[test] = lines_to_remove[test] + extra_lines_to_r emove[test]
535 else: 545 else:
536 lines_to_remove[test] = extra_lines_to_remove[test] 546 lines_to_remove[test] = extra_lines_to_remove[test]
537 547
538 if lines_to_remove: 548 if lines_to_remove:
539 self._update_expectations_files(lines_to_remove) 549 self._update_expectations_files(lines_to_remove)
540 550
541 if options.optimize: 551 if options.optimize:
542 # TODO(wkorman): Consider changing temporary branch to base off of H EAD rather than 552 # TODO(wkorman): Consider changing temporary branch to base off of H EAD rather than
543 # origin/master to ensure we run baseline optimization processes wit h the same code as 553 # origin/master to ensure we run baseline optimization processes wit h the same code as
544 # auto-rebaseline itself. 554 # auto-rebaseline itself.
545 self._run_in_parallel_and_update_scm(self._optimize_baselines(test_p refix_list, options.verbose)) 555 self._run_in_parallel_and_update_scm(self._optimize_baselines(test_p refix_list, options.verbose))
546 556
547 def _suffixes_for_actual_failures(self, test, builder_name, existing_suffixe s): 557 def _suffixes_for_actual_failures(self, test, build, existing_suffixes):
548 if builder_name not in self.builder_data(): 558 """Gets the baseline suffixes for actual mismatch failures in some resul ts.
559
560 Args:
561 test: A full test path string.
562 build: A pair (builder_name, build_number).
563 existing_suffixes: A collection of all suffixes to consider.
564
565 Returns:
566 A set of file suffix strings.
567 """
568 if build not in self.build_data():
549 return set() 569 return set()
550 test_result = self.builder_data()[builder_name].result_for_test(test) 570 test_result = self.build_data()[build].result_for_test(test)
551 if not test_result: 571 if not test_result:
552 return set() 572 return set()
553 return set(existing_suffixes) & TestExpectations.suffixes_for_test_resul t(test_result) 573 return set(existing_suffixes) & TestExpectations.suffixes_for_test_resul t(test_result)
554 574
555 575
556 class RebaselineJson(AbstractParallelRebaselineCommand): 576 class RebaselineJson(AbstractParallelRebaselineCommand):
557 name = "rebaseline-json" 577 name = "rebaseline-json"
558 help_text = "Rebaseline based off JSON passed to stdin. Intended to only be called from other scripts." 578 help_text = "Rebaseline based off JSON passed to stdin. Intended to only be called from other scripts."
559 579
560 def __init__(self,): 580 def __init__(self,):
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 return 613 return
594 tests = self._tests_to_rebaseline(self._tool.port_factory.get(port_name) ).items() 614 tests = self._tests_to_rebaseline(self._tool.port_factory.get(port_name) ).items()
595 615
596 if tests: 616 if tests:
597 _log.info("Retrieving results for %s from %s." % (port_name, builder _name)) 617 _log.info("Retrieving results for %s from %s." % (port_name, builder _name))
598 618
599 for test_name, suffixes in tests: 619 for test_name, suffixes in tests:
600 _log.info(" %s (%s)" % (test_name, ','.join(suffixes))) 620 _log.info(" %s (%s)" % (test_name, ','.join(suffixes)))
601 if test_name not in self._test_prefix_list: 621 if test_name not in self._test_prefix_list:
602 self._test_prefix_list[test_name] = {} 622 self._test_prefix_list[test_name] = {}
603 self._test_prefix_list[test_name][builder_name] = suffixes 623 self._test_prefix_list[test_name][(builder_name, None)] = suffixes
604 624
605 def execute(self, options, args, tool): 625 def execute(self, options, args, tool):
606 options.results_directory = None 626 options.results_directory = None
607 self._test_prefix_list = {} 627 self._test_prefix_list = {}
608 port_names = tool.port_factory.all_port_names(options.platform) 628 port_names = tool.port_factory.all_port_names(options.platform)
609 for port_name in port_names: 629 for port_name in port_names:
610 self._add_tests_to_rebaseline_for_port(port_name) 630 self._add_tests_to_rebaseline_for_port(port_name)
611 if not self._test_prefix_list: 631 if not self._test_prefix_list:
612 _log.warning("Did not find any tests marked Rebaseline.") 632 _log.warning("Did not find any tests marked Rebaseline.")
613 return 633 return
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 else: 671 else:
652 builders_to_check = self._builders_to_pull_from() 672 builders_to_check = self._builders_to_pull_from()
653 673
654 test_prefix_list = {} 674 test_prefix_list = {}
655 suffixes_to_update = options.suffixes.split(",") 675 suffixes_to_update = options.suffixes.split(",")
656 676
657 for builder in builders_to_check: 677 for builder in builders_to_check:
658 for test in args: 678 for test in args:
659 if test not in test_prefix_list: 679 if test not in test_prefix_list:
660 test_prefix_list[test] = {} 680 test_prefix_list[test] = {}
661 test_prefix_list[test][builder.name()] = suffixes_to_update 681 test_prefix_list[test][(builder.name(), None)] = suffixes_to_upd ate
662 682
663 if options.verbose: 683 if options.verbose:
664 _log.debug("rebaseline-json: " + str(test_prefix_list)) 684 _log.debug("rebaseline-json: " + str(test_prefix_list))
665 685
686 print(test_prefix_list)
wkorman 2016/07/14 01:01:46 Debugging
qyearsley 2016/07/14 23:53:29 Now removed
666 self._rebaseline(options, test_prefix_list) 687 self._rebaseline(options, test_prefix_list)
667 688
668 689
669 class AutoRebaseline(AbstractParallelRebaselineCommand): 690 class AutoRebaseline(AbstractParallelRebaselineCommand):
670 name = "auto-rebaseline" 691 name = "auto-rebaseline"
671 help_text = "Rebaselines any NeedsRebaseline lines in TestExpectations that have cycled through all the bots." 692 help_text = "Rebaselines any NeedsRebaseline lines in TestExpectations that have cycled through all the bots."
672 AUTO_REBASELINE_BRANCH_NAME = "auto-rebaseline-temporary-branch" 693 AUTO_REBASELINE_BRANCH_NAME = "auto-rebaseline-temporary-branch"
673 AUTO_REBASELINE_ALT_BRANCH_NAME = "auto-rebaseline-alt-temporary-branch" 694 AUTO_REBASELINE_ALT_BRANCH_NAME = "auto-rebaseline-alt-temporary-branch"
674 695
675 # Rietveld uploader stinks. Limit the number of rebaselines in a given patch to keep upload from failing. 696 # Rietveld uploader stinks. Limit the number of rebaselines in a given patch to keep upload from failing.
(...skipping 22 matching lines...) Expand all
698 @ 719 @
699 [^@>]+ # Domain terminated by @ or >, some lines have an ad ditional @ fragment after the email. 720 [^@>]+ # Domain terminated by @ or >, some lines have an ad ditional @ fragment after the email.
700 ) 721 )
701 .*?([^ ]*) # Test file name 722 .*?([^ ]*) # Test file name
702 \ \[ # Single space followed by opening [ for expectation specifier 723 \ \[ # Single space followed by opening [ for expectation specifier
703 [^[]*$ # Prevents matching previous [ for version specifier s instead of expectation specifiers 724 [^[]*$ # Prevents matching previous [ for version specifier s instead of expectation specifiers
704 """, re.VERBOSE) 725 """, re.VERBOSE)
705 726
706 def bot_revision_data(self, scm): 727 def bot_revision_data(self, scm):
707 revisions = [] 728 revisions = []
708 for result in self.builder_data().values(): 729 for result in self.build_data().values():
709 if result.run_was_interrupted(): 730 if result.run_was_interrupted():
710 _log.error("Can't rebaseline because the latest run on %s exited early." % result.builder_name()) 731 _log.error("Can't rebaseline because the latest run on %s exited early." % result.builder_name())
711 return [] 732 return []
712 revisions.append({ 733 revisions.append({
713 "builder": result.builder_name(), 734 "builder": result.builder_name(),
714 "revision": result.chromium_revision(scm), 735 "revision": result.chromium_revision(scm),
715 }) 736 })
716 return revisions 737 return revisions
717 738
718 def _strip_comments(self, line): 739 def _strip_comments(self, line):
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 port = self._tool.port_factory.get(port_name) 819 port = self._tool.port_factory.get(port_name)
799 expectations = TestExpectations(port, include_overrides=True) 820 expectations = TestExpectations(port, include_overrides=True)
800 for test in expectations.get_needs_rebaseline_failures(): 821 for test in expectations.get_needs_rebaseline_failures():
801 if test not in tests: 822 if test not in tests:
802 continue 823 continue
803 824
804 if test not in test_prefix_list: 825 if test not in test_prefix_list:
805 lines_to_remove[test] = [] 826 lines_to_remove[test] = []
806 test_prefix_list[test] = {} 827 test_prefix_list[test] = {}
807 lines_to_remove[test].append(builder_name) 828 lines_to_remove[test].append(builder_name)
808 test_prefix_list[test][builder_name] = BASELINE_SUFFIX_LIST 829 test_prefix_list[test][(builder_name, None)] = BASELINE_SUFFIX_L IST
809 830
810 return test_prefix_list, lines_to_remove 831 return test_prefix_list, lines_to_remove
811 832
812 def _run_git_cl_command(self, options, command): 833 def _run_git_cl_command(self, options, command):
813 subprocess_command = ['git', 'cl'] + command 834 subprocess_command = ['git', 'cl'] + command
814 if options.verbose: 835 if options.verbose:
815 subprocess_command.append('--verbose') 836 subprocess_command.append('--verbose')
816 if options.auth_refresh_token_json: 837 if options.auth_refresh_token_json:
817 subprocess_command.append('--auth-refresh-token-json') 838 subprocess_command.append('--auth-refresh-token-json')
818 subprocess_command.append(options.auth_refresh_token_json) 839 subprocess_command.append(options.auth_refresh_token_json)
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 issue_already_closed = tool.executive.run_command( 946 issue_already_closed = tool.executive.run_command(
926 ['git', 'config', 'branch.%s.rietveldissue' % rebaseline _branch_name], 947 ['git', 'config', 'branch.%s.rietveldissue' % rebaseline _branch_name],
927 return_exit_code=True) 948 return_exit_code=True)
928 if not issue_already_closed: 949 if not issue_already_closed:
929 self._run_git_cl_command(options, ['set_close']) 950 self._run_git_cl_command(options, ['set_close'])
930 951
931 tool.scm().ensure_cleanly_tracking_remote_master() 952 tool.scm().ensure_cleanly_tracking_remote_master()
932 if old_branch_name_or_ref: 953 if old_branch_name_or_ref:
933 tool.scm().checkout_branch(old_branch_name_or_ref) 954 tool.scm().checkout_branch(old_branch_name_or_ref)
934 tool.scm().delete_branch(rebaseline_branch_name) 955 tool.scm().delete_branch(rebaseline_branch_name)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698