OLD | NEW |
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 cgi | 5 import cgi |
6 import ConfigParser | 6 import ConfigParser |
7 import json | 7 import json |
8 import os | 8 import os |
9 import time | 9 import time |
10 | 10 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 path: A string representing a path. | 101 path: A string representing a path. |
102 parsed_deps: A map from component path to its component name, repository, | 102 parsed_deps: A map from component path to its component name, repository, |
103 etc. | 103 etc. |
104 | 104 |
105 Returns: | 105 Returns: |
106 A tuple containing a component this path is in (e.g blink, skia, etc) | 106 A tuple containing a component this path is in (e.g blink, skia, etc) |
107 and a path in that component's repository. Returns None if the component | 107 and a path in that component's repository. Returns None if the component |
108 repository is not supported, i.e from googlecode. | 108 repository is not supported, i.e from googlecode. |
109 """ | 109 """ |
110 # First normalize the path by retreiving the normalized path. | 110 # First normalize the path by retreiving the normalized path. |
111 normalized_path = os.path.normpath(path.replace('\\', '/')) | 111 normalized_path = os.path.normpath(path).replace('\\', '/') |
112 | 112 |
113 # Iterate through all component paths in the parsed DEPS, in the decreasing | 113 # Iterate through all component paths in the parsed DEPS, in the decreasing |
114 # order of the length of the file path. | 114 # order of the length of the file path. |
115 for component_path in sorted(parsed_deps, | 115 for component_path in sorted(parsed_deps, |
116 key=(lambda path: -len(path))): | 116 key=(lambda path: -len(path))): |
117 # new_component_path is the component path with 'src/' removed. | 117 # new_component_path is the component path with 'src/' removed. |
118 new_component_path = component_path | 118 new_component_path = component_path |
119 if new_component_path.startswith('src/') and new_component_path != 'src/': | 119 if new_component_path.startswith('src/') and new_component_path != 'src/': |
120 new_component_path = new_component_path[len('src/'):] | 120 new_component_path = new_component_path[len('src/'):] |
121 | 121 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 timeout: Time in seconds to wait before time out. | 223 timeout: Time in seconds to wait before time out. |
224 | 224 |
225 Returns: | 225 Returns: |
226 None if the data retrieval fails, or the raw data. | 226 None if the data retrieval fails, or the raw data. |
227 """ | 227 """ |
228 count = 0 | 228 count = 0 |
229 while True: | 229 while True: |
230 count += 1 | 230 count += 1 |
231 # Retrieves data from URL. | 231 # Retrieves data from URL. |
232 try: | 232 try: |
233 _, data = utils.GetHttpClient().Get(url, timeout=timeout) | 233 status_code, data = utils.GetHttpClient().Get(url, timeout=timeout) |
| 234 except IOError: |
| 235 status_code = -1 |
| 236 data = None |
| 237 |
| 238 if status_code == 200: |
234 return data | 239 return data |
235 except IOError: | 240 |
236 if count < retries: | 241 if count < retries: |
237 # If retrieval fails, try after sleep_time second. | 242 # If retrieval fails, try after sleep_time second. |
238 time.sleep(sleep_time) | 243 time.sleep(sleep_time) |
239 else: | 244 else: |
240 break | 245 break |
241 | 246 |
242 # Return None if it fails to read data from URL 'retries' times. | 247 # Return None if it fails to read data from URL 'retries' times. |
243 return None | 248 return None |
244 | 249 |
245 | 250 |
246 def FindMinLineDistance(crashed_line_list, changed_line_numbers, | 251 def FindMinLineDistance(crashed_line_list, changed_line_numbers, |
247 line_range=3): | 252 line_range=3): |
248 """Calculates how far the changed line is from one of the crashes. | 253 """Calculates how far the changed line is from one of the crashes. |
249 | 254 |
250 Finds the minimum distance between the lines that the file crashed on | 255 Finds the minimum distance between the lines that the file crashed on |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 link: A link to add to the string. | 347 link: A link to add to the string. |
343 | 348 |
344 Returns: | 349 Returns: |
345 A string with hyperlink added. | 350 A string with hyperlink added. |
346 """ | 351 """ |
347 sanitized_link = cgi.escape(link, quote=True) | 352 sanitized_link = cgi.escape(link, quote=True) |
348 sanitized_text = cgi.escape(str(text)) | 353 sanitized_text = cgi.escape(str(text)) |
349 return '<a href="%s">%s</a>' % (sanitized_link, sanitized_text) | 354 return '<a href="%s">%s</a>' % (sanitized_link, sanitized_text) |
350 | 355 |
351 | 356 |
352 def PrettifyList(l): | 357 def PrettifyList(items): |
353 """Returns a string representation of a list. | 358 """Returns a string representation of a list. |
354 | 359 |
355 It adds comma in between the elements and removes the brackets. | 360 It adds comma in between the elements and removes the brackets. |
356 Args: | 361 Args: |
357 l: A list to prettify. | 362 items: A list to prettify. |
358 Returns: | 363 Returns: |
359 A string representation of the list. | 364 A string representation of the list. |
360 """ | 365 """ |
361 return str(l)[1:-1] | 366 return ', '.join(map(str, items)) |
| 367 |
| 368 |
| 369 def PrettifyFrameInfo(frame_indices, functions): |
| 370 """Return a string to represent the frames with functions.""" |
| 371 frames = [] |
| 372 for frame_index, function in zip(frame_indices, functions): |
| 373 frames.append('frame #%s, function "%s"' % (frame_index, function)) |
| 374 return '; '.join(frames) |
362 | 375 |
363 | 376 |
364 def PrettifyFiles(file_list): | 377 def PrettifyFiles(file_list): |
365 """Returns a string representation of a list of file names. | 378 """Returns a string representation of a list of file names. |
366 | 379 |
367 Args: | 380 Args: |
368 file_list: A list of tuple, (file_name, file_url). | 381 file_list: A list of tuple, (file_name, file_url). |
369 Returns: | 382 Returns: |
370 A string representation of file names with their urls. | 383 A string representation of file names with their urls. |
371 """ | 384 """ |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 review_url = None | 502 review_url = None |
490 reviewers = None | 503 reviewers = None |
491 line_content = blame.line_content | 504 line_content = blame.line_content |
492 message = blame.message | 505 message = blame.message |
493 | 506 |
494 result = Result(suspected_cl, revision_url, component_name, author, reason, | 507 result = Result(suspected_cl, revision_url, component_name, author, reason, |
495 review_url, reviewers, line_content, message) | 508 review_url, reviewers, line_content, message) |
496 result_list.append(result) | 509 result_list.append(result) |
497 | 510 |
498 return result_list | 511 return result_list |
OLD | NEW |