Merge annofile and talon tidyup with fix fix
authortimothy.murphy@nokia.com
Thu, 25 Mar 2010 18:18:23 +0000
branchfix
changeset 410 924ab6786b2f
parent 404 d420eba6f3a0 (current diff)
parent 409 1b444ea0baec (diff)
child 411 80ad0c7f75fe
Merge annofile and talon tidyup with fix
sbsv2/raptor/RELEASE-NOTES.txt
--- a/sbsv2/raptor/RELEASE-NOTES.txt	Thu Mar 25 17:00:05 2010 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.txt	Thu Mar 25 18:18:23 2010 +0000
@@ -9,17 +9,21 @@
 - DPDEF141195 - Raptor doesn't handle spaces in tool paths
 - SF Bug 2172 - [Raptor] Resource builds warn on encountering trigraph-like strings
 - SF Bug 2308 - [Raptor] PLUGIN3 TARGETTYPEs don't set resource output offsets correctly
+- Fix: in copylogfromannofile mode, ensure that the build id and duration are included in the log. 
+  These are not critical but are useful.
+- Fix: remove unnecessary empty lines in log output in copylogfromannofile mode. 
+- SF Bug 1939 - [Raptor] PAGED keyword in MMP files should imply byte pair compressed
+- DPDEF144648 - Raptor failed to build tools_deb objects under Windows XP 
 
 
 version 2.12.5
 
 Defect Fixes:
-- SF Bug 1939 - [Raptor] PAGED keyword in MMP files should imply byte pair compressed
-- DPDEF144648 - Raptor failed to build tools_deb objects under Windows XP 
 - Fix: Workaround for emake engine log corruption when clockskew errors occur (annofile2log). 
   Allow Raptor to obtain log from emake annotation file where it is uncorrupted.  A new 
-  Make engine option "copyannofile2log" enables/disables this mode for emake. If this option is disabled
+  Make engine option "copylogfromannofile" enables/disables this mode for emake. If this option is disabled
   or if no annotation file is specified for the build then Raptor reads logs directly as normal.
+- SF Bug 2125 - [Raptor] - tracecompiler what output incorrect if mmp basename contains '.' e.g. fred.prd.mmp 
 - SF Bug 2191 - [Raptor] - When forcesuccess is enabled, exit status for a failed recipe is "retry" but should be "failed"
 - Fix: extend tracecompiler tests to Linux
 - Fix: Amendment to SF Bug 1511 fix - removal of blanked DEFFILE keyword from e32abiv2ani.flm
--- a/sbsv2/raptor/python/raptor_make.py	Thu Mar 25 17:00:05 2010 +0000
+++ b/sbsv2/raptor/python/raptor_make.py	Thu Mar 25 18:18:23 2010 +0000
@@ -37,7 +37,19 @@
 class BadMakeEngineException(Exception):
 	pass
 
+def string_following(prefix, str):
+	"""If str starts with prefix then return the rest of str, otherwise None"""
+	if str.startswith(prefix):
+		return str[len(prefix):]
+	else:
+		return None
+
 def XMLEscapeLog(stream):
+	""" A generator that reads a raptor log from a stream and performs an XML escape
+	    on all text between tags, which is usually make output that could contain
+	    illegal characters that upset XML-based log parsers.
+	    This function yields "xml-safe" output line by line.
+	"""
 	inRecipe = False
 
 	for line in stream:
@@ -54,22 +66,50 @@
 			yield escape(line)
 
 def AnnoFileParseOutput(annofile):
+	""" A generator that extracts log output from an emake annotation file, 
+	    perform an XML-unescape on it and "yields" it line by line.  """
 	af = open(annofile, "r")
 
 	inOutput = False
 	inParseJob = False
+
+	buildid = ""
 	for line in af:
 		line = line.rstrip("\n\r")
 
+
 		if not inOutput:
-			if line.startswith("<output>"):
+			o = string_following("<output>", line)
+			if not o:
+				o = string_following('<output src="prog">', line)
+
+			if o:
 				inOutput = True	
-				yield unescape(line[8:])+'\n'
-				# This is make output so don't unescape it.
-			elif line.startswith('<output src="prog">'):
-				line = line[19:]
-				inOutput = True	
-				yield unescape(line)+'\n'
+				yield unescape(o)+'\n'
+				continue
+
+
+			o = string_following('<build id="',line)
+			if o:
+				buildid = o[:o.find('"')]
+				yield "Starting build: "+buildid+"\n"
+				continue 
+
+			o = string_following('<metric name="duration">', line)
+			if o:
+				secs = int(o[:o.find('<')])
+				if secs != 0:
+					duration = "%d:%d" % (secs/60, secs % 60)
+				else:
+					duration = "0:0"
+				continue 
+
+
+			o = string_following('<metric name="clusterAvailability">', line)
+			if o:
+				availability = o[:o.find('<')]
+				continue 
+				
 		else:
 			end_output = line.find("</output>")
 		
@@ -77,8 +117,10 @@
 				line = line[:end_output]
 				inOutput = False
 			
-			yield unescape(line)+'\n'
+			if line != "":	
+				yield unescape(line)+'\n'
 
+	yield "Finished build: %s   Duration: %s (m:s)   Cluster availability: %s%%\n" %(buildid,duration,availability)
 	af.close()
 
 
@@ -140,8 +182,8 @@
 
 			if self.copyLogFromAnnoFile:
 				for o in self.raptor.makeOptions:
-					if o.startswith("--emake-annofile="):
-						self.annoFileName = o[17:]
+					self.annoFileName = string_following("--emake-annofile=", o)
+					if self.annoFileName:
 						self.raptor.Info("annofile: " + o)
 
 				if not self.annoFileName:
--- a/sbsv2/raptor/test/smoke_suite/annofile2log.py	Thu Mar 25 17:00:05 2010 +0000
+++ b/sbsv2/raptor/test/smoke_suite/annofile2log.py	Thu Mar 25 18:18:23 2010 +0000
@@ -24,16 +24,12 @@
 	
 	t.usebash = True
 	t.errors = 0
-	t.returncode = 1
+	t.returncode = 0
 	t.exceptions = 0
 	t.command = "cd smoke_suite/test_resources/annofile2log && ( diff -wB <(python testanno2log.py <(bzip2 -dc scrubbed_ncp_dfs_resource.anno.bz2)) <(bzip2 -dc scrubbed_ncp_dfs_resource.stdout.bz2))"
 	
 	t.mustmatch_multiline = [ 
-		".*1a2.*" + 
-		"Starting build: 488235.{1,3}" +
-		"14009c12884.{1,4}" +
-		"---.{1,4}" +
-		"Finished build: 488235   Duration: 1:15 \(m:s\)   Cluster availability: 100%.*"
+		"^ *.?"
                 ]
 
 
--- a/sbsv2/raptor/util/talon/talon.c	Thu Mar 25 17:00:05 2010 +0000
+++ b/sbsv2/raptor/util/talon/talon.c	Thu Mar 25 18:18:23 2010 +0000
@@ -586,7 +586,7 @@
 
 				if (p->returncode != 0)
 				{
-					char *exitstr = force_success ? "failed" : retries > 0 ? "retry" : "failed";
+					char *exitstr = (force_success || retries <= 0) ? "failed" : "retry";
 					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='%s' code='%d' attempt='%d'%s%s />", exitstr, p->returncode, attempt, flagsstr, reasonstr );
 				} else {
 					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='ok' attempt='%d'%s%s />", attempt, flagsstr, reasonstr );