eclair/eclair_diff_report.py: Tool to produce cumulative diff report

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
Change-Id: I1a03faeb3e293ddb19ce1b8383bdab93889bb185
diff --git a/eclair/eclair_diff_report.py b/eclair/eclair_diff_report.py
new file mode 100755
index 0000000..d0070aa
--- /dev/null
+++ b/eclair/eclair_diff_report.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2022 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+# Script to produce cumulative "diff" report from ECLAIR individual
+# per-service diff reports.
+
+import sys
+import glob
+
+
+def lcut(l, prefix):
+    if l.startswith(prefix):
+        l = l[len(prefix):]
+    return l
+
+
+def process_file(fname, del_or_add):
+    with open(fname) as f:
+        for l in f:
+            l = l.rstrip()
+            if not l:
+                break
+        for l in f:
+            if l.startswith("service "):
+                l = lcut(l, "service ")
+                if del_or_add == "del":
+                    l = "Resolved for " + l
+                else:
+                    l = "Added for " + l
+            elif l.startswith("End of report"):
+                l = "---------------\n"
+            sys.stdout.write(l)
+
+
+path = "."
+if len(sys.argv) > 1:
+    path = sys.argv[1]
+
+files = sorted(glob.glob(path + "/*.etr"))
+#print(files)
+
+
+header_done = False
+
+for f in files:
+    if "/B.EXPLAIN" in f:
+        continue
+    comp = f.rsplit(".", 2)
+#    print("*", f, comp)
+    if not header_done:
+        print("=== MISRA delta report for the patch (issues resolved and/or newly added) ===\n")
+        header_done = True
+    process_file(f, comp[-2])
+
+if not header_done:
+    print("No new MISRA issues detected, good work!")