[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: