1f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren#!/usr/bin/env python
2f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren# Copyright 2017 The Chromium Authors. All rights reserved.
3f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren# Use of this source code is governed by a BSD-style license that can be
4f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren# found in the LICENSE file.
5f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
6f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borenimport argparse
7f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borenimport json
8f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borenimport sys
9f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
10f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borenimport results_merger
11f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
12f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
13f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borendef StandardIsolatedScriptMerge(output_json, jsons_to_merge):
14f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  """Merge the contents of one or more results JSONs into a single JSON.
15f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
16f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  Args:
17f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren    output_json: A path to a JSON file to which the merged results should be
18f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren      written.
19f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren    jsons_to_merge: A list of paths to JSON files that should be merged.
20f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  """
21f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  shard_results_list = []
22f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  for j in jsons_to_merge:
23f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren    with open(j) as f:
24f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren      shard_results_list.append(json.load(f))
25f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  merged_results = results_merger.merge_test_results(shard_results_list)
26f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
27f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  with open(output_json, 'w') as f:
28f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren    json.dump(merged_results, f)
29f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
30f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  return 0
31f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
32f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
33f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borendef main():
34f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  parser = argparse.ArgumentParser()
35f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  parser.add_argument('-o', '--output-json', required=True)
36f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  parser.add_argument('--build-properties', help=argparse.SUPPRESS)
37f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  parser.add_argument('--summary-json', help=argparse.SUPPRESS)
38f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  parser.add_argument('jsons_to_merge', nargs='*')
39f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
40f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  args = parser.parse_args()
41f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  return StandardIsolatedScriptMerge(args.output_json, args.jsons_to_merge)
42f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
43f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren
44f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Borenif __name__ == '__main__':
45f94514b0ff8eccb2eaef8c77bee8c5f462b83b90Eric Boren  sys.exit(main())
46