| OLD | NEW |
| 1 # coding=utf8 | 1 # coding=utf8 |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 """Sends patches to the Try server and reads back results. | 5 """Sends patches to the Try server and reads back results. |
| 6 | 6 |
| 7 - RietveldTryJobs contains RietveldTryJob, one per try job on a builder. | 7 - RietveldTryJobs contains RietveldTryJob, one per try job on a builder. |
| 8 - TryRunnerRietveld uses Rietveld to signal and poll job results. | 8 - TryRunnerRietveld uses Rietveld to signal and poll job results. |
| 9 """ | 9 """ |
| 10 | 10 |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 # Figure out steps that should be retried for this builder. | 441 # Figure out steps that should be retried for this builder. |
| 442 missing_tests = self.tests_need_to_be_run(now).get(job.builder, []) | 442 missing_tests = self.tests_need_to_be_run(now).get(job.builder, []) |
| 443 if not missing_tests: | 443 if not missing_tests: |
| 444 return False | 444 return False |
| 445 if job.tries > 2: | 445 if job.tries > 2: |
| 446 self.error_message = ( | 446 self.error_message = ( |
| 447 'Retried try job too often on %s for step(s) %s\n%s' % | 447 'Retried try job too often on %s for step(s) %s\n%s' % |
| 448 (job.builder, ', '.join(missing_tests), url)) | 448 (job.builder, ', '.join(missing_tests), url)) |
| 449 logging.info(self.error_message) | 449 logging.info(self.error_message) |
| 450 return True | 450 return True |
| 451 elif 'update' in job.steps_failed: | |
| 452 self.error_message = ( | |
| 453 'Step "update" is always a major failure.\n' | |
| 454 'Look at the try server FAQ for more details.\n%s' % url) | |
| 455 logging.info(self.error_message) | |
| 456 return True | |
| 457 elif 'compile' in job.steps_failed and job.clobber: | |
| 458 self.error_message = ( | |
| 459 'Sorry for I got bad news for ya.\n' | |
| 460 'Compile failed with a clobber build on %s.\n' | |
| 461 '%s\n' | |
| 462 'Your code is likely broken or HEAD is junk. Please ensure your\n' | |
| 463 'code is not broken then alert the build sheriffs.\n' | |
| 464 'Look at the try server FAQ for more details.') % ( | |
| 465 job.builder, | |
| 466 url) | |
| 467 logging.info(self.error_message) | |
| 468 return True | |
| 469 return False | 451 return False |
| 470 | 452 |
| 471 @model.immutable | 453 @model.immutable |
| 472 def why_not(self): | 454 def why_not(self): |
| 473 # Skipped or failed, nothing to do. | 455 # Skipped or failed, nothing to do. |
| 474 if self.skipped or self.error_message: | 456 if self.skipped or self.error_message: |
| 475 return None | 457 return None |
| 476 waiting = self.tests_waiting_for_result() | 458 waiting = self.tests_waiting_for_result() |
| 477 if waiting: | 459 if waiting: |
| 478 out = 'Waiting for the following jobs:\n' | 460 out = 'Waiting for the following jobs:\n' |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 logging.warning(str(e)) | 742 logging.warning(str(e)) |
| 761 return False | 743 return False |
| 762 raise | 744 raise |
| 763 if handle: | 745 if handle: |
| 764 for updated_key in keys: | 746 for updated_key in keys: |
| 765 job = jobs.try_jobs[updated_key] | 747 job = jobs.try_jobs[updated_key] |
| 766 self._update_dashboard(pending, job, status) | 748 self._update_dashboard(pending, job, status) |
| 767 jobs.signal_as_failed_if_needed(job, self._build_status_url(job), now) | 749 jobs.signal_as_failed_if_needed(job, self._build_status_url(job), now) |
| 768 | 750 |
| 769 return True | 751 return True |
| OLD | NEW |