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

Side by Side Diff: tools/findit/findit_for_crash.py

Issue 504443004: [Findit] Improve output format and cherry-pick bugs fix. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nit. Created 6 years, 3 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
« no previous file with comments | « tools/findit/deps_config.json ('k') | tools/findit/git_repository_parser.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 # Copyright (c) 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 import os 5 import os
6 from threading import Lock, Thread 6 from threading import Lock, Thread
7 7
8 import blame 8 import blame
9 from common import utils 9 from common import utils
10 import component_dictionary 10 import component_dictionary
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 for i in range(len(match_by_priority)): 449 for i in range(len(match_by_priority)):
450 (priority, crashed_line_numbers, file_name, stack_frame_indices, 450 (priority, crashed_line_numbers, file_name, stack_frame_indices,
451 function_list) = match_by_priority[i] 451 function_list) = match_by_priority[i]
452 452
453 # If the file in the match is a line change, append a explanation. 453 # If the file in the match is a line change, append a explanation.
454 if priority == LINE_CHANGE_PRIORITY: 454 if priority == LINE_CHANGE_PRIORITY:
455 crashed_line_numbers = [crashed_line_number 455 crashed_line_numbers = [crashed_line_number
456 for lines in crashed_line_numbers 456 for lines in crashed_line_numbers
457 for crashed_line_number in lines] 457 for crashed_line_number in lines]
458 reason.append( 458 reason.append(
459 'Line %s of file %s which potentially caused the crash ' 459 'Lines %s of file %s which potentially caused crash '
460 'according to the stacktrace, is changed in this cl' 460 'are changed in this cl (%s).\n' %
461 ' (From stack frame %s, function %s).' % 461 (utils.JoinLineNumbers(crashed_line_numbers, accepted_gap=4),
462 (crash_utils.PrettifyList(crashed_line_numbers),
463 file_name, 462 file_name,
464 crash_utils.PrettifyList(stack_frame_indices), 463 crash_utils.PrettifyFrameInfo(stack_frame_indices, function_list)))
465 crash_utils.PrettifyList(function_list)))
466 464
467 else: 465 else:
468 # Get all the files that are not line change. 466 # Get all the files that are not line change.
469 rest_of_the_files = match_by_priority[i:] 467 rest_of_the_files = match_by_priority[i:]
470 468
471 if len(rest_of_the_files) == 1: 469 if len(rest_of_the_files) == 1:
472 file_string = 'File %s is changed in this cl ' 470 file_string = 'File %s is changed in this cl '
473 else: 471 else:
474 file_string = 'Files %s are changed in this cl ' 472 file_string = 'Files %s are changed in this cl '
475 473
476 # Create a list of file names, and prettify the list. 474 # Create a list of file names, and prettify the list.
477 file_names = [ 475 file_names = [
478 file_name for (_, _, file_name, _, _) in rest_of_the_files] 476 file_name for (_, _, file_name, _, _) in rest_of_the_files]
479 pretty_file_names = crash_utils.PrettifyList(file_names) 477 pretty_file_names = crash_utils.PrettifyList(file_names)
480 478
481 # Add the reason, break because we took care of the rest of the files. 479 # Add the reason, break because we took care of the rest of the files.
482 file_string += ('(From stack frames %s, functions %s)' % 480 file_string += '(%s)' % crash_utils.PrettifyFrameInfo(
483 (crash_utils.PrettifyList(stack_frame_indices), 481 stack_frame_indices, function_list)
484 crash_utils.PrettifyList(function_list)))
485 reason.append(file_string % pretty_file_names) 482 reason.append(file_string % pretty_file_names)
486 break 483 break
487 484
488 # Set the reason as string. 485 # Set the reason as string.
489 match.reason = '\n'.join(reason) 486 match.reason = '\n'.join(reason)
490 487
491 488
492 def CombineMatches(matches): 489 def CombineMatches(matches):
493 """Combine possible duplicates in matches. 490 """Combine possible duplicates in matches.
494 491
(...skipping 23 matching lines...) Expand all
518 # Combine the reason if the current match is already in there. 515 # Combine the reason if the current match is already in there.
519 found_match.reason += match.reason 516 found_match.reason += match.reason
520 if match.min_distance < found_match.min_distance: 517 if match.min_distance < found_match.min_distance:
521 found_match.min_distance = match.min_distance 518 found_match.min_distance = match.min_distance
522 found_match.min_distance_info = match.min_distance_info 519 found_match.min_distance_info = match.min_distance_info
523 520
524 for stack_index, cl, match in combined_matches: 521 for stack_index, cl, match in combined_matches:
525 if match.min_distance_info: 522 if match.min_distance_info:
526 file_name, min_crashed_line, min_changed_line = match.min_distance_info 523 file_name, min_crashed_line, min_changed_line = match.min_distance_info
527 match.reason += \ 524 match.reason += \
528 ('\nMininimum distance from crashed line to changed line: %d. ' 525 ('Minimum distance from crashed line to changed line: %d. '
529 '(File: %s, Crashed on: %d, Changed: %d).' % 526 '(File: %s, Crashed on: %d, Changed: %d).\n' %
530 (match.min_distance, file_name, min_crashed_line, min_changed_line)) 527 (match.min_distance, file_name, min_crashed_line, min_changed_line))
531 528
532 return combined_matches 529 return combined_matches
533 530
534 531
535 def FilterAndGenerateReasonForMatches(result): 532 def FilterAndGenerateReasonForMatches(result):
536 """A wrapper function. 533 """A wrapper function.
537 534
538 It generates reasons for the matches and returns string representation 535 It generates reasons for the matches and returns string representation
539 of filtered results. 536 of filtered results.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 'the blame information.') 672 'the blame information.')
676 673
677 # When findit could not find any CL that changes file in stacktrace or if 674 # When findit could not find any CL that changes file in stacktrace or if
678 # if cannot get any blame information, return a message saying that no 675 # if cannot get any blame information, return a message saying that no
679 # results are available. 676 # results are available.
680 else: 677 else:
681 return_message = ('Findit could not find any suspected CLs.') 678 return_message = ('Findit could not find any suspected CLs.')
682 679
683 return (return_message, result) 680 return (return_message, result)
684 681
OLDNEW
« no previous file with comments | « tools/findit/deps_config.json ('k') | tools/findit/git_repository_parser.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698