diff -r cf1d34408de3 -r 74890d706f0c bc_tools/update_knownissues.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bc_tools/update_knownissues.pl Mon Apr 12 11:55:43 2010 +0100 @@ -0,0 +1,169 @@ +#!/usr/bin/perl + +# 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Symbian Foundation Ltd - initial contribution. +# Maciej Seroka, maciejs@symbian.org +# +# Description: +# This is a tool for adding BC issues to Known Issues list. +# + +use strict; +use Getopt::Long; +use XML::Simple; +use Tie::File; + +my $hdr_report; +my $lib_report; +my $ki_file; +my $current_report; +my $header_num; +my $n; +my $m; +my $file_name; +my $check_sum; +my $comment = "Issue closed as invalid by the PkO (Not a BC break)."; # This is a default comment that will be added to Known Issues list with each header file. +my $header_found; +my $status; +my $line; +my @lines; +my $help; + +sub usage($); +sub help(); +sub usage_error(); + +my %optmap = ( 'headers-report' => \$hdr_report, + 'libraries-report' => \$lib_report, + 'knownissues-file' => \$ki_file, + 'help' => \$help); + +GetOptions(\%optmap, + 'headers-report=s', + 'libraries-report=s', + 'knownissues-file=s', + 'help!') + or usage_error(); + +if ($help) { + help(); +} + +# --headers-report is mandatory. +usage_error(), unless (defined($hdr_report) || defined($lib_report)); + +# --knownissues-file is mandatory. +usage_error(), unless (defined($ki_file)); + +# Open Known Isses file. +tie @lines, 'Tie::File', $ki_file or die ("Cannot tie file \"$ki_file\". $!\n"); + +if ($hdr_report) { + # Parse the input XML into hashrefs. + print "Parsing " . $hdr_report . "... "; + $current_report = XMLin("./$hdr_report", keeproot => 1, + forcearray => [ 'header', 'baselineversion', 'currentversion', 'timestamp', 'day', 'month', 'year', 'hour', 'minute', 'second', # + 'haversion', 'formatversion', 'cmdlineparms', 'parm', 'pname', 'pvalue', 'knownissuesversion', 'os', 'version', 'buildweek', 'issuelist',# + 'headerfile', 'filename', 'comparefilename', 'status', 'comment', 'issue', 'checksum', 'shortname', 'issueid', 'typeid', 'identityid', # + 'identitydescription', 'typestring', 'cause', 'documentation', 'ignoreinformation', 'linenumber', 'severity', 'scseverity'], keyattr => [] ); + print "complete \n"; + # Get number of header files. + my $header_num = @{$current_report->{'bbcresults'}->{'issuelist'}->[0]->{'headerfile'}}; + print "Number of header files in the report: $header_num \n"; + + $n = 0; + while ($n < $header_num) { + $file_name = $current_report->{'bbcresults'}->{'issuelist'}->[0]->{'headerfile'}->[$n]->{'shortname'}->[0]; + $check_sum = $current_report->{'bbcresults'}->{'issuelist'}->[0]->{'headerfile'}->[$n]->{'checksum'}->[0]; + $m = 0; + $header_found = 0; + $status = 0; + foreach (@lines) { + if (@lines[$m] =~ "\"$file_name\"") { # Mark header file as present in the Known Issues file. + $header_found = 1; + $line = $m; + last; + } + $m++; + } + if ($header_found) { # Ensure there is no duplicate in the Known Issues file. + $m = 0; + foreach (@lines) { + if (@lines[$m] =~ "checksum=\"$check_sum\"") { + $status = 1; # Means OK issue (already known). + print "Duplicate found ($check_sum) for header file: $file_name\n"; + last; + } + $m++; + } + } + if (($header_found) && (!($status))) { # Insert new version of header file. + splice @lines, $line+1, 0, " "; + splice @lines, $line+2, 0, " OK<\/status>"; + splice @lines, $line+3, 0, " $comment<\/comment>"; + splice @lines, $line+4, 0, " <\/version>"; + print "New version ($check_sum) of header file: $file_name added to Known Issues list\n"; + } + if (!($header_found)) { # Insert new header file. + # Find the first occurrence of . - ASSUMPTION: at least one entry exists. + $m = 0; + foreach (@lines) { + if (@lines[$m] =~ ""; + splice @lines, $m+1, 0, " "; + splice @lines, $m+2, 0, " OK<\/status>"; + splice @lines, $m+3, 0, " $comment<\/comment>"; + splice @lines, $m+4, 0, " <\/version>"; + splice @lines, $m+5, 0, " <\/headerfile>"; + print "Header file: $file_name ($check_sum) added to Known Issues list\n"; + } + $n++; + } + print "OK\n"; +} + +if ($lib_report) { + print "Warning: Automatic update of the Known Issues file based on a libraries report is not available in the current version of the script.\n" +} + +untie @lines; + +exit 0; + +sub usage($) +{ + my $error = shift; + my $fh = $error == 0 ? *STDOUT : *STDERR; + print $fh "update_knownissues.pl\n" . + "Specify the headers report or\/and libraries report and the known issues file\n" . + "synopsis:\n" . + " update_knownissues.pl --help\n" . + " update_knownissues.pl [--headers-report=FILENAME1] [--libraries-report=FILENAME2] [--knownissues-file=FILENAME3] \n" . + "options:\n" . + " --help Display this help and exit\n" . + " --headers-report=FILENAME1 FILENAME1 is the name of the filtered headers (sub-)report.\n" . + " --libraries-report=FILENAME2 FILENAME2 is the name of the filtered libraries report. This option is not implemented yet.\n" . + " --knownissues-file=FILENAME3 FILENAME3 is the name of the known issues file which will be updated.\n"; + exit $error; +} + +sub help() +{ + usage(0); +} + +sub usage_error() +{ + usage(1); +}