httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ralf S. Engelschall" <...@engelschall.com>
Subject [STATISTIC] Apache Development
Date Mon, 03 Aug 1998 10:53:52 GMT

Last week two friends asked me how much I've contributed to Apache. I answered
"A lot over the last months". They responded: "Yeah, we know, but how much
total contribution?". Ops, I'd no answer and said "Don't know any numbers".
So we are real hackers, today I've spent an hour and wrote a little Perl
script (appended below) which gathers some statistical information out of the
CHANGES file (give credit to Marc who always complains if we didn't follow its
syntax) and reports it in a nice table format. The result is appended below.

I've also already thought about calculating the amount of source lines which
were changed between each release. This is possible by parsing the "cvs log
-r<rel> -r<next_rel>" output, but for today it's enough, I think. The
statistic is interesting enough...

PS: Should we post it on a regular basis, say once per month?

Greetings,
                                       Ralf S. Engelschall
                                       rse@engelschall.com
                                       www.engelschall.com

 ________________________________________________________________________

 APACHE DEVELOPMENT STATISTIC
 Calculated from CHANGES file as of 08-Aug-1998
 ________________________________________________________________________

 RELEASE STATISTIC

 How much effort was required for each Apache release and
 which developers have provided the major contributions.

 Release Changes Major Contributor         Second Major Contributor
 ------- ------- ------------------------- ------------------------------
 1.3.2        29 Ralf S. Engelschall (17)  Roy T. Fielding (2)      
 1.3.1        74 Ralf S. Engelschall (22)  Dean Gaudet (9)          
 1.3.0        20 Ralf S. Engelschall (8)   Martin Kraemer (2)       
 1.3b7        84 Ralf S. Engelschall (34)  Ben Laurie (7)           
 1.3b6       121 Ralf S. Engelschall (35)  Dean Gaudet (33)         
 1.3b5         3 Dean Gaudet (2)           Ben Laurie (1)           
 1.3b4       103 Dean Gaudet (34)          Marc Slemko (10)         
 1.3b3        55 Dean Gaudet (10)          Martin Kraemer (6)       
 1.3b2        99 Dean Gaudet (42)          Ken Coar (12)            
 1.3a1        50 Dean Gaudet (12)          Ken Coar (6)             
 1.2.6        22 Dean Gaudet (7)           Roy T. Fielding (2)      
 1.2.5        17 Marc Slemko (8)           Dean Gaudet (4)          
 1.2.4         2 Marc Slemko (2)           Roy T. Fielding (1)      
 1.2.3         4 Roy T. Fielding (1)       Lars Eilebrecht (1)      
 1.2.2        18 Dean Gaudet (8)           Roy T. Fielding (3)      
 1.2.1        27 Dean Gaudet (10)          Marc Slemko (8)          
 1.2b11       23 Roy T. Fielding (9)       Dean Gaudet (5)          
 1.2b10        5 Dean Gaudet (3)           Marc Slemko (2)          
 1.2b9        32 Roy T. Fielding (8)       Dean Gaudet (8)          
 1.2b8        47 Dean Gaudet (15)          Roy T. Fielding (10)     
 1.2b7        38 Dean Gaudet (8)           Marc Slemko (7)          
 1.2b6         2 Marc Slemko (1)           -unknown-                
 1.2b5        36 Jim Jagielski (5)         Alexei Kosut (4)         
 1.2b4         8 Jim Jagielski (1)         Marc Slemko (1)          
 1.2b3        21 Randy Terbush (3)         Alexei Kosut (2)         
 1.2b2        18 Ben Laurie (4)            Randy Terbush (3)        
 1.2b1         1 -unknown-                 -unknown-                
 1.1.1         5 Mark J. Cox (1)           Alexei Kosut (1)         
 1.1.0         7 Ben Laurie (4)            Alexei Kosut (3)         
 1.1b4         9 Robert S. Thau (2)        -unknown-                
 1.1b3        14 Ben Laurie (3)            Paul Sutton (1)          
 1.1b2         1 -unknown-                 -unknown-                
 1.1b1         1 -unknown-                 -unknown-                
 1.0.3        13 Rob Hartill (3)           David Robinson (2)       
 1.0.2         7 David Robinson (3)        Cliff Skolnick (1)       
 1.0.1         5 David Robinson (2)        Ben Laurie (2)           
 1.0.0         1 -unknown-                 -unknown-                
 0.8.16       12 David Robinson (8)        Robert S. Thau (1)       
 0.8.15       22 David Robinson (9)        Ben Laurie (5)           
 0.8.14        6 Andrew Wilson (2)         Ben Laurie (2)           
 0.8.13       11 Randy Terbush (2)         Aram W. Mirzadeh (1)     
 0.8.12       12 Robert S. Thau (5)        David Robinson (4)       
 0.8.11       12 Robert S. Thau (5)        Roy T. Fielding (3)      
 0.8.10        2 David Robinson (2)        -unknown-                
 0.8.9        20 Jim Jagielski (3)         David Robinson (3)       
 0.8.8         2 -unknown-                 -unknown-                
 0.8.7         3 David Robinson (2)        -unknown-                
 0.8.6         5 Mark J. Cox (1)           Roy T. Fielding (1)      
 0.8.5        10 Alexei Kosut (2)          Roy T. Fielding (1)      
 0.8.4         6 David Robinson (2)        Andrew Wilson (1)        
 0.8.3         8 David Robinson (2)        Rob Hartill (1)          
 0.8.2        11 Robert S. Thau (3)        Mark J. Cox (3)          
 0.8.1         3 Randy Terbush (1)         -unknown-                
 0.8.0         9 Robert S. Thau (5)        Cliff Skolnick (2)       
 0.6.1         5 Paul Sutton (1)           Rob Hartill (1)          
 0.6.0        11 Robert S. Thau (9)        Paul Sutton (2)          
 0.5.3         2 Cliff Skolnick (2)        -unknown-                
 0.5.2         4 Robert S. Thau (2)        Paul Sutton (1)          
 0.5.1         9 Robert S. Thau (5)        Rob Hartill (1)          
 0.4           1 Robert S. Thau (1)        Rob Hartill (1)          
 0.3           1 David Robinson (1)        Robert S. Thau (1)       
 0.2           1 David Robinson (1)        Robert S. Thau (1)       
 ________________________________________________________________________

 DEVELOPER STATISTIC                   (Sorted by amount of contribution)

 How much total effort was provided by each Apache
 developer since the start of the Apache project.

 Developer            Contributions  Developer            Contributions
 -------------------- -------------  -------------------- -------------
 Dean Gaudet                    220  Paul Sutton                     23
 Ralf S. Engelschall            129  Rob Hartill                     23
 Marc Slemko                     70  Lars Eilebrecht                 19
 Roy T. Fielding                 69  Chuck Murcko                    18
 Ben Laurie                      62  Brian Behlendorf                13
 Ken Coar                        60  Doug MacEachern                 13
 Robert S. Thau                  43  Ben Hyde                        12
 David Robinson                  41  Cliff Skolnick                  10
 Martin Kraemer                  39  Mark J. Cox                      8
 Jim Jagielski                   36  Andrew Wilson                    6
 Randy Terbush                   34  Sameer Parekh                    5
 Alexei Kosut                    27  Aram W. Mirzadeh                 4
 ________________________________________________________________________


And here comes the little script for your own pleasure:

#!/sw/bin/perl
##
##  CHANGES.stat -- calculate some statistic from Apache CHANGES file
##  Copyright (c) 1998 Ralf S. Engelschall, All Rights Reserved. 
##

#   the Apache Group developers
%N = (
   'brian'    => [ 'Brian.*Behlendorf', 'Brian Behlendorf' ],
   'ken'      => [ 'Ken.*Coar', 'Ken Coar' ],
   'mjc'      => [ 'Mark.*Cox', 'Mark J. Cox' ],
   'lars'     => [ 'Lars.*Eile', 'Lars Eilebrecht' ],
   'rse'      => [ 'Ralf.*Engel', 'Ralf S. Engelschall' ],
   'fielding' => [ 'Roy.*Fielding', 'Roy T. Fielding' ],
   'dgaudet'  => [ 'Dean.*Gaudet', 'Dean Gaudet' ],
   'robh'     => [ 'Rob.*Hart', 'Rob Hartill' ],
   'bhyde'    => [ 'Ben.*Hyde', 'Ben Hyde' ],
   'jim'      => [ 'Jim.*Jag', 'Jim Jagielski' ],
   'akosut'   => [ 'Alexei.*Kosut', 'Alexei Kosut' ],
   'martin'   => [ 'Martin.*Kraemer', 'Martin Kraemer' ],
   'ben'      => [ 'Ben.*Laurie', 'Ben Laurie' ],
   'dougm'    => [ 'Doug.*Eachern', 'Doug MacEachern' ],
   'aram'     => [ 'Aram.*Mirz', 'Aram W. Mirzadeh' ],
   'sameer'   => [ 'Sameer.*Pa', 'Sameer Parekh' ],
   'marc'     => [ 'Marc.*Slem', 'Marc Slemko' ],
   'cliff'    => [ 'Cliff.*Sk', 'Cliff Skolnick' ],
   'paul'     => [ 'Paul.*Sutton', 'Paul Sutton' ],
   'randy'    => [ 'Randy.Te', 'Randy Terbush' ],
   'dirk'     => [ 'Dirk-Willem.*', 'Dirk-Willem van Gulik' ],
   'chuck'    => [ 'Chuck.*Mu', 'Chuck Murcko' ],
   'david'    => [ 'David.*Robi', 'David Robinson' ],
   'rst'      => [ 'Robert.*Thau', 'Robert S. Thau' ],
   'awilson'  => [ 'Andrew.*Wil', 'Andrew Wilson' ],
);

#  initialize variables holding the information
%D = ();
@V = ();
%C = ();
%VC = ();
$v = '';

#  parse CHANGES file
open(FP, "<CHANGES") || die;
while (<FP>) {
    if (m|^Changes\s+with.+?(\d[\d.ab]+).*|) {
        $v = $1;
        $C{$v} = 0;
        push(@V, $v);
        $VC{$v} = {};
        next;
    }
    if (m|^\s*\*\)\s*|) {
        $C{$v}++;
    }
    foreach $n (keys(%N)) {
        $e = $N{$n};
        $p = $e->[0];
        if (m|$p|) {
            $D{$n}++;
            $VC{$v}->{$n}++;
        }
    }
}
close(FP);

#   create report
$date = `date '+%m-%b-%Y'`;
$date =~ s|\n$||;
print " ________________________________________________________________________\n";
print "\n";
print " APACHE DEVELOPMENT STATISTIC\n";
print " Calculated from CHANGES file as of $date\n";
print " ________________________________________________________________________\n";
print "\n";
print " RELEASE STATISTIC\n";
print "\n";
print " How much effort was required for each Apache release and\n";
print " which developers have provided the major contributions.\n";
print "\n";
print " Release Changes Major Contributor         Second Major Contributor\n";
print " ------- ------- ------------------------- ------------------------------\n";
foreach $v (@V) {
    $e = $VC{$v};
    @mc = sort({ $e->{$b} <=> $e->{$a} } keys(%{$e}));
    $mc = $N{$mc[0]}->[1]." (".$e->{$mc[0]}.")";
    $mc = '-unknown-' if ($N{$mc[0]}->[1] eq ''); 
    $oc = $N{$mc[1]}->[1]." (".$e->{$mc[1]}.")";
    $oc = '-unknown-' if ($N{$mc[1]}->[1] eq ''); 
    printf(" %-7s %7d %-25s %-25s\n", $v, $C{$v}, $mc, $oc);
}
print " ________________________________________________________________________\n";
print "\n";
print " DEVELOPER STATISTIC                   (Sorted by amount of contribution)\n";
print "\n";
print " How much total effort was provided by each Apache\n";
print " developer since the start of the Apache project.\n";
print "\n";
print " Developer            Contributions  Developer            Contributions\n";
print " -------------------- -------------  -------------------- -------------\n";
@O = ();
foreach $d (sort({ $D{$b} <=> $D{$a} } keys(%D))) {
    $e = $N{$d};
    $n = $e->[1];
    push(@O, sprintf(" %-20s %13d", $n, $D{$d}));
}
$n = int($#O / 2) + 1;
for ($i = 0; $i < $n; $i++) {
    print $O[$i] . ' ' . $O[$n+$i] . "\n";
}
print " ________________________________________________________________________\n";
print "\n";


Mime
View raw message