Add script for merging several symcov's 97/142297/1
authorDmitry Kovalenko <d.kovalenko@samsung.com>
Thu, 3 Aug 2017 09:36:44 +0000 (12:36 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Thu, 3 Aug 2017 09:37:33 +0000 (12:37 +0300)
Change-Id: I1c93206f6d1ac5dc9203931fe8053014a1af7b64
Signed-off-by: Dmitry Kovalenko <d.kovalenko@samsung.com>
scripts/merge_symcov.py [new file with mode: 0755]

diff --git a/scripts/merge_symcov.py b/scripts/merge_symcov.py
new file mode 100755 (executable)
index 0000000..d0dfab6
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+
+import json
+import sys
+
+if len(sys.argv) < 2:
+    print "Usage: {} <symcov1> <symcov2> ... <out_symcov>".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)