| 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 import base64 | 5 import base64 |
| 6 import json | 6 import json |
| 7 | 7 |
| 8 from common import constants | 8 from common import constants |
| 9 from common.http_client_appengine import HttpClientAppengine as HttpClient | 9 from common.http_client_appengine import HttpClientAppengine as HttpClient |
| 10 from common.pipeline_wrapper import BasePipeline | 10 from common.pipeline_wrapper import BasePipeline |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 ... | 414 ... |
| 415 ], | 415 ], |
| 416 }, | 416 }, |
| 417 "25410": { | 417 "25410": { |
| 418 "chromium_revision": "4bffcd598dd89e0016208ce9312a1f477ff105d1" | 418 "chromium_revision": "4bffcd598dd89e0016208ce9312a1f477ff105d1" |
| 419 "blame_list": [ | 419 "blame_list": [ |
| 420 "b98e0b320d39a323c81cc0542e6250349183a4df", | 420 "b98e0b320d39a323c81cc0542e6250349183a4df", |
| 421 ... | 421 ... |
| 422 ], | 422 ], |
| 423 } | 423 } |
| 424 }, |
| 425 "compile_failures": { |
| 426 "failed_targets": ["obj/path/to/file.o"], |
| 427 "unknown_targets": [], |
| 428 "unrecognized_format": false, |
| 424 } | 429 } |
| 425 } | 430 } |
| 426 """ | 431 """ |
| 427 build_info = self._ExtractBuildInfo(master_name, builder_name, build_number) | 432 build_info = self._ExtractBuildInfo(master_name, builder_name, build_number) |
| 428 | 433 |
| 429 if not build_info: # pragma: no cover | 434 if not build_info: # pragma: no cover |
| 430 raise pipeline.Retry('Failed to extract build info.') | 435 raise pipeline.Retry('Failed to extract build info.') |
| 431 | 436 |
| 432 build_failure_type = self._GetFailureType(build_info) | 437 build_failure_type = self._GetFailureType(build_info) |
| 433 | 438 |
| 434 failure_info = { | 439 failure_info = { |
| 435 'failed': True, | 440 'failed': True, |
| 436 'master_name': master_name, | 441 'master_name': master_name, |
| 437 'builder_name': builder_name, | 442 'builder_name': builder_name, |
| 438 'build_number': build_number, | 443 'build_number': build_number, |
| 439 'chromium_revision': build_info.chromium_revision, | 444 'chromium_revision': build_info.chromium_revision, |
| 440 'builds': {}, | 445 'builds': {}, |
| 441 'failed_steps': {}, | 446 'failed_steps': {}, |
| 442 'failure_type': build_failure_type, | 447 'failure_type': build_failure_type, |
| 448 'compile_failures': build_info.compile_failures, |
| 443 } | 449 } |
| 444 | 450 |
| 445 if build_info.result == buildbot.SUCCESS or not build_info.failed_steps: | 451 if build_info.result == buildbot.SUCCESS or not build_info.failed_steps: |
| 446 failure_info['failed'] = False | 452 failure_info['failed'] = False |
| 447 return failure_info | 453 return failure_info |
| 448 | 454 |
| 449 builds = dict() | 455 builds = dict() |
| 450 self._SaveBlamelistAndChromiumRevisionIntoDict(build_info, builds) | 456 self._SaveBlamelistAndChromiumRevisionIntoDict(build_info, builds) |
| 451 | 457 |
| 452 failed_steps = self._CreateADictOfFailedSteps(build_info) | 458 failed_steps = self._CreateADictOfFailedSteps(build_info) |
| 453 | 459 |
| 454 # Checks first failed builds for each failed step. | 460 # Checks first failed builds for each failed step. |
| 455 self._CheckForFirstKnownFailure( | 461 self._CheckForFirstKnownFailure( |
| 456 master_name, builder_name, build_number, failed_steps, builds) | 462 master_name, builder_name, build_number, failed_steps, builds) |
| 457 | 463 |
| 458 if build_failure_type == failure_type.TEST: | 464 if build_failure_type == failure_type.TEST: |
| 459 # Checks first failed builds for each failed test. | 465 # Checks first failed builds for each failed test. |
| 460 self._CheckFirstKnownFailureForSwarmingTests( | 466 self._CheckFirstKnownFailureForSwarmingTests( |
| 461 master_name, builder_name, build_number, failed_steps, builds) | 467 master_name, builder_name, build_number, failed_steps, builds) |
| 462 | 468 |
| 463 failure_info['builds'] = builds | 469 failure_info['builds'] = builds |
| 464 failure_info['failed_steps'] = failed_steps | 470 failure_info['failed_steps'] = failed_steps |
| 465 | 471 |
| 466 analysis = WfAnalysis.Get(master_name, builder_name, build_number) | 472 analysis = WfAnalysis.Get(master_name, builder_name, build_number) |
| 467 analysis.not_passed_steps = build_info.not_passed_steps | 473 analysis.not_passed_steps = build_info.not_passed_steps |
| 468 analysis.build_failure_type = build_failure_type | 474 analysis.build_failure_type = build_failure_type |
| 469 analysis.put() | 475 analysis.put() |
| 470 | 476 |
| 471 return failure_info | 477 return failure_info |
| OLD | NEW |