This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
speedup t/porting/authors.t
authorDavid Mitchell <davem@iabyn.com>
Thu, 24 Feb 2011 11:38:00 +0000 (11:38 +0000)
committerDavid Mitchell <davem@iabyn.com>
Thu, 24 Feb 2011 13:17:19 +0000 (13:17 +0000)
This reduces it from 7.5s to 2.5s on my debugging build.
This works by doing a minimal parse on the output of git log
that just grabs the Author: field.

Porting/checkAUTHORS.pl

index aeaf6bd..0d9560c 100755 (executable)
@@ -35,17 +35,21 @@ my $map = generate_known_author_map();
 
 read_authors_files($author_file);
 
-parse_commits_from_stdin();
 
 if ($rank) {
+  parse_commits_from_stdin();
   display_ordered(\%patchers);
 } elsif ($ta) {
+  parse_commits_from_stdin();
   display_ordered(\%committers);
 } elsif ($tap) {
+  parse_commits_from_stdin_authors();
   display_test_output(\%patchers, \%authors, \%real_names);
 } elsif ($ack) {
+  parse_commits_from_stdin();
   display_missing_authors(\%patchers, \%authors, \%real_names);
 } elsif ($who) {
+  parse_commits_from_stdin();
   list_authors(\%patchers, \%authors);
 }
 
@@ -105,6 +109,17 @@ sub parse_commits_from_stdin {
 
 }
 
+# just grab authors. Quicker than parse_commits_from_stdin
+
+sub parse_commits_from_stdin_authors {
+    while (<>) {
+        next unless /^Author:\s*(.*)$/;
+       my $author = $1;
+       $author = _raw_address($author);
+       $patchers{$author}++;
+    }
+}
+
 
 sub generate_known_author_map {
     my %map;
@@ -232,9 +247,9 @@ sub display_test_output {
     my $authors    = shift;
     my $real_names = shift;
     my $count = 0;
+    printf "1..%d\n", scalar keys %$patchers;
     foreach ( sort keys %$patchers ) {
-           $count++;
-
+        $count++;
         if ($authors->{$_}) {
             print "ok $count - ".$real_names->{$_} ." $_\n";
         } else {
@@ -242,7 +257,6 @@ sub display_test_output {
         }
 
     }
-    print "1..$count\n";
 }
 
 sub display_missing_authors {