[SCM] Debian package checker branch, master, updated. 2.5.10-159-g7b8db3d
The following commit has been merged in the master branch:
commit 7b8db3d94a54d40b00f74e0ee99ad69d17916fa1
Author: Niels Thykier <niels@thykier.net>
Date: Fri Sep 21 15:54:46 2012 +0200
L::Lab: Add new entries to the index immediately
When a caller requests a new entry, attempt to add it immediately the
the index as a transient entry. This makes it possible to avoid a
call to get_deb_info for entries created via reporting/harness.
If it cannot be added to the index, then re-try when/if the caller
actually creates the entry.
Signed-off-by: Niels Thykier <niels@thykier.net>
diff --git a/lib/Lintian/Lab.pm b/lib/Lintian/Lab.pm
index 450a80c..078bcdb 100644
--- a/lib/Lintian/Lab.pm
+++ b/lib/Lintian/Lab.pm
@@ -149,7 +149,6 @@ sub new {
};
$self->{'_correct_dir'} = 1 unless $dok;
bless $self, $class;
- $self->_init ($dir);
return $self;
}
@@ -281,7 +280,16 @@ sub get_package {
if ($proc) {
my $pkg_src = $proc->pkg_src;
my $dir = $self->_pool_path ($pkg_src, $pkg_type, $pkg_name, $pkg_version, $pkg_arch);
- push @entries, Lintian::Lab::Entry->_new_from_proc ($proc, $self, $dir);
+ my $entry = Lintian::Lab::Entry->_new_from_proc ($proc, $self, $dir);
+ push @entries, $entry;
+ if (not $index->get ($proc)) {
+ # Add the entry to the index
+ # Ignore errors - happens if $proc does not have the extra fields
+ # we need.
+ eval {
+ $self->_new_entry ($entry, $proc);
+ };
+ }
} elsif (defined $pkg_version && (defined $pkg_arch || $pkg_type eq 'source')) {
# We know everything - just do a regular look up
my $dir;
@@ -338,9 +346,7 @@ sub visit_packages {
my ($me, $pkg_name, $pkg_version, $pkg_arch) = @_;
my $pkg_src = $me->{'source'}//$pkg_name;
my $dir = $self->_pool_path ($pkg_src, $pkg_type, $pkg_name, $pkg_version, $pkg_arch);
- my $pkg_src_version = $me->{'source-version'};
- my $lentry = Lintian::Lab::Entry->_new ($self, $pkg_name, $pkg_version, $pkg_arch,
- $pkg_type, undef, $pkg_src, $pkg_src_version, $dir);
+ my $lentry = Lintian::Lab::Entry->new_from_metadata ($pkg_type, $me, $self, $dir);
$visitor->($lentry, $pkg_name, $pkg_version, $pkg_arch);
};
$index->visit_all ($intv);
@@ -820,32 +826,25 @@ sub is_temp {
return $self->{'mode'} eq LAB_MODE_TEMP ? 1 : 0;
}
-# initialize the instance
-#
-# May be overriden by a sub-class.
-#
-# $self->dir may be the empty string if this is a temporary lab.
-sub _init {
- my ($self) = @_;
-}
-
# event - triggered by Lintian::Lab::Entry
sub _entry_removed {
my ($self, $entry) = @_;
- my $pkg_name = $entry->pkg_name;
- my $pkg_type = $entry->pkg_type;
- my $pkg_version = $entry->pkg_version;
- my @keys = ($pkg_name, $pkg_version);
+ my $pkg_type = $entry->pkg_type;
my $pf = $self->_get_lab_index ($pkg_type);
-
- push @keys, $entry->pkg_arch if $pkg_type ne 'source';
-
- $pf->delete (@keys);
+ $pf->delete ($entry);
}
# event - triggered by Lintian::Lab::Entry
sub _entry_created {
my ($self, $entry) = @_;
+ my $pkg_type = $entry->pkg_type;
+ my $pf = $self->_get_lab_index ($pkg_type);
+ $self->_new_entry ($entry) unless $pf->get ($entry);
+ $pf->set_transient_marker (0, $entry);
+}
+
+sub _new_entry {
+ my ($self, $entry, $proc) = @_;
my $pkg_name = $entry->pkg_name;
my $pkg_type = $entry->pkg_type;
my $pkg_version = $entry->pkg_version;
@@ -856,16 +855,21 @@ sub _entry_created {
'file' => $pkg_path,
'version' => $pkg_version,
);
+ my $field = sub {
+ my ($f) = @_;
+ my $v;
+ return $proc->get_field ($f) if $proc;
+ return $entry->info->field ($f, '');
+ };
if (my @stat = stat $pkg_path) {
$ts = $stat[9];
}
$data{'timestamp'} = $ts;
if ($pkg_type eq 'source') {
- my $info = $entry->info;
- my $up = $info->field ('uploaders')//'';
- my $maint = $info->field ('maintainer')//'';
- my $bin = $info->field ('binary')//'';
+ my $up = $field->('uploaders');
+ my $maint = $field->('maintainer');
+ my $bin = $field->('binary');
# Normalize the fields - usually this will be "no-ops", but we
# do check some really warped packages every now and then...
@@ -889,9 +893,8 @@ sub _entry_created {
$data{'architecture'} = $entry->pkg_arch;
$data{'source'} = $pkg_name;
} elsif ($pkg_type eq 'binary' or $pkg_type eq 'udeb') {
- my $info = $entry->info;
my $area = 'main';
- my $s = $info->field ('section')//'';
+ my $s = $field->('section');
if ($s && $s =~ m,\s*([a-zA-Z0-9-_]+)/,o) {
$area = $1;
}
@@ -905,6 +908,7 @@ sub _entry_created {
}
$pf->set (\%data);
+ $pf->set_transient_marker (1, $entry);
}
=back
--
Debian package checker
Reply to: