| Index: tools/auto_bisect/bisect_results_json.py
|
| diff --git a/tools/auto_bisect/bisect_results_json.py b/tools/auto_bisect/bisect_results_json.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..210159cdc99ed9475b576041bb4583e915736149
|
| --- /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 ''
|
|
|