Added my new compare_header_lists.py script
authorSebastian Brannstrom <sebastianb@symbian.org>
Fri, 20 Nov 2009 10:27:28 +0000
changeset 13 32a0da1099d8
parent 12 d2f4d301e581
child 14 6015c630283e
Added my new compare_header_lists.py script
.DS_Store
scripts/.DS_Store
scripts/python/.DS_Store
scripts/python/compare_baselines/compare_baselines.py
Binary file .DS_Store has changed
Binary file scripts/.DS_Store has changed
Binary file scripts/python/.DS_Store has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/python/compare_baselines/compare_baselines.py	Fri Nov 20 10:27:28 2009 +0000
@@ -0,0 +1,88 @@
+# compare_baselines.py takes two lists of baselines produced by find_public_apis.pl
+# and compares them for added, removed and moved headers as well as api class change
+#
+# outputs report as csv
+#
+# usage: python compare_baselines.py <baseline1> <baseline2>
+
+import sys
+
+# parse a baseline file produced by find_public_apis.pl into a map
+def parse_baseline(filename):
+	file = open(filename)
+	count = 0
+	db = {}
+	
+	for line in file:
+		if count > 0:
+			tokens = line.split()
+			pathname = tokens[0].strip().lower() # watch out for lowecasing here!
+			apiclass = tokens[1].strip()
+			apiclassreason = tokens[2].strip()
+
+			dbentry = {'pathname': pathname, 'class': apiclass, 'reason': apiclassreason, 'duplicate':''}
+			
+			filename = strip_path(pathname)
+		
+			if db.has_key(filename):
+				db[filename]['duplicate'] = pathname
+#				print >> sys.stderr, 'duplicate filename at paths %s and %s' % (pathname, db[filename]['pathname'])
+			else:
+				db[filename] = dbentry
+				
+		count = count + 1	
+
+	return db
+	
+# strip pathnames from filenames
+def strip_path(pathname):
+	while pathname.find('/') != -1:
+		x=pathname.find('/')
+		pathname = pathname[x+1:]
+	
+	return pathname.lower()
+
+def compare_dbs(db1, db2):
+	print 'apiname,status,classchange,class1,class2,pathname1,pathname2,duplicate1,duplicate2'
+
+	for key in db1.keys():
+		db1entry = db1[key]
+		status = 'ok'
+		if db2.has_key(key):
+			db2entry = db2[key]
+			
+			# filename exists, does path match?
+			if db1entry['pathname'] != db2entry['pathname']:
+				status = 'moved'
+
+			# does class match?
+			if db1entry['class'] != db2entry['class']:
+				classchange = 'yes'
+			else:
+				classchange = 'no'
+				
+			print '%s,%s,%s,%s,%s,%s,%s,%s,%s' % (key, status, classchange,db1entry['class'],db2entry['class'],db1entry['pathname'], db2entry['pathname'],db1entry['duplicate'],db2entry['duplicate'])
+		else:
+			status = 'removed'
+			print '%s,%s,%s,%s,%s,%s,%s,%s,%s' % (key, status, 'no',db1entry['class'],'',db1entry['pathname'], '',db1entry['duplicate'],'')
+			
+		
+	for key in db2.keys():
+		if not db1.has_key(key):
+			db2entry = db2[key]
+			status = 'added'
+			print '%s,%s,%s,%s,%s,%s,%s,%s,%s' % (key, status, 'no','',db2entry['class'],'',db2entry['pathname'], '',db2entry['duplicate'])
+		
+			
+			# handle duplicates
+	
+		
+
+# read the list of published filenames
+bl1name = sys.argv[1]
+bl2name = sys.argv[2]
+
+db1 = parse_baseline(bl1name)
+db2 = parse_baseline(bl2name)
+
+compare_dbs(db1, db2)