--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_index.py Mon Sep 13 13:11:19 2010 +0800
@@ -0,0 +1,144 @@
+#!/usr/bin/python
+
+# Copyright (c) 2010 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:
+#
+# Tie together a set of HTML build summaries by creating a single index page
+# which shows the total number of Errors, Warnings etc. across all the parts
+# of the build and links to the individual summaries.
+
+import os
+import sys
+
+# get the absolute path to this script
+script = os.path.abspath(sys.argv[0])
+bindir = os.path.dirname(script)
+# add the Raptor python and plugins directories to the PYTHONPATH
+sys.path.append(os.path.join(bindir, "..", "python"))
+sys.path.append(os.path.join(bindir, "..", "python", "plugins"))
+
+if len(sys.argv) < 3:
+ sys.stderr.write("""usage: %s input_dir1 [input_dir2...] output_index_file
+
+The input directories are scanned recursively for totals.txt files and all
+those found are added to the generated index.
+""" % os.path.basename(script))
+ sys.exit(1)
+
+roots = []
+for a in sys.argv[1:-1]:
+ if os.path.isdir(a):
+ roots.append(a)
+ else:
+ sys.stderr.write("warning: %s is not a directory\n" % a)
+
+indexfile = sys.argv[-1]
+indexdir = os.path.dirname(indexfile)
+
+def findtotals(dirs, files):
+ "recurse directories until we find a totals.txt file."
+ sub = []
+ for d in dirs:
+ name = os.path.join(d, "totals.txt")
+ if os.path.isfile(name):
+ files.append(name)
+ else:
+ for s in os.listdir(d):
+ dir = os.path.join(d,s)
+ if os.path.isdir(dir):
+ sub.append(dir)
+ if sub:
+ findtotals(sub, files)
+
+totals = []
+findtotals(roots, totals)
+totals.sort()
+
+# look for a style file we can link to
+css = "style.css"
+for t in totals:
+ c = os.path.join(os.path.dirname(t),"style.css")
+ if os.path.isfile(c):
+ css = os.path.relpath(c, indexdir)
+ break
+
+# write the header of the index
+import filter_html
+try:
+ index = open(indexfile, "w")
+ index.write("""<html>
+<head>
+<title>Raptor Build Index</title>
+<link type="text/css" rel="stylesheet" href="%s">
+</head>
+<body>
+<h1>Raptor Build Index</h1>
+<table>
+<tr><th>build</th>""" % css)
+
+ for i in filter_html.Records.TITLES:
+ index.write('<th class="numbers">%s</th>' % i)
+ index.write("</tr>")
+except:
+ sys.stderr.write("error: cannot write index file %s\n" % indexfile)
+ sys.exit(1)
+
+import csv
+grandtotal = [0 for i in filter_html.Records.TITLES]
+
+for t in totals:
+ columns = []
+ try:
+ reader = csv.reader(open(t, "rb"))
+ for row in reader:
+ type = int(row[0])
+ style = row[1]
+ count = int(row[2])
+ if count == 0 or filter_html.Records.SUBDIRS[type] == style:
+ grandtotal[type] += count
+ columns.append((style,count))
+ else:
+ sys.stderr.write("warning: %s appears to be corrupt or out of date\n" % t)
+ except:
+ sys.stderr.write("warning: %s could not be read\n" % t)
+
+ if len(columns) == len(filter_html.Records.TITLES):
+ try:
+ linktext = os.path.dirname(t)
+ linkname = os.path.relpath(os.path.join(linktext, "index.html"), indexdir)
+ index.write('<tr><td class="name"><a href="%s">%s</a></td>' % (linkname, linktext))
+ for (style, count) in columns:
+ index.write('<td class="%s">%d</td>' % (style, count))
+ index.write("</tr>")
+ except:
+ sys.stderr.write("error: cannot write index file %s\n" % indexfile)
+ sys.exit(1)
+
+# finish off
+try:
+ index.write('<tr><td> </td></tr><tr><td class="name">total</td>')
+ for i, count in enumerate(grandtotal):
+ if count == 0:
+ index.write('<td class="zero">0</td>')
+ else:
+ index.write('<td class="%s">%d</td>' % (filter_html.Records.SUBDIRS[i], count))
+ index.write("</tr></table>")
+ index.write("</body></html>\n")
+ index.close()
+
+except:
+ sys.stderr.write("error: cannot close index file %s\n" % indexfile)
+ sys.exit(1)
+
+sys.exit(0)
\ No newline at end of file