[SCM] Debian package checker branch, master, updated. 2.5.6-45-g3502d02
The following commit has been merged in the master branch:
commit c2ca9f20e88f84c7209234ff65da098cf7bba50b
Author: Niels Thykier <niels@thykier.net>
Date: Fri Mar 16 17:27:22 2012 +0100
Implement vendor specific data files
Move debian data files to vendors/debian/ftp-master-auto-reject/data and
replace the old data/ with a symlink to the new location.
Data files can now contain special instructions (@delete and
@include-parent) to delete an entry and include a parent data file
(respectively).
Signed-off-by: Niels Thykier <niels@thykier.net>
diff --git a/data b/data
new file mode 120000
index 0000000..e43ca2c
--- /dev/null
+++ b/data
@@ -0,0 +1 @@
+vendors/debian/ftp-master-auto-reject/data/
\ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index 721754a..ab992a4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -66,6 +66,9 @@ lintian (2.5.7) UNRELEASED; urgency=low
+ [NT] Replace all usage of objdump with readelf.
(Closes: #614034)
+ * data:
+ + [NT] Move to vendors/debian/ftp-master-auto-reject and replace
+ it with a symlink.
* data/binaries/embedded-libs:
+ [NT] New file.
+ [NT] Add libav libraries. Thanks to Andres Mejia for the
@@ -89,6 +92,8 @@ lintian (2.5.7) UNRELEASED; urgency=low
+ [NT] Lazily load data files.
+ [NT] Allow pre-process sub to alter existing value for a key
by passing the previous value as third argument.
+ + [NT] Allow vendor specific data files. They will be loaded
+ from LINTIAN_ROOT/vendors/$profile/data.
* lib/Lintian/Output{,/*}.pm:
+ [NT] Replace non-printables with "?" in output.
* lib/Lintian/Profile.pm:
diff --git a/lib/Lintian/Data.pm b/lib/Lintian/Data.pm
index 2d101d9..c97c1e9 100644
--- a/lib/Lintian/Data.pm
+++ b/lib/Lintian/Data.pm
@@ -59,31 +59,13 @@ sub new {
sub _load_data {
my ($self, $type, $separator, $code) = @_;
unless (exists $data{$type}) {
- my $fd = $self->_open_data_file ($type);
- local ($_, $.);
- while (<$fd>) {
- chomp;
- s/^\s+//;
- next if /^\#/;
- next if $_ eq '';
- my ($key, $val);
- if (defined $separator) {
- ($key, $val) = split(/$separator/, $_, 2);
- if ($code) {
- my $pval = $data{$type}{$key};
- $val = $code->($key, $val, $pval);
- next if ! defined $val && defined $pval;
- unless (defined $val) {
- next if defined $pval;
- croak "undefined value for $key (type: $type)";
- }
- }
- } else {
- ($key, $val) = ($_ => 1);
- }
- $data{$type}{$key} = $val;
- }
+ my $vendors = $self->_get_vendor_names;
+ my $dataset = {};
+ my ($fd, $vno) = $self->_open_data_file ($type, $vendors, 0);
+ $self->_parse_file ($type, $fd, $dataset, $separator, $code,
+ $vendors, $vno);
close $fd;
+ $data{$type} = $dataset;
}
$self->{'data'} = $data{$type};
}
@@ -91,21 +73,97 @@ sub new {
{
my $profile;
+ # Set vendor profile
sub set_vendor {
my (undef, $vendor) = @_;
$profile = $vendor;
}
- sub _open_data_file {
- my ($self, $type) = @_;
- my $dir = $ENV{LINTIAN_ROOT} . '/data';
+ # Returns a listref of profile names
+ sub _get_vendor_names {
+ my ($self) = @_;
croak "No vendor given" unless $profile;
- open my $fd, '<', "$dir/$type"
- or croak "unknown data type $type";
- return $fd;
+ my @vendors = ();
+ push @vendors, reverse @{ $profile->profile_list };
+ return \@vendors;
+ }
+
+ # Open the (next) data file
+ #
+ # $self->_open_data_file ($type, $vendors, $start)
+ # - $type is the data file (e.g. "common/architectures")
+ # - $vendors is the listref return by _get_vendor_names
+ # - $start is an index into $vendors (the first $vendor to try)
+ sub _open_data_file {
+ my ($self, $type, $vendors, $start) = @_;
+ my $root = $profile->root;
+ my $file;
+ my @basedirs = ("$ENV{'HOME'}/.lintian/vendors", "$root/vendors", '/etc/lintian/vendors');
+ my $cur = $start;
+ # Do not allow user or system settings to affect the test results.
+ @basedirs = ("$root/vendors") if $ENV{'LINTIAN_INTERNAL_TESTSUITE'};
+ OUTER: for (; $cur < scalar @$vendors ; $cur++) {
+ foreach my $basedir (@basedirs) {
+ if ( -f "$basedir/$vendors->[$cur]/data/$type" ) {
+ $file = "$basedir/$vendors->[$cur]/data/$type";
+ last OUTER;
+ }
+ }
+ }
+ if (not defined $file) {
+ croak "Unknown data file: $type" unless $start;
+ croak "No parent data file for $vendors->[$start]";
+ }
+ open my $fd, '<', "$file"
+ or croak "$file: $!";
+ return ($fd, $cur);
}
}
+sub _parse_file {
+ my ($self, $type, $fd, $dataset, $separator, $code, $vendors, $vno) = @_;
+ my $filename = $vendors->[$vno] . '/' . $type;
+ local ($_, $.);
+ while (<$fd>) {
+ chomp;
+ s/^\s++//;
+ next if /^\#/ or $_ eq '';
+ if (s/^\@//) {
+ my ($op, $value) = split m/\s++/;
+ if ($op eq 'delete') {
+ croak "Missing key after \@delete in $filename at line $."
+ unless defined $value && length $value;
+ delete $dataset->{$value};
+ } elsif ($op eq 'include-parent') {
+ my ($pfd, $pvo) = $self->_open_data_file ($type, $vendors,
+ $vno +1);
+ $self->_parse_file ($type, $pfd, $dataset, $separator,
+ $code, $vendors, $pvo);
+ close $pfd;
+ } else {
+ croak "Unknown operation \@$op in $filename at line $.";
+ }
+ next;
+ }
+
+ my ($key, $val);
+ if (defined $separator) {
+ ($key, $val) = split(/$separator/, $_, 2);
+ if ($code) {
+ my $pval = $dataset->{$key};
+ $val = $code->($key, $val, $pval) if $code;
+ next if ! defined $val && defined $pval;
+ unless (defined $val) {
+ next if defined $pval;
+ croak "undefined value for $key (type: $type)";
+ }
+ }
+ } else {
+ ($key, $val) = ($_ => 1);
+ }
+ $dataset->{$key} = $val;
+ }
+}
sub _force_promise {
my ($self) = @_;
diff --git a/private/generate-profiles.pl b/private/generate-profiles.pl
index 21cd557..094f210 100755
--- a/private/generate-profiles.pl
+++ b/private/generate-profiles.pl
@@ -23,7 +23,6 @@ BEGIN {
}
use lib "$ENV{LINTIAN_ROOT}/lib";
-use Lintian::Data;
use Util;
my $root = $ENV{LINTIAN_ROOT};
@@ -39,8 +38,8 @@ foreach my $check (<$root/checks/*.desc>){
push @checks, $cname;
}
-@fatal = Lintian::Data->new('output/ftp-master-fatal')->all;
-@nonfatal = Lintian::Data->new('output/ftp-master-nonfatal')->all;
+@fatal = read_tags ('vendors/debian/ftp-master-auto-reject/data/output/ftp-master-fatal');
+@nonfatal = read_tags ('vendors/debian/ftp-master-auto-reject/data/output/ftp-master-nonfatal');
foreach my $dir (@dirs) {
mkdir $dir or fail "mkdir $dir: $!" unless -d $dir;
@@ -107,6 +106,21 @@ sub format_field {
print $fd "\n";
}
+sub read_tags {
+ my ($file) = @_;
+ my @tags = ();
+ open my $fd, '<', $file or die "$file: $!";
+ while (<$fd>) {
+ chomp;
+ s/^\s++//;
+ next if /^#/ or $_ eq '';
+ s/\s++$//;
+ push @tags, $_;
+ }
+ close $fd;
+ return @tags;
+}
+
# Local Variables:
# indent-tabs-mode: nil
# cperl-indent-level: 4
diff --git a/data/README b/vendors/debian/ftp-master-auto-reject/data/README
similarity index 100%
rename from data/README
rename to vendors/debian/ftp-master-auto-reject/data/README
diff --git a/data/binaries/embedded-libs b/vendors/debian/ftp-master-auto-reject/data/binaries/embedded-libs
similarity index 100%
rename from data/binaries/embedded-libs
rename to vendors/debian/ftp-master-auto-reject/data/binaries/embedded-libs
diff --git a/data/binaries/multiarch-dirs b/vendors/debian/ftp-master-auto-reject/data/binaries/multiarch-dirs
similarity index 100%
rename from data/binaries/multiarch-dirs
rename to vendors/debian/ftp-master-auto-reject/data/binaries/multiarch-dirs
diff --git a/data/changelog-file/debian-dists b/vendors/debian/ftp-master-auto-reject/data/changelog-file/debian-dists
similarity index 100%
rename from data/changelog-file/debian-dists
rename to vendors/debian/ftp-master-auto-reject/data/changelog-file/debian-dists
diff --git a/data/changelog-file/ubuntu-dists b/vendors/debian/ftp-master-auto-reject/data/changelog-file/ubuntu-dists
similarity index 100%
rename from data/changelog-file/ubuntu-dists
rename to vendors/debian/ftp-master-auto-reject/data/changelog-file/ubuntu-dists
diff --git a/data/common/architectures b/vendors/debian/ftp-master-auto-reject/data/common/architectures
similarity index 100%
rename from data/common/architectures
rename to vendors/debian/ftp-master-auto-reject/data/common/architectures
diff --git a/data/common/priorities b/vendors/debian/ftp-master-auto-reject/data/common/priorities
similarity index 100%
rename from data/common/priorities
rename to vendors/debian/ftp-master-auto-reject/data/common/priorities
diff --git a/data/common/source-fields b/vendors/debian/ftp-master-auto-reject/data/common/source-fields
similarity index 100%
rename from data/common/source-fields
rename to vendors/debian/ftp-master-auto-reject/data/common/source-fields
diff --git a/data/control-files/deb-permissions b/vendors/debian/ftp-master-auto-reject/data/control-files/deb-permissions
similarity index 100%
rename from data/control-files/deb-permissions
rename to vendors/debian/ftp-master-auto-reject/data/control-files/deb-permissions
diff --git a/data/control-files/udeb-permissions b/vendors/debian/ftp-master-auto-reject/data/control-files/udeb-permissions
similarity index 100%
rename from data/control-files/udeb-permissions
rename to vendors/debian/ftp-master-auto-reject/data/control-files/udeb-permissions
diff --git a/data/cruft/autotools b/vendors/debian/ftp-master-auto-reject/data/cruft/autotools
similarity index 100%
rename from data/cruft/autotools
rename to vendors/debian/ftp-master-auto-reject/data/cruft/autotools
diff --git a/data/debhelper/dh_addons b/vendors/debian/ftp-master-auto-reject/data/debhelper/dh_addons
similarity index 100%
rename from data/debhelper/dh_addons
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/dh_addons
diff --git a/data/debhelper/dh_addons-manual b/vendors/debian/ftp-master-auto-reject/data/debhelper/dh_addons-manual
similarity index 100%
rename from data/debhelper/dh_addons-manual
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/dh_addons-manual
diff --git a/data/debhelper/dh_commands b/vendors/debian/ftp-master-auto-reject/data/debhelper/dh_commands
similarity index 100%
rename from data/debhelper/dh_commands
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/dh_commands
diff --git a/data/debhelper/dh_commands-manual b/vendors/debian/ftp-master-auto-reject/data/debhelper/dh_commands-manual
similarity index 100%
rename from data/debhelper/dh_commands-manual
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/dh_commands-manual
diff --git a/data/debhelper/dh_packages b/vendors/debian/ftp-master-auto-reject/data/debhelper/dh_packages
similarity index 100%
rename from data/debhelper/dh_packages
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/dh_packages
diff --git a/data/debhelper/filename-config-files b/vendors/debian/ftp-master-auto-reject/data/debhelper/filename-config-files
similarity index 100%
rename from data/debhelper/filename-config-files
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/filename-config-files
diff --git a/data/debhelper/maint_commands b/vendors/debian/ftp-master-auto-reject/data/debhelper/maint_commands
similarity index 100%
rename from data/debhelper/maint_commands
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/maint_commands
diff --git a/data/debhelper/miscDepends_commands b/vendors/debian/ftp-master-auto-reject/data/debhelper/miscDepends_commands
similarity index 100%
rename from data/debhelper/miscDepends_commands
rename to vendors/debian/ftp-master-auto-reject/data/debhelper/miscDepends_commands
diff --git a/data/debian-source-dir/known-files b/vendors/debian/ftp-master-auto-reject/data/debian-source-dir/known-files
similarity index 100%
rename from data/debian-source-dir/known-files
rename to vendors/debian/ftp-master-auto-reject/data/debian-source-dir/known-files
diff --git a/data/doc-base/sections b/vendors/debian/ftp-master-auto-reject/data/doc-base/sections
similarity index 100%
rename from data/doc-base/sections
rename to vendors/debian/ftp-master-auto-reject/data/doc-base/sections
diff --git a/data/fields/archive-sections b/vendors/debian/ftp-master-auto-reject/data/fields/archive-sections
similarity index 100%
rename from data/fields/archive-sections
rename to vendors/debian/ftp-master-auto-reject/data/fields/archive-sections
diff --git a/data/fields/binary-fields b/vendors/debian/ftp-master-auto-reject/data/fields/binary-fields
similarity index 100%
rename from data/fields/binary-fields
rename to vendors/debian/ftp-master-auto-reject/data/fields/binary-fields
diff --git a/data/fields/bounce-addresses b/vendors/debian/ftp-master-auto-reject/data/fields/bounce-addresses
similarity index 100%
rename from data/fields/bounce-addresses
rename to vendors/debian/ftp-master-auto-reject/data/fields/bounce-addresses
diff --git a/data/fields/build-essential-packages b/vendors/debian/ftp-master-auto-reject/data/fields/build-essential-packages
similarity index 100%
rename from data/fields/build-essential-packages
rename to vendors/debian/ftp-master-auto-reject/data/fields/build-essential-packages
diff --git a/data/fields/essential b/vendors/debian/ftp-master-auto-reject/data/fields/essential
similarity index 100%
rename from data/fields/essential
rename to vendors/debian/ftp-master-auto-reject/data/fields/essential
diff --git a/data/fields/metapackages b/vendors/debian/ftp-master-auto-reject/data/fields/metapackages
similarity index 100%
rename from data/fields/metapackages
rename to vendors/debian/ftp-master-auto-reject/data/fields/metapackages
diff --git a/data/fields/no-build-depends b/vendors/debian/ftp-master-auto-reject/data/fields/no-build-depends
similarity index 100%
rename from data/fields/no-build-depends
rename to vendors/debian/ftp-master-auto-reject/data/fields/no-build-depends
diff --git a/data/fields/obsolete-packages b/vendors/debian/ftp-master-auto-reject/data/fields/obsolete-packages
similarity index 100%
rename from data/fields/obsolete-packages
rename to vendors/debian/ftp-master-auto-reject/data/fields/obsolete-packages
diff --git a/data/fields/perl-provides b/vendors/debian/ftp-master-auto-reject/data/fields/perl-provides
similarity index 100%
rename from data/fields/perl-provides
rename to vendors/debian/ftp-master-auto-reject/data/fields/perl-provides
diff --git a/data/fields/udeb-fields b/vendors/debian/ftp-master-auto-reject/data/fields/udeb-fields
similarity index 100%
rename from data/fields/udeb-fields
rename to vendors/debian/ftp-master-auto-reject/data/fields/udeb-fields
diff --git a/data/fields/virtual-packages b/vendors/debian/ftp-master-auto-reject/data/fields/virtual-packages
similarity index 100%
rename from data/fields/virtual-packages
rename to vendors/debian/ftp-master-auto-reject/data/fields/virtual-packages
diff --git a/data/files/fonts b/vendors/debian/ftp-master-auto-reject/data/files/fonts
similarity index 100%
rename from data/files/fonts
rename to vendors/debian/ftp-master-auto-reject/data/files/fonts
diff --git a/data/files/incorrect-locale-codes b/vendors/debian/ftp-master-auto-reject/data/files/incorrect-locale-codes
similarity index 100%
rename from data/files/incorrect-locale-codes
rename to vendors/debian/ftp-master-auto-reject/data/files/incorrect-locale-codes
diff --git a/data/files/locale-codes b/vendors/debian/ftp-master-auto-reject/data/files/locale-codes
similarity index 100%
rename from data/files/locale-codes
rename to vendors/debian/ftp-master-auto-reject/data/files/locale-codes
diff --git a/data/files/standard-files b/vendors/debian/ftp-master-auto-reject/data/files/standard-files
similarity index 100%
rename from data/files/standard-files
rename to vendors/debian/ftp-master-auto-reject/data/files/standard-files
diff --git a/data/files/triplets b/vendors/debian/ftp-master-auto-reject/data/files/triplets
similarity index 100%
rename from data/files/triplets
rename to vendors/debian/ftp-master-auto-reject/data/files/triplets
diff --git a/data/init.d/virtual_facilities b/vendors/debian/ftp-master-auto-reject/data/init.d/virtual_facilities
similarity index 100%
rename from data/init.d/virtual_facilities
rename to vendors/debian/ftp-master-auto-reject/data/init.d/virtual_facilities
diff --git a/data/output/ftp-master-fatal b/vendors/debian/ftp-master-auto-reject/data/output/ftp-master-fatal
similarity index 100%
rename from data/output/ftp-master-fatal
rename to vendors/debian/ftp-master-auto-reject/data/output/ftp-master-fatal
diff --git a/data/output/ftp-master-nonfatal b/vendors/debian/ftp-master-auto-reject/data/output/ftp-master-nonfatal
similarity index 100%
rename from data/output/ftp-master-nonfatal
rename to vendors/debian/ftp-master-auto-reject/data/output/ftp-master-nonfatal
diff --git a/data/output/manual-references b/vendors/debian/ftp-master-auto-reject/data/output/manual-references
similarity index 100%
rename from data/output/manual-references
rename to vendors/debian/ftp-master-auto-reject/data/output/manual-references
diff --git a/data/rules/deprecated-makefiles b/vendors/debian/ftp-master-auto-reject/data/rules/deprecated-makefiles
similarity index 100%
rename from data/rules/deprecated-makefiles
rename to vendors/debian/ftp-master-auto-reject/data/rules/deprecated-makefiles
diff --git a/data/rules/known-makefiles b/vendors/debian/ftp-master-auto-reject/data/rules/known-makefiles
similarity index 100%
rename from data/rules/known-makefiles
rename to vendors/debian/ftp-master-auto-reject/data/rules/known-makefiles
diff --git a/data/scripts/interpreters b/vendors/debian/ftp-master-auto-reject/data/scripts/interpreters
similarity index 100%
rename from data/scripts/interpreters
rename to vendors/debian/ftp-master-auto-reject/data/scripts/interpreters
diff --git a/data/shared-libs/hwcap-dirs b/vendors/debian/ftp-master-auto-reject/data/shared-libs/hwcap-dirs
similarity index 100%
rename from data/shared-libs/hwcap-dirs
rename to vendors/debian/ftp-master-auto-reject/data/shared-libs/hwcap-dirs
diff --git a/data/shared-libs/ldconfig-dirs b/vendors/debian/ftp-master-auto-reject/data/shared-libs/ldconfig-dirs
similarity index 100%
rename from data/shared-libs/ldconfig-dirs
rename to vendors/debian/ftp-master-auto-reject/data/shared-libs/ldconfig-dirs
diff --git a/data/spelling/corrections b/vendors/debian/ftp-master-auto-reject/data/spelling/corrections
similarity index 100%
rename from data/spelling/corrections
rename to vendors/debian/ftp-master-auto-reject/data/spelling/corrections
diff --git a/data/spelling/corrections-case b/vendors/debian/ftp-master-auto-reject/data/spelling/corrections-case
similarity index 100%
rename from data/spelling/corrections-case
rename to vendors/debian/ftp-master-auto-reject/data/spelling/corrections-case
diff --git a/data/spelling/corrections-multiword b/vendors/debian/ftp-master-auto-reject/data/spelling/corrections-multiword
similarity index 100%
rename from data/spelling/corrections-multiword
rename to vendors/debian/ftp-master-auto-reject/data/spelling/corrections-multiword
diff --git a/data/standards-version/release-dates b/vendors/debian/ftp-master-auto-reject/data/standards-version/release-dates
similarity index 100%
rename from data/standards-version/release-dates
rename to vendors/debian/ftp-master-auto-reject/data/standards-version/release-dates
--
Debian package checker
Reply to: