From 0aa2a342376a0a8f6f52e488126c9fda030d24f6 Mon Sep 17 00:00:00 2001 From: Dmitry Kovalenko Date: Thu, 3 Aug 2017 12:36:44 +0300 Subject: [PATCH] Add script for merging several symcov's Change-Id: I1c93206f6d1ac5dc9203931fe8053014a1af7b64 Signed-off-by: Dmitry Kovalenko --- scripts/merge_symcov.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 scripts/merge_symcov.py diff --git a/scripts/merge_symcov.py b/scripts/merge_symcov.py new file mode 100755 index 0000000..d0dfab6 --- /dev/null +++ b/scripts/merge_symcov.py @@ -0,0 +1,47 @@ +#!/usr/bin/python + +import json +import sys + +if len(sys.argv) < 2: + print "Usage: {} ... ".format(sys.argv[0]) + exit(0) + +smcs = [] +output_file = sys.argv[-1] + +for sc in sys.argv[1:-1]: + print sc + with open(sc) as f: + smcs.append(json.load(f)) + + +check_fields_names = ("binary-hash", "covered-points", "point-symbol-info") + +for i in xrange(len(smcs)): + for field in check_fields_names: + if field not in smcs[i]: + print "{} has no {} field".format(sys.argv[1 + i], field) + exit(1) + +for s in smcs[1:]: + # merge binary-hash + smcs[0]["binary-hash"] =\ + list(set(smcs[0]["binary-hash"] + s["binary-hash"])) + # merge covered-points + smcs[0]["covered-points"] =\ + list(set(smcs[0]["covered-points"] + s["covered-points"])) + + # merge point-symbol-info + for file_psi in s["point-symbol-info"]: + if file_psi not in smcs[0]["point-symbol-info"]: + smcs[0]["point-symbol-info"][file_psi] = {} + for func_psi in s["point-symbol-info"][file_psi]: + if func_psi not in smcs[0]["point-symbol-info"][file_psi]: + smcs[0]["point-symbol-info"][file_psi][func_psi] = {} + for point in s["point-symbol-info"][file_psi][func_psi]: + smcs[0]["point-symbol-info"][file_psi][func_psi][point] =\ + s["point-symbol-info"][file_psi][func_psi][point] + +with open(output_file, 'w') as f: + json.dump(smcs[0], f) -- 2.7.4