The following commit has been merged in the master branch:
commit 483b4b12cad29cfe1a94bc817354be6fcada5ed8
Author: Niels Thykier <ni...@thykier.net>
Date:   Wed Jul 13 13:09:18 2011 +0200

    Moved most messages out of Lab::Package and added info method
    
    Lab::Package no longer prints messages itself in its method (with
    the exception of _check).  These messages have been moved to
    frontend/lintian.
    
    Lab::Package now also have an info method to fetch the related
    Lintian::Collect object for the entry.  The Lintian::Processable
    API for info and clear_cache are now thin wrappers to the
    Lab::Package API.

diff --git a/frontend/lintian b/frontend/lintian
index de24546..f29cf8d 100755
--- a/frontend/lintian
+++ b/frontend/lintian
@@ -1043,7 +1043,9 @@ if($action eq 'remove'){
            }
            $TAGS->file_start($pkg_path, $pkg_name, $pkg_ver,
                              $proc->pkg_arch(), $pkg_type);
+           debug_msg(1, "Removing package in lab ...");
            unless($lpkg->delete_lab_entry()){
+               warning("cannot remove entry for $pkg_name: $!");
                $exit_code = 2;
            }
        }
@@ -1521,7 +1523,9 @@ sub unpack_group {
 
                # collect info
                $collmap->select($req);
-               $lpkg->remove_status_file();
+               unless ($lpkg->remove_status_file()) {
+                   warning("cannot remove status file $pkg_name: $!");
+               }
                debug_msg(1, "Collecting info: $coll ...");
                my $script = "$opt{'LINTIAN_ROOT'}/collection/$ci->{'script'}";
                my $cmd = Lintian::Command::Simple->new();
@@ -1570,7 +1574,9 @@ sub unpack_group {
 
            # All successful, make sure to record it so we do not recheck the 
same package
            # in a later run (mostly for archive-wide checks).
-           $lpkg->update_status_file($LINTIAN_VERSION);
+           if ($lpkg->update_status_file($LINTIAN_VERSION) < 1) {
+               warning("could not create status file for package $pkg_name: 
$!");
+           }
        }
     }
     return 1;
@@ -1668,7 +1674,9 @@ sub process_group {
 
        # All successful, make sure to record it so we do not recheck the same 
package
        # in a later run (mostly for archive-wide checks).
-       $lpkg->update_status_file($LINTIAN_VERSION);
+       if ($lpkg->update_status_file($LINTIAN_VERSION) < 1) {
+           warning("could not create status file for package $pkg_name: $!");
+       }
 
     } # end foreach my $proc ($group->get_processable())
 
diff --git a/lib/Lab/Package.pm b/lib/Lab/Package.pm
index 93802d6..7b0aa3b 100644
--- a/lib/Lab/Package.pm
+++ b/lib/Lab/Package.pm
@@ -49,10 +49,12 @@ use base qw(Class::Accessor);
 use strict;
 use warnings;
 
+use Carp qw(croak);
 use File::Spec;
 
 use Util;
 use Lintian::Output qw(:messages); # debug_msg and warning
+use Lintian::Collect;
 use Lintian::Command qw();
 use Lab qw(:constants); # LAB_FORMAT
 
@@ -79,12 +81,13 @@ sub new{
     my ($class, $lab, $pkg_name, $pkg_version, $pkg_type, $pkg_path, 
$base_dir) = @_;
     my $self = {};
     bless $self, $class;
-    fail("$pkg_path does not exist.") unless( -e $pkg_path );
+    croak("$pkg_path does not exist.") unless( -e $pkg_path );
     $self->{pkg_name} = $pkg_name;
     $self->{pkg_version} = $pkg_version;
     $self->{pkg_path} = $pkg_path;
     $self->{pkg_type} = $pkg_type;
     $self->{lab} = $lab;
+    $self->{info} = undef; # load on demand.
     # ask the lab to find the base directory of this package.
     $self->{base_dir} = $base_dir;
     # Figure out our unpack level and such
@@ -124,7 +127,36 @@ Returns the base directory of this package inside the lab.
 
 Lab::Package->mk_ro_accessors(qw(lab pkg_name pkg_version pkg_path pkg_type 
base_dir));
 
-=pod
+=item $lpkg->info()
+
+Returns the L<Lintian::Collect|info> object associated with this entry.
+
+=cut
+
+sub info {
+    my ($self) = @_;
+    my $info;
+    croak 'Cannot load info, extry does not exists' unless $self->entry_exists;
+    $info = $self->{info};
+    if ( ! defined $info ) {
+       $info = Lintian::Collect->new($self->pkg_name, $self->pkg_type, 
$self->base_dir);
+       $self->{info} = $info;
+    }
+    return $info;
+}
+
+
+=item $lpkg->clear_cache
+
+Clears any caches held; this includes discarding the L<Lintian::Collect|info> 
object.
+
+=cut
+
+sub clear_cache {
+    my ($self) = @_;
+    delete $self->{info};
+}
+
 
 =item $lpkg->delete_lab_entry()
 
@@ -137,9 +169,8 @@ sub delete_lab_entry {
     my ($self) = @_;
     my $basedir = $self->{base_dir};
     return 1 if( ! -e $basedir);
-    debug_msg(1, "Removing package in lab ...");
+    $self->clear_cache;
     unless(delete_dir($basedir)) {
-        warning("cannot remove directory $basedir: $!");
         return 0;
     }
     return 1;
@@ -203,7 +234,7 @@ sub create_entry(){
     } elsif ($pkg_type eq 'source'){
        $link = "$base_dir/dsc";
     } else {
-       fail "create_entry cannot handle $pkg_type";
+       croak "create_entry cannot handle $pkg_type";
     }
     unless (symlink($pkg_path, $link)){
        # "undo" the mkdir if the symlink fails.
@@ -222,7 +253,7 @@ sub create_entry(){
            my @t = split(/\s+/o,$fs);
            next if ($t[2] =~ m,/,o);
            symlink("$dir/$t[2]", "$base_dir/$t[2]")
-               or fail("cannot symlink file $t[2]: $!");
+               or croak("cannot symlink file $t[2]: $!");
        }
     }
     return 1;
@@ -288,15 +319,12 @@ sub update_status_file{
     my $fd;
     my $stf = "$self->{base_dir}/.lintian-status";
     # We are not unpacked => no place to put the status file.
-    return 0 if $self->entry_exists();
+    return 0 unless $self->entry_exists();
     $pkg_path = $self->{pkg_path};
     unless( @stat = stat($pkg_path)){
-       warning("cannot stat file $pkg_path: $!",
-               "skipping creation of status file");
        return -1;
     }
     unless(open($fd, '>', $stf)){
-       warning("could not create status file $stf for package 
$self->{pkg_name}: $!");
        return -1;
     }
 
@@ -316,7 +344,6 @@ sub remove_status_file{
     my $stfile = "$self->{base_dir}/.lintian-status";
     return 1 unless( -e $stfile );
     if(!unlink($stfile)){
-       warning("cannot remove status file $stfile: $!");
        return 0;
     }
     return 1;
@@ -391,7 +418,7 @@ sub _check {
            my $pkg_name = $self->{pkg_name};
            my $lab = $self->{lab};
            v_msg("Removing $pkg_name");
-           $self->delete_lab_entry() or die("Could not remove $pkg_name from 
lab.");
+           $self->delete_lab_entry() or croak("Could not remove 
outdated/corrupted $pkg_name entry from lab.");
        }
     }
     return 1;
diff --git a/lib/Lintian/Processable.pm b/lib/Lintian/Processable.pm
index 21ba8a2..3659fb7 100644
--- a/lib/Lintian/Processable.pm
+++ b/lib/Lintian/Processable.pm
@@ -135,11 +135,7 @@ sub info{
         my $lpkg = $self->lab_pkg();
         fail "Need a Lab package before creating a Lintian::Collect\n"
             unless defined $lpkg;
-        # load only if we need it
-        require Lintian::Collect;
-        $info = Lintian::Collect->new($self->pkg_name(), $self->pkg_type(),
-            $lpkg->base_dir());
-        $self->{info} = $info;
+        return $lpkg->info;
     }
     return $info;
 }
@@ -153,7 +149,8 @@ Mostly useful when checking a lot of packages (e.g. on 
lintian.d.o).
 
 sub clear_cache {
     my ($self) = @_;
-    delete $self->{info};
+    my $lpkg = $self->lab_pkg;
+    $lpkg->clear_cache if defined $lpkg;
 }
 
 =item $proc->lab_pkg([$lpkg])

-- 
Debian package checker


-- 
To UNSUBSCRIBE, email to debian-lint-maint-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/e1qgxot-0004fh...@vasks.debian.org

Reply via email to