17 use strict; |
17 use strict; |
18 use XML::Parser; |
18 use XML::Parser; |
19 use Getopt::Long; |
19 use Getopt::Long; |
20 |
20 |
21 my $sourcesCsv; # sources.csv file for this build |
21 my $sourcesCsv; # sources.csv file for this build |
22 my $sysDef; # system definition file for this build |
22 my @sysDef; # system definition files to look in for this build |
23 my $previousPdkLabel; # hg tag to compare against |
23 my $previousPdkLabel; # hg tag to compare against |
24 my $prevSourcesCsv; # sources.csv file for baseline build, if different to this build |
24 my $prevSourcesCsv; # sources.csv file for baseline build, if different to this build |
25 my $prevSysDef; # system definition file for baseline build, if different to this build |
25 my $prevSysDef; # system definition file for baseline build, if different to this build |
26 |
26 |
27 GetOptions(( |
27 GetOptions(( |
28 'sources=s' => \$sourcesCsv, |
28 'sources=s' => \$sourcesCsv, |
29 'sysdef=s' => \$sysDef, |
29 'sysdef=s' => \@sysDef, |
30 'baseline=s' => \$previousPdkLabel, |
30 'baseline=s' => \$previousPdkLabel, |
31 'prevSources=s' => \$prevSourcesCsv, |
31 'prevSources=s' => \$prevSourcesCsv, |
32 'prevSysdef=s' => \$prevSysDef, |
32 'prevSysdef=s' => \$prevSysDef, |
33 )); |
33 )); |
34 |
34 |
35 if (!$sourcesCsv || !$sysDef || !$previousPdkLabel) |
35 if (!$sourcesCsv || !@sysDef || !$previousPdkLabel) |
36 { |
36 { |
37 warn "Necessary argument(s) not supplied\n\n"; |
37 warn "Necessary argument(s) not supplied\n\n"; |
38 usage(); |
38 usage(); |
39 exit (1); |
39 exit (1); |
40 } |
40 } |
45 usage(); |
45 usage(); |
46 exit (1); |
46 exit (1); |
47 } |
47 } |
48 |
48 |
49 $prevSourcesCsv ||= $sourcesCsv; |
49 $prevSourcesCsv ||= $sourcesCsv; |
50 $prevSysDef ||= $sysDef; |
|
51 |
50 |
52 my $packages = { current => {}, previous => {} }; |
51 my $packages = { current => {}, previous => {} }; |
53 |
52 |
54 # Load current manifest |
53 # Load current manifest |
55 open(my $manifest, "<", $sourcesCsv) or die; |
54 open(my $manifest, "<", $sourcesCsv) or die "Unable to open $sourcesCsv"; |
56 my @manifest = <$manifest>; |
55 my @manifest = <$manifest>; |
57 close $manifest; |
56 close $manifest; |
58 populate($packages->{current}, @manifest); |
57 populate($packages->{current}, @manifest); |
59 |
58 |
60 # Load prev manifest |
59 # Load prev manifest |
61 @manifest = `hg cat -r $previousPdkLabel $prevSourcesCsv`; |
60 @manifest = `hg cat -r $previousPdkLabel $prevSourcesCsv`; |
62 populate($packages->{previous}, @manifest); |
61 populate($packages->{previous}, @manifest); |
63 |
62 |
64 my $xml = XML::Parser->new(Style => "Objects") or die; |
63 my $xml = XML::Parser->new(Style => "Objects") or die; |
65 # Load current names from current system definition |
64 foreach my $sysDef (@sysDef) |
66 eval { populateNames($packages->{current}, $xml->parsefile($sysDef) ) }; |
65 { |
67 # Load previous names from previous system definition |
66 # Load current names from current system definition (fails silently) |
68 eval { populateNames($packages->{previous}, $xml->parsestring(scalar `hg cat -r $previousPdkLabel $prevSysDef`) ) }; |
67 eval { populateNames($packages->{current}, $xml->parsefile($sysDef) ) }; |
|
68 # Load previous names from current system definition at earlier revision (fails silently) |
|
69 eval { populateNames($packages->{previous}, $xml->parsestring(scalar `hg cat -r $previousPdkLabel $sysDef 2> nul:`) ) }; |
|
70 } |
|
71 |
|
72 # Load previous names from previous system definition, if supplied |
|
73 populateNames($packages->{previous}, $xml->parsestring(scalar `hg cat -r $previousPdkLabel $prevSysDef`) ) if $prevSysDef; |
69 |
74 |
70 # Output release note info... |
75 # Output release note info... |
71 |
76 |
72 my $currPackageCount = scalar keys %{$packages->{current}}; |
77 my $currPackageCount = scalar keys %{$packages->{current}}; |
73 my $prevPackageCount = scalar keys %{$packages->{previous}}; |
78 my $prevPackageCount = scalar keys %{$packages->{previous}}; |
200 my $itemsUnderThisElement = shift; |
205 my $itemsUnderThisElement = shift; |
201 foreach (@$itemsUnderThisElement) |
206 foreach (@$itemsUnderThisElement) |
202 { |
207 { |
203 if (ref $_) |
208 if (ref $_) |
204 { |
209 { |
205 if (ref $_ eq "main::block" || ref $_ eq "main::package") |
210 if (ref $_ eq "main::block" || ref $_ eq "main::package" || ref $_ eq "main::module") |
206 { |
211 { |
207 if (exists $packages->{$_->{name}}) |
212 if (exists $packages->{$_->{name}} && exists $_->{"long-name"}) |
208 { |
213 { |
209 $packages->{$_->{name}}->{name} = $_->{"long-name"}; |
214 $packages->{$_->{name}}->{name} = $_->{"long-name"}; |
210 $packages->{$_->{name}}->{sortKey} = lc $_->{"long-name"}; |
215 $packages->{$_->{name}}->{sortKey} = lc $_->{"long-name"}; |
211 } |
216 } |
212 } |
217 } |