Updated preprocess_log to deal with mal-formed <archive> tags - workaround for Bug 170.
Also re-jigged to use STDIN and STDOUT rather than filename options on the CLI.
--- a/common/build.xml Mon Jul 13 11:38:30 2009 +0100
+++ b/common/build.xml Mon Jul 13 17:43:50 2009 +0100
@@ -757,69 +757,67 @@
<arg value="${build.log.dir}/analysis/${build.id}_what_results.csv"/>
</exec>
- <echo message="Running yarp over *_compile.log files"/>
- <for param="logfile">
- <path>
- <fileset dir="${build.log.dir}">
- <include name="*_compile.log"/>
- <exclude name="*build_check_compile.log"/>
- </fileset>
- </path>
- <sequential>
- <propertyregex override="yes" property="yarpfile" input="@{logfile}" regexp=".*[\\|\/](.*)_compile\.log" replace="\1_yarp.csv"/>
- <propertyregex override="yes" property="yarpfile_short" input="${yarpfile}" regexp="[^_]*_[^_]*_[^_]*_(.+)_[^_]*_yarp\.csv" replace="YARP_\1"/>
- <echo message="Yarping @{logfile}..."/>
- <exec executable="perl" dir="${build.drive}" failonerror="false" output="${build.log.dir}/analysis/${build.id}_yarp.log" append="true">
- <arg value="${sf.common.config.dir}/tools/analysis/yarp.pl"/>
- <arg value="@{logfile}"/>
- <arg value="${build.log.dir}/analysis/${yarpfile}"/>
- </exec>
- <exec executable="cmd" output="${build.drive}/output/logs/analysis/tmp_yarp_files.csv" append="true">
- <arg value="/c"/>
- <arg value="echo"/>
- <arg value="${yarpfile_short},${sf.spec.publish.networkdrive}\${sf.spec.job.name}\builds\${sf.spec.job.codeline}\${build.id}\logs\analysis\${yarpfile},${build.drive}\output\logs\analysis\${yarpfile}"/>
- </exec>
- </sequential>
- </for>
-
- <exec executable="perl" dir="${build.drive}" failonerror="false" outputproperty="sf.job.totalyarperrors">
- <arg value="${sf.common.config.dir}/tools/analysis/parse_yarp_files.pl"/>
- <arg value="${build.drive}/output/logs/analysis/tmp_yarp_files.csv"/>
- </exec>
- <echo message="Total yarp errors: ${sf.job.totalyarperrors}"/>
-
- <fmpp sourceFile="${sf.common.config.dir}/diamonds/sf-run-analysis.xml.ftl" outputFile="${build.drive}/output/logs/sf-run-analysis.xml">
- <data expandProperties="yes">
- ant: antProperties()
- files: csv(${build.drive}/output/logs/analysis/tmp_yarp_files.csv,{separator:',',headers:[name,path,localpath]})
- </data>
- </fmpp>
-
- <echo message="Extracting whatlog information from *whatlog*_compile.log files"/>
- <for param="logfile">
- <path>
- <fileset dir="${build.log.dir}">
- <include name="*whatlog*_compile.log"/>
- </fileset>
- </path>
- <sequential>
- <propertyregex override="yes" property="whatlogfile" input="@{logfile}" regexp=".*[\\|\/].*\.\d+_+(.*)_compile\.log" replace="\1_preprocessed.log"/>
- <echo message="Preprocessing @{logfile}..."/>
- <exec executable="perl" dir="${sf.common.config.dir}/tools/raptor" failonerror="false" output="${build.log.dir}/analysis/${build.id}_whatlog.log" append="true">
- <arg value="${sf.common.config.dir}/tools/raptor/preprocess_log.pl"/>
- <arg value="--in=@{logfile}"/>
- <arg value="--out=${build.log.dir}/analysis/${whatlogfile}"/>
- </exec>
- <echo message="Extracting whatlog info from ${whatlogfile}..."/>
- <exec executable="perl" dir="${sf.common.config.dir}/tools/raptor" failonerror="false" output="${build.log.dir}/analysis/${build.id}_whatlog.log" append="true">
- <arg value="${sf.common.config.dir}/tools/raptor/parse.pl"/>
- <arg value="--releaseable"/>
- <arg value="--log=${build.log.dir}/analysis/${whatlogfile}"/>
- <arg value="--basedir=${build.log.dir}/releaseables"/>
- <arg value="--append"/>
- </exec>
- </sequential>
- </for>
+ <echo message="Running yarp over *_compile.log files"/>
+ <for param="logfile">
+ <path>
+ <fileset dir="${build.log.dir}">
+ <include name="*_compile.log"/>
+ <exclude name="*build_check_compile.log"/>
+ </fileset>
+ </path>
+ <sequential>
+ <propertyregex override="yes" property="yarpfile" input="@{logfile}" regexp=".*[\\|\/](.*)_compile\.log" replace="\1_yarp.csv"/>
+ <propertyregex override="yes" property="yarpfile_short" input="${yarpfile}" regexp="[^_]*_[^_]*_[^_]*_(.+)_[^_]*_yarp\.csv" replace="YARP_\1"/>
+ <echo message="Yarping @{logfile}..."/>
+ <exec executable="perl" dir="${build.drive}" failonerror="false" output="${build.log.dir}/analysis/${build.id}_yarp.log" append="true">
+ <arg value="${sf.common.config.dir}/tools/analysis/yarp.pl"/>
+ <arg value="@{logfile}"/>
+ <arg value="${build.log.dir}/analysis/${yarpfile}"/>
+ </exec>
+ <exec executable="cmd" output="${build.drive}/output/logs/analysis/tmp_yarp_files.csv" append="true">
+ <arg value="/c"/>
+ <arg value="echo"/>
+ <arg value="${yarpfile_short},${sf.spec.publish.networkdrive}\${sf.spec.job.name}\builds\${sf.spec.job.codeline}\${build.id}\logs\analysis\${yarpfile},${build.drive}\output\logs\analysis\${yarpfile}"/>
+ </exec>
+ </sequential>
+ </for>
+
+ <exec executable="perl" dir="${build.drive}" failonerror="false" outputproperty="sf.job.totalyarperrors">
+ <arg value="${sf.common.config.dir}/tools/analysis/parse_yarp_files.pl"/>
+ <arg value="${build.drive}/output/logs/analysis/tmp_yarp_files.csv"/>
+ </exec>
+ <echo message="Total yarp errors: ${sf.job.totalyarperrors}"/>
+
+ <fmpp sourceFile="${sf.common.config.dir}/diamonds/sf-run-analysis.xml.ftl" outputFile="${build.drive}/output/logs/sf-run-analysis.xml">
+ <data expandProperties="yes">
+ ant: antProperties()
+ files: csv(${build.drive}/output/logs/analysis/tmp_yarp_files.csv,{separator:',',headers:[name,path,localpath]})
+ </data>
+ </fmpp>
+
+ <echo message="Extracting whatlog information from *whatlog*_compile.log files"/>
+ <for param="logfile">
+ <path>
+ <fileset dir="${build.log.dir}">
+ <include name="*whatlog*_compile.log"/>
+ </fileset>
+ </path>
+ <sequential>
+ <propertyregex override="yes" property="whatlogfile" input="@{logfile}" regexp=".*[\\|\/].*\.\d+_+(.*)_compile\.log" replace="\1_preprocessed.log"/>
+ <echo message="Preprocessing @{logfile}..."/>
+ <exec executable="perl" dir="${sf.common.config.dir}/tools/raptor" failonerror="false" input="@{logfile}" output="${build.log.dir}/analysis/${whatlogfile}" error="${build.log.dir}/analysis/${build.id}_whatlog.log" append="true">
+ <arg value="${sf.common.config.dir}/tools/raptor/preprocess_log.pl"/>
+ </exec>
+ <echo message="Extracting whatlog info from ${whatlogfile}..."/>
+ <exec executable="perl" dir="${sf.common.config.dir}/tools/raptor" failonerror="false" output="${build.log.dir}/analysis/${build.id}_whatlog.log" append="true">
+ <arg value="${sf.common.config.dir}/tools/raptor/parse.pl"/>
+ <arg value="--releaseable"/>
+ <arg value="--log=${build.log.dir}/analysis/${whatlogfile}"/>
+ <arg value="--basedir=${build.log.dir}/releaseables"/>
+ <arg value="--append"/>
+ </exec>
+ </sequential>
+ </for>
</target>
--- a/common/tools/raptor/preprocess_log.pl Mon Jul 13 11:38:30 2009 +0100
+++ b/common/tools/raptor/preprocess_log.pl Mon Jul 13 17:43:50 2009 +0100
@@ -1,3 +1,4 @@
+#!perl -w
# Copyright (c) 2009 Symbian Foundation Ltd
# This component and the accompanying materials are made available
# under the terms of the License "Eclipse Public License v1.0"
@@ -16,56 +17,49 @@
use Getopt::Long;
-my $infile = '';
-my $outfile = '';
-my $basedir = '';
my $help = 0;
-GetOptions((
- 'in:s' => \$infile,
- 'out:s' => \$outfile,
- 'help!' => \$help
-));
-
-$help = 1 if (!$infile);
+GetOptions(
+ 'help!' => \$help,
+);
if ($help)
{
- print "Preprocess a raptor log, trying to countermeasure a list of known anomalies\n";
- print "Usage: perl preprocess_log.pl --in=INFILE --out=OUTFILE\n";
+ warn <<"EOF";
+Preprocess a raptor log, trying to countermeasure a list of known anomalies
+
+Usage: perl preprocess_log.pl < INFILE > OUTFILE
+EOF
exit(0);
}
-open(INFILE, $infile);
-open(OUTFILE, ">$outfile");
-
-for my $line (<INFILE>)
+while (my $line = <>)
{
- if ($line =~ m,<[^<^>]+>.*&.*</[^<^>]+>,)
+ if ($line =~ m{<[^<^>]+>.*&.*</[^<^>]+>})
{
$line = escape_ampersand($line);
}
- elsif ($line =~ m,<\?xml\s.*encoding=.*\".*\?>,)
+ elsif ($line =~ m{<\?xml\s.*encoding=.*\".*\?>})
{
$line = set_encoding_utf8($line);
}
+ elsif ($line =~ m{<archive.*?[^/]>})
+ {
+ $line = unterminated_archive_tag($line, scalar <>, $.)
+ }
- print OUTFILE $line;
+ print $line;
}
-close(OUTFILE);
-close(INFILE);
-
-
sub escape_ampersand
{
my ($line) = @_;
- print "escape_ampersand\n";
- print "in: $line";
+ warn "escape_ampersand\n";
+ warn "in: $line";
$line =~ s,&,&,g;
- print "out: $line";
+ warn "out: $line";
return $line;
}
@@ -73,11 +67,28 @@
{
my ($line) = @_;
- print "set_encoding_utf8\n";
- print "in: $line";
+ warn "set_encoding_utf8\n";
+ warn "in: $line";
$line =~ s,encoding=".*",encoding="utf-8",;
- print "out: $line";
+ warn "out: $line";
return $line;
-}
\ No newline at end of file
+}
+
+sub unterminated_archive_tag
+{
+ my $line = shift;
+ my $nextLine = shift;
+ my $lineNum = shift;
+
+ if ($nextLine !~ m{(<member>)|(</archive>)})
+ {
+ warn "unterminated_archive_tag\n";
+ warn "in: $line";
+ $line =~ s{>}{/>};
+ warn "out: $line";
+ }
+
+ return $line . $nextLine;
+}