author | Simon Howkins <simonh@symbian.org> |
Tue, 10 Nov 2009 16:52:27 +0000 | |
changeset 752 | 1f07674ec99f |
parent 665 | ddca63d8e13c |
child 753 | 5069de517698 |
permissions | -rw-r--r-- |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
1 |
#!perl -w |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
2 |
# |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
3 |
# Copyright (c) 2009 Symbian Foundation Ltd |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
4 |
# This component and the accompanying materials are made available |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
5 |
# under the terms of the License "Eclipse Public License v1.0" |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
6 |
# which accompanies this distribution, and is available |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
7 |
# at the URL "http://www.eclipse.org/legal/epl-v10.html". |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
8 |
# |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
9 |
# Initial Contributors: |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
10 |
# Symbian Foundation Ltd - initial contribution. |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
11 |
# |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
12 |
# Contributors: |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
13 |
# |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
14 |
# Description: |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
15 |
# Generate the BRAG-compatible XML summary of the Raptor log from the CSV output of the raptor parser |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
16 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
17 |
use strict; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
18 |
|
665
ddca63d8e13c
Add use lib statement to look for Text-CSV in local lib folder
Dario Sestito <darios@symbian.org>
parents:
605
diff
changeset
|
19 |
use FindBin; |
ddca63d8e13c
Add use lib statement to look for Text-CSV in local lib folder
Dario Sestito <darios@symbian.org>
parents:
605
diff
changeset
|
20 |
use lib "$FindBin::Bin/../lib"; |
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
21 |
use lib "$FindBin::Bin"; |
665
ddca63d8e13c
Add use lib statement to look for Text-CSV in local lib folder
Dario Sestito <darios@symbian.org>
parents:
605
diff
changeset
|
22 |
|
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
23 |
use Getopt::Long; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
24 |
use Text::CSV; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
25 |
|
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
26 |
use ToBrag; |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
27 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
28 |
my $raptorSummary; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
29 |
my $help = 0; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
30 |
GetOptions(( |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
31 |
'raptorsummary=s' => \$raptorSummary, |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
32 |
'help!' => \$help |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
33 |
)); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
34 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
35 |
$help = 1 if (!$raptorSummary); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
36 |
if ($help) |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
37 |
{ |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
38 |
print "Generate an XML summary of the Raptor build from a summary.csv file\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
39 |
print "Usage: perl summarize.pl --raptorsummary=CSV\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
40 |
exit(0); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
41 |
} |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
42 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
43 |
# Start to build structure to be output as XML (same format as XML::Parser would create for us) |
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
44 |
my $buildStatus = ToBrag::createBuildStatus(); |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
45 |
# Obtain a phase object |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
46 |
my $buildPhase = ToBrag::ensurePhase($buildStatus, "Build"); |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
47 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
48 |
# READ SUMMARY.CSV FILE |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
49 |
open(CSV, $raptorSummary); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
50 |
my $csv = Text::CSV->new(); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
51 |
while (my $line = <CSV>) |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
52 |
{ |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
53 |
chomp $line; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
54 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
55 |
unless ($csv->parse($line)) |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
56 |
{ |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
57 |
my $err = $csv->error_input(); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
58 |
warn "Failed to parse $raptorSummary line line $. as CSV '$line': $err Skipping\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
59 |
next; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
60 |
} |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
61 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
62 |
my @keys = qw{category subcategory severity config component phase recipe file linenum}; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
63 |
my @values = $csv->fields(); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
64 |
unless (scalar @keys == scalar @keys) |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
65 |
{ |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
66 |
warn "WARNING: line does not match expected format at $raptorSummary line $.. Skipping\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
67 |
next; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
68 |
} |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
69 |
|
556
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
70 |
# Populate the hash using a hash slice |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
71 |
my $failure = {}; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
72 |
@{$failure}{@keys} = @values; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
73 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
74 |
if (!$failure->{category}) |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
75 |
{ |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
76 |
warn "WARNING: summary line without a category at $raptorSummary line $.. Skipping\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
77 |
next; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
78 |
} |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
79 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
80 |
if ($failure->{category} =~ m{^recipe_failure$}i and !$failure->{component}) |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
81 |
{ |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
82 |
warn "WARNING: recipe_failure with component field empty at $raptorSummary line $.. Skipping\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
83 |
next; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
84 |
} |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
85 |
$failure->{subcategory} ||= 'uncategorized'; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
86 |
$failure->{severity} ||= 'unknown'; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
87 |
|
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
88 |
# Obtain a matching step |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
89 |
my $step = ToBrag::ensureStep($buildPhase, $failure->{config}); |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
90 |
# Also create empty <failures> tags with severities in a sensible order |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
91 |
ToBrag::ensureFailureSet($step, "critical"); |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
92 |
ToBrag::ensureFailureSet($step, "major"); |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
93 |
ToBrag::ensureFailureSet($step, "minor"); |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
94 |
|
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
95 |
# Obtain a set of failures which matches this severity |
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
96 |
my $failureSet = ToBrag::ensureFailureSet($step, $failure->{severity}); |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
97 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
98 |
# Now create the failure itself, and add it to this failure set |
556
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
99 |
my $failureItem = bless { |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
100 |
# href => "", |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
101 |
Kids => [ bless { Text => $failure->{subcategory} }, "Characters" ] |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
102 |
}, "failure"; |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
103 |
if ($failure->{component}) |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
104 |
{ |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
105 |
$failure->{component} =~ s{^(/sf/.*?/.*?)/.*$}{$1}; |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
106 |
$failureItem->{package} = $failure->{component}; |
fa2414b24dc4
Added package attribute (when failure is package specific).
Simon Howkins <simonh@symbian.org>
parents:
547
diff
changeset
|
107 |
} |
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
108 |
push @{$failureSet->{Kids}}, $failureItem, $ToBrag::xmlNewline; |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
109 |
} |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
110 |
close(CSV); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
111 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
112 |
# Print XML |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
113 |
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
114 |
print "<?xml-stylesheet type='text/xsl' href='brag.xsl'?>\n"; |
752
1f07674ec99f
Moved common code to shared module.
Simon Howkins <simonh@symbian.org>
parents:
665
diff
changeset
|
115 |
ToBrag::printTree($buildStatus->[0]); |
547
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
116 |
print "\n"; |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
117 |
|
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
118 |
exit(0); |
19f9d5fc6406
Added really basic failure extraction and BRAG calculation to build.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
119 |