diff options
Diffstat (limited to 'tools/auto_bisect/bisect_results_json.py')
-rw-r--r-- | tools/auto_bisect/bisect_results_json.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tools/auto_bisect/bisect_results_json.py b/tools/auto_bisect/bisect_results_json.py new file mode 100644 index 0000000..210159c --- /dev/null +++ b/tools/auto_bisect/bisect_results_json.py @@ -0,0 +1,88 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os + +import bisect_utils +import source_control + + +def Get(bisect_results, opts, depot_registry): + """Returns the results as a jsonable object.""" + if opts.bisect_mode == bisect_utils.BISECT_MODE_RETURN_CODE: + change = '0' + else: + metric = '/'.join(opts.metric) + change = '%.02f%%' % bisect_results.regression_size + + status = 'completed' + + return { + 'try_job_id': opts.try_job_id, + 'bug_id': opts.bug_id, + 'status': status, + 'buildbot_log_url': _GetBuildBotLogUrl(), + 'bisect_bot': os.environ.get('BUILDBOT_BUILDERNAME', ''), + 'command': opts.command, + 'metric': metric, + 'change': change, + 'score': bisect_results.confidence, + 'good_revision': opts.good_revision, + 'bad_revision': opts.bad_revision, + 'warnings': bisect_results.warnings, + 'abort_reason': bisect_results.abort_reason, + 'culprit_data': _CulpritData(bisect_results), + 'revision_data': _RevisionData(bisect_results, depot_registry), + } + + +def _CulpritData(bisect_results): + if not bisect_results.culprit_revisions: + return None + cl, culprit_info, depot = bisect_results.culprit_revisions[0] + commit_link = _GetViewVCLinkFromDepotAndHash(cl, depot) + if commit_link: + commit_link = '\nLink : %s' % commit_link + else: + commit_link = ('\Description:\n%s' % culprit_info['body']) + + return { + 'subject': culprit_info['subject'], + 'author': culprit_info['email'], + 'email': culprit_info['email'], + 'cl_date': culprit_info['date'], + 'commit_info': commit_link, + 'revisions_links': [], + 'cl': cl + } + + +def _RevisionData(bisect_results, depot_registry): + revision_rows = [] + for state in bisect_results.state.GetRevisionStates(): + commit_position = source_control.GetCommitPosition( + state.revision, depot_registry.GetDepotDir(state.depot)) + revision_rows.append({ + 'depot_name': state.depot, + 'deps_revision': state.revision, + 'commit_pos': commit_position, + 'result': 'good' if state.passed else 'bad', + }) + return revision_rows + + +def _GetViewVCLinkFromDepotAndHash(git_revision, depot): + """Gets link to the repository browser.""" + if depot and 'viewvc' in bisect_utils.DEPOT_DEPS_NAME[depot]: + return bisect_utils.DEPOT_DEPS_NAME[depot]['viewvc'] + git_revision + return '' + + +def _GetBuildBotLogUrl(): + master_url = os.environ.get('BUILDBOT_BUILDBOTURL') + builder_name = os.environ.get('BUILDBOT_BUILDERNAME') + builder_number = os.environ.get('BUILDBOT_BUILDNUMBER') + if master_url and builder_name and builder_number: + return '%s%s/%s' % (master_url, builder_name, builder_number) + return '' |