]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Log.pm
merge changes from don source
[debbugs.git] / Debbugs / Log.pm
index d36bbe5b96fc429c9213ed81ce925b5017de1288..268958e61a8e95ca3c8e0ca641275ae20e771069 100644 (file)
@@ -35,6 +35,7 @@ BEGIN {
     $EXPORT_TAGS{all} = [@EXPORT_OK];
 }
 
+use Carp;
 
 use Debbugs::Common qw(getbuglocation getbugcomponent);
 use Params::Validate qw(:types validate_with);
@@ -164,11 +165,11 @@ sub new
         ($param{logfh}) = @_;
     }
     else {
-        %param = validate_with(params => @_,
+        %param = validate_with(params => \@_,
                                spec   => {bug_num => {type => SCALAR,
                                                       optional => 1,
                                                      },
-                                          logfh   => {type => SCALAR,
+                                          logfh   => {type => HANDLE,
                                                       optional => 1,
                                                      },
                                           log_name => {type => SCALAR,
@@ -177,7 +178,7 @@ sub new
                                          }
                               );
     }
-    if (grep {exists $param{$_} and defined $param{$_}} qw(bug_num logfh log_name) ne 3) {
+    if (grep({exists $param{$_} and defined $param{$_}} qw(bug_num logfh log_name)) ne 1) {
         croak "Exactly one of bug_num, logfh, or log_name must be passed and must be defined";
     }
 
@@ -193,8 +194,8 @@ sub new
              die "Unable to open bug log $param{log_name} for reading: $!";
     }
     elsif (exists $param{bug_num}) {
-        my $location = getbuglocation($bug,'log');
-        my $bug_log = getbugcomponent($bug,'log',$location);
+        my $location = getbuglocation($param{bug_num},'log');
+        my $bug_log = getbugcomponent($param{bug_num},'log',$location);
         $self->{logfh} = IO::File->new($bug_log, 'r') or
              die "Unable to open bug log $bug_log for reading: $!";
     }
@@ -298,14 +299,36 @@ Takes a .log filehandle as input, and returns an array of all records in
 that file. Throws exceptions using die(), so you may want to wrap this in an
 eval().
 
+Uses exactly the same options as Debbugs::Log::new
+
 =cut
 
-sub read_log_records (*)
+sub read_log_records
 {
-    my $logfh = shift;
+    my %param;
+    if (@_ == 1) {
+        ($param{logfh}) = @_;
+    }
+    else {
+        %param = validate_with(params => \@_,
+                               spec   => {bug_num => {type => SCALAR,
+                                                      optional => 1,
+                                                     },
+                                          logfh   => {type => HANDLE,
+                                                      optional => 1,
+                                                     },
+                                          log_name => {type => SCALAR,
+                                                       optional => 1,
+                                                      },
+                                         }
+                              );
+    }
+    if (grep({exists $param{$_} and defined $param{$_}} qw(bug_num logfh log_name)) ne 1) {
+        croak "Exactly one of bug_num, logfh, or log_name must be passed and must be defined";
+    }
 
     my @records;
-    my $reader = Debbugs::Log->new($logfh);
+    my $reader = Debbugs::Log->new(%param);
     while (defined(my $record = $reader->read_record())) {
        push @records, $record;
     }
@@ -317,6 +340,8 @@ sub read_log_records (*)
 Takes a filehandle and a list of records as input, and prints the .log
 format representation of those records to that filehandle.
 
+=back
+
 =cut
 
 sub write_log_records (*@)
@@ -369,8 +394,6 @@ sub escape_log {
 }
 
 
-=back
-
 =head1 CAVEATS
 
 This module does none of the formatting that bugreport.cgi et al do. It's