5
use Getopt::Long qw(:config no_ignore_case bundling);
13
our $opt_proprietary = 0;
14
our $opt_quarter = "";
15
Getopt::Long::Configure ("bundling", "no_ignore_case");
22
) or pod2usage(-verbose => 0, -exitstatus => 0);
24
version_and_exit() if $opt_version;
28
print "Copyright (C) 2009 Bryce W. Harrington <bryce\@bryceharrington.org>\n";
29
print "This program is free software; you can redistribute it and/or\n";
30
print "modify it under the same terms as Perl itself.\n";
34
# TODO: Determine date range for quarter if specified
35
my $quarter_start = 20090401;
36
my $quarter_end = 20090631;
39
my $firstdate = undef;
40
foreach my $file (<*.txt>) {
41
# Skip unless within the quarter we care about
43
$date =~ s/^xorg-packagebugs-//;
47
# TODO: Parse start and end based on opt_quarter
48
if ($date < $quarter_start or $date > $quarter_end) {
60
foreach my $line (<FILE>) {
62
my ($pkg, $total) = split(/\s+/, $line);
64
$totals{$pkg}->{$date} = $total;
70
printf("%-8s ", "Date");
76
if ($opt_proprietary) {
77
# Sort with proprietary stuff on the bottom
78
my @closed = reverse qw(linux-restricted-modules-2.6.22 linux-restricted-modules-2.6.24
79
fglrx-installer nvidia-settings
80
nvidia-graphics-drivers-96 nvidia-graphics-drivers-173
81
nvidia-graphics-drivers-177 nvidia-graphics-drivers-180);
83
foreach my $driver (@closed) {
84
delete $open{$driver};
86
@packages = reverse sort { $open{$a}->{$firstdate} <=> $open{$b}->{$firstdate} } keys %open;
87
my $num = $lastpkgnum - @closed + 1;
88
$totals{'Other-FOSS'} = $totals{$packages[$num]};
89
$packages[$num] = 'Other-FOSS';
90
foreach my $driver (@closed) {
92
$packages[$num] = $driver;
96
# Sort by number of bugs
97
@packages = reverse sort { $totals{$a}->{$firstdate} <=> $totals{$b}->{$firstdate} } keys %totals;
98
$totals{'Remainder'} = $totals{$packages[$lastpkgnum+1]};
99
$packages[$lastpkgnum+1] = 'Remainder';
103
# Print out top N pkg names
104
foreach my $pkg (@packages[1..$lastpkgnum+1]) {
105
my $display_name = $pkg;
106
$display_name =~ s/://g;
107
$display_name =~ s/linux-restricted-modules/lrm/;
108
$display_name =~ s/xserver-xorg-(input|video)//;
109
$display_name =~ s/nvidia-graphics-drivers/nvidia/;
110
$display_name =~ s/xorg-server/xserver/;
111
$display_name =~ s/fglrx-installer/-fglrx/;
112
$display_name =~ s/xkeyboard-config/xkbd-cfg/;
113
printf("%10s ", $display_name);
116
my @dates = sort keys %dates;
118
# Print line of zeros so gnuplot can display areas
119
printf("\n%-8s ", $dates[0]);
120
foreach my $pkg (@packages[0..$lastpkgnum]) {
121
printf("%10.0f ", 0);
124
# foreach date, print data for each pkg
125
foreach my $date (@dates) {
126
printf("\n%-8s ", $date);
128
# Calculate remainder
129
if ($opt_proprietary) {
130
my $remainder = $totals{'Total'}->{$date};
131
foreach my $pkg (@packages[0..$lastpkgnum+1]) {
132
if ($pkg ne 'Total') {
133
$remainder -= $totals{$pkg}->{$date};
136
$totals{'Other-FOSS'}->{$date} = $remainder;
139
my $sum = $totals{'Total'}->{$date};
140
foreach my $pkg (@packages[0..$lastpkgnum]) {
141
if ($pkg ne 'Total') {
142
$sum -= $totals{$pkg}->{$date};
144
printf("%10.0f ", $sum);
148
# Print line of zeros so gnuplot can display areas
149
printf("\n%-8s ", $dates[$#dates]);
150
foreach my $pkg (@packages[0..$lastpkgnum]) {
151
printf("%10.0f ", 0);