Index: git_cl.py |
diff --git a/git_cl.py b/git_cl.py |
index a1f58c8561f8129afd9cab9cf3de775fd5864d87..dc6f4cdd9a623190b1492dbeaf3723458927e5ac 100755 |
--- a/git_cl.py |
+++ b/git_cl.py |
@@ -398,7 +398,7 @@ def trigger_try_jobs(auth_config, changelist, options, masters, category): |
def fetch_try_jobs(auth_config, changelist, options): |
"""Fetches try jobs from buildbucket. |
- Returns a map from build id to build info as json dictionary. |
+ Returns a map from build id to build info as a dictionary. |
""" |
rietveld_url = settings.GetDefaultServerUrl() |
rietveld_host = urlparse.urlparse(rietveld_url).hostname |
@@ -533,6 +533,31 @@ def print_try_jobs(options, builds): |
print('Total: %d try jobs' % total) |
+def write_try_results_json(output_file, builds): |
+ """Writes a subset of the data from fetch_try_jobs to a file as JSON. |
+ |
+ The input |builds| dict is assumed to be generated by Buildbucket. |
+ Buildbucket documentation: http://goo.gl/G0s101 |
+ """ |
+ |
+ def convert_build_dict(build): |
+ return { |
+ 'buildbucket_id': build.get('id'), |
+ 'status': build.get('status'), |
+ 'result': build.get('result'), |
+ 'bucket': build.get('bucket'), |
+ 'builder_name': json.loads( |
+ build.get('parameters_json', '{}')).get('builder_name'), |
+ 'failure_reason': build.get('failure_reason'), |
+ 'url': build.get('url'), |
+ } |
+ |
+ converted = [] |
+ for _, build in sorted(builds.items()): |
+ converted.append(convert_build_dict(build)) |
+ write_json(output_file, converted) |
+ |
+ |
def MatchSvnGlob(url, base_url, glob_spec, allow_wildcards): |
"""Return the corresponding git ref if |base_url| together with |glob_spec| |
matches the full |url|. |
@@ -4755,6 +4780,8 @@ def CMDtry_results(parser, args): |
group.add_option( |
"--buildbucket-host", default='cr-buildbucket.appspot.com', |
help="Host of buildbucket. The default host is %default.") |
+ group.add_option( |
+ '--json', help='Path of JSON output file to write try job results to.') |
parser.add_option_group(group) |
auth.add_auth_options(parser) |
options, args = parser.parse_args(args) |
@@ -4783,7 +4810,10 @@ def CMDtry_results(parser, args): |
print('ERROR: Exception when trying to fetch try jobs: %s\n%s' % |
(e, stacktrace)) |
return 1 |
- print_try_jobs(options, jobs) |
+ if options.json: |
+ write_try_results_json(options.json, jobs) |
+ else: |
+ print_try_jobs(options, jobs) |
return 0 |