This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Change get_pod_metadata() to take a callback to report consistency errors.
authorNicholas Clark <nick@ccl4.org>
Sun, 18 Dec 2011 09:35:09 +0000 (10:35 +0100)
committerNicholas Clark <nick@ccl4.org>
Mon, 19 Dec 2011 12:55:19 +0000 (13:55 +0100)
Using the callback to report errors instead of passing the 'inconsistent'
arrayref back in the state means that get_pod_metadata() doesn't even need
to calculate this information if it's not going to be used.

Porting/pod_lib.pl
Porting/pod_rules.pl
pod/buildtoc

index 3676953..b9a9ef7 100644 (file)
@@ -50,6 +50,8 @@ sub is_duplicate_pod {
 sub get_pod_metadata {
     # Do we expect to find generated pods on disk?
     my $permit_missing_generated = shift;
+    # Do they want a consistency report?
+    my $callback = shift;
     my %BuildFiles;
 
     foreach my $path (@_) {
@@ -146,6 +148,8 @@ sub get_pod_metadata {
     }
     close $master or my_die "close pod.lst: $!";
 
+    return \%state unless $callback;
+
     # Sanity cross check
 
     my (%disk_pods, %manipods, %manireadmes, %perlpods);
@@ -245,7 +249,7 @@ sub get_pod_metadata {
                     or $not_yet_there{$i};
         }
     }
-    $state{inconsistent} = \@inconsistent;
+    &$callback(@inconsistent);
     return \%state;
 }
 
index acea2d2..d23f86f 100644 (file)
@@ -62,23 +62,20 @@ if ($Verbose) {
     print "I will be building $_\n" foreach keys %Build;
 }
 
+my $test = 1;
 # For testing, generated files must be present and we're rebuilding nothing.
 # For normal rebuilding, generated files may not be present, and we mute
 # warnings about inconsistencies in any file we're about to rebuild.
-my $state = get_pod_metadata($Test ? () : (1, values %Build));
-
-my $test = 1;
-if ($Test) {
-    printf "1..%d\n", 1 + scalar keys %Build;
-    if (@{$state->{inconsistent}}) {
-        print "not ok $test\n";
-        die @{$state->{inconsistent}};
-    }
-    print "ok $test\n";
-}
-else {
-    warn @{$state->{inconsistent}} if @{$state->{inconsistent}};
-}
+my $state = $Test
+    ? get_pod_metadata(0, sub {
+                           printf "1..%d\n", 1 + scalar keys %Build;
+                           if (@_) {
+                               print "not ok $test\n";
+                               die @_;
+                           }
+                           print "ok $test\n";
+                       })
+    : get_pod_metadata(1, sub { warn @_ if @_ }, values %Build);
 
 sub generate_perlpod {
     my @output;
index edf77ed..839fbb1 100644 (file)
@@ -21,9 +21,7 @@ BEGIN {
 die "$0: Usage: $0 [--quiet]\n"
     unless GetOptions (quiet => \$Quiet) && !@ARGV;
 
-my $state = get_pod_metadata(0, 'pod/perltoc.pod');
-
-warn @{$state->{inconsistent}} if @{$state->{inconsistent}};
+my $state = get_pod_metadata(0, sub { warn @_ if @_ }, 'pod/perltoc.pod');
 
 # Find all the modules
 my @modpods;