added scipt for checking exports across multiple logs wip
authorRichard Taylor <richard.i.taylor@nokia.com>
Fri, 04 Dec 2009 17:06:01 +0000
branchwip
changeset 37 d806416fc9bf
parent 36 24ef68259f6c
child 38 8a1eeb1a78cb
child 58 1105c0a1036e
child 63 f6e0bbce6a2f
child 71 ba3ff6a1ecab
added scipt for checking exports across multiple logs
sbsv2/raptor/bin/sbs_check_exports.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_check_exports.py	Fri Dec 04 17:06:01 2009 +0000
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Symbian Foundation License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+import re
+import sys
+
+# there are no options, so print help if any are passed
+if len(sys.argv) > 1:
+	print "usage:", sys.argv[0], "(The log data is read from stdin)"
+	sys.exit(0)
+
+whatlogRE = re.compile("<whatlog.*bldinf='([^']*)'")
+exportRE = re.compile("<export destination='(.*)' source='(.*)'")
+
+bldinf = "unknown"
+sources = {}		# lookup from source to destination
+destinations = {}	# lookup from destination to source
+
+chains = 0
+repeats = 0
+conflicts = []
+
+# read stdin a line at a time and soak up all the exports
+line = " "
+while line:
+	line = sys.stdin.readline()
+
+	whatlogMatch = whatlogRE.search(line)
+	if whatlogMatch:
+		bldinf = whatlogMatch.group(1).lower()
+		continue
+
+	exportMatch = exportRE.search(line)
+	if exportMatch:
+		destination = exportMatch.group(1).lower()
+		source = exportMatch.group(2).lower()
+
+		if destination in destinations:
+			(otherSource, otherBldinf) = destinations[destination]
+			
+			# same source and destination but different bld.inf => repeat	
+			if source == otherSource and bldinf != otherBldinf:
+				# only interested in the number for now
+				repeats += 1
+				
+			# different source but same destination => conflict
+			if source != otherSource:
+				conflict = (source, destination, bldinf, otherSource, otherBldinf)
+				tcilfnoc = (otherSource, destination, otherBldinf, source, bldinf)
+				
+				if conflict in conflicts or tcilfnoc in conflicts:
+					# seen this conflict before
+					pass
+				else:
+					print "CONFLICT:", destination, \
+						"FROM", source, \
+						"IN", bldinf, \
+						"AND FROM", otherSource, \
+						"IN", otherBldinf
+					conflicts.append(conflict)
+		else:
+			sources[source] = [destination, bldinf]
+			destinations[destination] = [source, bldinf]
+
+# now check for destinations which were also sources => chains
+for destination in destinations:
+	if destination in sources:
+		(nextDestination, inf2) = sources[destination]
+		(source, inf1) = destinations[destination]
+		print "CHAIN:", source, \
+			"TO", destination, \
+			"IN", inf1, \
+			"THEN TO", nextDestination, \
+			"IN", inf2
+		chains += 1
+		
+# print a summary
+print "Total exports = ", len(destinations.keys())
+print "Chained exports = ", chains
+print "Repeated exports = ", repeats
+print "Conflicting exports = ", len(conflicts)
+
+# return the error code
+if conflicts:
+	sys.exit(1)
+sys.exit(0)
+