47 "v|verbose" => \$verbose, |
47 "v|verbose" => \$verbose, |
48 )) |
48 )) |
49 { |
49 { |
50 Usage("Invalid argument"); |
50 Usage("Invalid argument"); |
51 } |
51 } |
52 |
52 |
|
53 my $current_package = ""; |
53 my %files; |
54 my %files; |
54 my %errors_by_file; |
55 my %errors_by_file; |
55 my %error_count_by_file; |
56 my %error_count_by_file; |
56 my %errors; |
57 my %errors; |
57 my %message_ids; |
58 my %message_ids; |
58 my %files_by_message_id; |
59 my %files_by_message_id; |
59 my %messages_by_id; |
60 my %messages_by_id; |
60 my %unique_message_counts; |
61 my %unique_message_counts; |
61 my %all_message_counts; |
62 my %all_message_counts; |
62 my $next_message_id = 1; |
63 my $next_message_id = 1; |
|
64 my %packages_by_file; |
|
65 my %package_count_by_file; |
|
66 |
63 |
67 |
64 my $line; |
68 my $line; |
65 while ($line = <>) |
69 while ($line = <>) |
66 { |
70 { |
|
71 # </pre>os/usb, usb_CompilerCompatibility.005, SF_builds/usb/builds/CompilerCompatibility/usb_CompilerCompatibility.005/html/os_usb_failures.html |
|
72 |
|
73 if ($line =~/\/html\/([^\/]+)_failures.html/) |
|
74 { |
|
75 $current_package = $1; |
|
76 $current_package =~ s/_/\//; |
|
77 next; |
|
78 } |
|
79 |
67 # M:/epoc32/include/elements/nm_interfaces.h:255: warning: dereferencing type-punned pointer will break strict-aliasing rules |
80 # M:/epoc32/include/elements/nm_interfaces.h:255: warning: dereferencing type-punned pointer will break strict-aliasing rules |
68 # M:/epoc32/include/f32file.h:2169: warning: invalid access to non-static data member 'TVolFormatParam::iUId' of NULL object |
81 # M:/epoc32/include/f32file.h:2169: warning: invalid access to non-static data member 'TVolFormatParam::iUId' of NULL object |
69 # M:/epoc32/include/f32file.h:2169: warning: (perhaps the 'offsetof' macro was used incorrectly) |
82 # M:/epoc32/include/f32file.h:2169: warning: (perhaps the 'offsetof' macro was used incorrectly) |
70 # M:/epoc32/include/comms-infras/ss_nodemessages.h:301: error: wrong number of template arguments (3, should be 4) |
83 # M:/epoc32/include/comms-infras/ss_nodemessages.h:301: error: wrong number of template arguments (3, should be 4) |
71 # M:/epoc32/include/elements/nm_signatures.h:496: error: provided for 'template<class TSIGNATURE, int PAYLOADATTRIBOFFSET, class TATTRIBUTECREATIONPOLICY, int PAYLOADBUFFERMAXLEN> class Messages::TSignatureWithPolymorphicPayloadMetaType' |
84 # M:/epoc32/include/elements/nm_signatures.h:496: error: provided for 'template<class TSIGNATURE, int PAYLOADATTRIBOFFSET, class TATTRIBUTECREATIONPOLICY, int PAYLOADBUFFERMAXLEN> class Messages::TSignatureWithPolymorphicPayloadMetaType' |
110 { |
123 { |
111 $message_id = $message_ids{$generic_message}; |
124 $message_id = $message_ids{$generic_message}; |
112 $all_message_counts{$message_id} += 1; |
125 $all_message_counts{$message_id} += 1; |
113 } |
126 } |
114 my $instance = sprintf("%s:%d: %s-#%d", $filename, $lineno, $messagetype, $message_id); |
127 my $instance = sprintf("%s:%d: %s-#%d", $filename, $lineno, $messagetype, $message_id); |
|
128 |
|
129 my $packages = $packages_by_file{$filename}; |
|
130 if (!defined $packages) |
|
131 { |
|
132 $packages_by_file{$filename} = "\t$current_package\t"; |
|
133 $package_count_by_file{$filename} = 1; |
|
134 } |
|
135 else |
|
136 { |
|
137 if (index($packages,"\t$current_package\t") < 0) |
|
138 { |
|
139 $packages_by_file{$filename} .= "\t$current_package\t"; |
|
140 $package_count_by_file{$filename} += 1; |
|
141 } |
|
142 } |
115 |
143 |
116 if (defined $files{$instance}) |
144 if (defined $files{$instance}) |
117 { |
145 { |
118 # already seen this one |
146 # already seen this one |
119 next; |
147 next; |
120 } |
148 } |
121 else |
149 |
122 { |
150 if (!defined $unique_message_counts{$message_id}) |
123 if (!defined $unique_message_counts{$message_id}) |
151 { |
124 { |
152 $unique_message_counts{$message_id} = 1; |
125 $unique_message_counts{$message_id} = 1; |
153 } |
126 } |
154 else |
127 else |
155 { |
128 { |
156 $unique_message_counts{$message_id} += 1; |
129 $unique_message_counts{$message_id} += 1; |
157 } |
130 } |
158 $files{$instance} = $message; |
131 $files{$instance} = $message; |
159 |
132 |
160 if (!defined $files_by_message_id{$message_id}) |
133 if (!defined $files_by_message_id{$message_id}) |
161 { |
134 { |
162 $files_by_message_id{$message_id} = $filename; |
135 $files_by_message_id{$message_id} = $filename; |
163 } |
136 } |
164 else |
137 else |
165 { |
138 { |
166 $files_by_message_id{$message_id} .= "\n$filename"; |
139 $files_by_message_id{$message_id} .= "\n$filename"; |
167 } |
140 } |
168 |
141 |
169 my $error = sprintf "%-5d: %s: %s", $lineno, $messagetype, $message; |
142 my $error = sprintf "%-5d: %s: %s", $lineno, $messagetype, $message; |
170 if (!defined $errors_by_file{$filename}) |
143 if (!defined $errors_by_file{$filename}) |
171 { |
144 { |
172 $errors_by_file{$filename} = $error; |
145 $errors_by_file{$filename} = $error; |
173 $error_count_by_file{$filename} = 1; |
146 $error_count_by_file{$filename} = 1; |
174 } |
147 } |
175 else |
148 else |
176 { |
149 { |
177 $errors_by_file{$filename} .= "\n$error"; |
150 $errors_by_file{$filename} .= "\n$error"; |
178 $error_count_by_file{$filename} += 1; |
151 $error_count_by_file{$filename} += 1; |
179 } |
152 } |
180 |
153 } |
|
154 next; |
181 next; |
155 } |
182 } |
156 } |
183 } |
157 |
184 |
158 # clean up the file lists |
185 # clean up the file lists |
182 printf "%-6d\t%s\n", $filecount_by_message_id{$id}, $messages_by_id{$id}; |
209 printf "%-6d\t%s\n", $filecount_by_message_id{$id}, $messages_by_id{$id}; |
183 if ($verbose) |
210 if ($verbose) |
184 { |
211 { |
185 print "\t", $files_by_message_id{$id}; |
212 print "\t", $files_by_message_id{$id}; |
186 } |
213 } |
|
214 } |
|
215 |
|
216 print "\n\n====Packages impacted (if > 1)\n"; |
|
217 foreach my $file ( sort {$package_count_by_file{$b} <=> $package_count_by_file{$a}} keys %package_count_by_file) |
|
218 { |
|
219 if ($package_count_by_file{$file} < 2) |
|
220 { |
|
221 next; |
|
222 } |
|
223 my ($empty,@packages) = split /\t+/, $packages_by_file{$file}; |
|
224 printf "%-6d\t%s\n\t(%s)\n",$package_count_by_file{$file}, $file, join(", ", @packages); |
187 } |
225 } |
188 |
226 |
189 print "\n\n====Affected files by package\n"; |
227 print "\n\n====Affected files by package\n"; |
190 my $current_package = ""; |
228 my $current_package = ""; |
191 my @currentfiles; |
229 my @currentfiles; |