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

Bug#648777: lintian: Generalize distribution check



Package: lintian
Version: 2.5.3
Severity: wishlist

Dear Maintainer,

I propose a patch to generalize the distribution check, permitting to
easily configure the list of allowed distributions.

The idea here is to add a file under 'data/changelog-file/' with a name
ending in '-dists'.

This file contains regular expressions to test against the distribution
name.

git pull git://git.baby-gnu.net/lintian dad/generalize-distribution-check

I attach the patches for review.

Regards.

From 8cfbd1853607d9e171d9dde2fca4837f3f24c2ed Mon Sep 17 00:00:00 2001
From: Daniel Dehennin <daniel.dehennin@baby-gnu.org>
Date: Mon, 14 Nov 2011 23:57:36 +0100
Subject: [PATCH] Generaliste distribution name check.

This patch allow to create a new data/changelog-file/<something>-dists
file to add new valid distribution regexps.

* checks/changes-file: Build an array of distribution regexp and test
  distribution fiedl against each one.

* data/changelog-file/debian-dists: Define full regexp instead of only
  base distribution.

* data/changelog-file/ubuntu-dists: Ditoo.
---
 checks/changes-file              |   41 ++++++++++++++++++-------------------
 data/changelog-file/debian-dists |   18 ++++++++--------
 data/changelog-file/ubuntu-dists |   16 +++++++-------
 3 files changed, 37 insertions(+), 38 deletions(-)

diff --git a/checks/changes-file b/checks/changes-file
index 5192130..0091860 100644
--- a/checks/changes-file
+++ b/checks/changes-file
@@ -26,12 +26,17 @@ use Util;
 use Lintian::Tags qw(tag);
 use Lintian::Check qw(check_maintainer);
 
-my $DEBIAN_DISTS = Lintian::Data->new ('changelog-file/debian-dists');
-my $UBUNTU_REGEX;
+use Path::Class;
+
+my @DISTRIBUTION_REGEX;
 {
-    my $ubuntu_dists = Lintian::Data->new ('changelog-file/ubuntu-dists');
-    my $reg_str = join('|', $ubuntu_dists->all);
-    $UBUNTU_REGEX = qr/$reg_str/o;
+    my $changelog_dir = dir($ENV{LINTIAN_ROOT}, 'data', 'changelog-file');
+    while (my $filename = $changelog_dir->next()) {
+        next if $filename->is_dir() or $filename !~ m/.*-dists$/;
+        my $distrib_dists = Lintian::Data->new(file('changelog-file', $filename->basename));
+        my $reg_str = join('|', $distrib_dists->all);
+        push @DISTRIBUTION_REGEX, qr/$reg_str/;
+    }
 }
 
 sub run {
@@ -57,22 +62,16 @@ if (!$info->field('description') && $info->field('architecture') ne 'source') {
 if (defined $info->field('distribution')) {
     my @distributions = split /\s+/o, $info->field('distribution');
     for my $distribution (@distributions) {
-        if ($distribution eq 'UNRELEASED') {
-            # ignore
-        } elsif ($info->field('version') =~ m/ubuntu|$UBUNTU_REGEX/o
-            or $distribution =~ m/$UBUNTU_REGEX/o) {
-                if ($distribution !~ m/^(?:$UBUNTU_REGEX)(?:-(?:proposed|updates|backports|security))?$/o ) {
-                    tag 'bad-ubuntu-distribution-in-changes-file',
-                        $distribution;
-                }
-        } elsif (! ($DEBIAN_DISTS->known ($distribution)
-                     or ($distribution =~ /^\w+-backports$/)
-                     or ($distribution =~ /^\w+-proposed-updates$/)
-                     or ($distribution =~ /^\w+-security$/)
-                     or ($distribution =~ /^\w+-volatile$/))
-                ) {
-            # bad distribution entry
-            tag 'bad-distribution-in-changes-file', $distribution;
+        next if ($distribution eq 'UNRELEASED');
+        my $bad = 1;
+        foreach my $dist_regex (@DISTRIBUTION_REGEX) {
+            if ($distribution =~ m/$dist_regex/) {
+                $bad=0;
+                last;
+            }
+        }
+        if ($bad) {
+            tag 'bad-ubuntu-distribution-in-changes-file', $distribution;
         }
     }
 
diff --git a/data/changelog-file/debian-dists b/data/changelog-file/debian-dists
index 589df1c..499b962 100644
--- a/data/changelog-file/debian-dists
+++ b/data/changelog-file/debian-dists
@@ -2,15 +2,15 @@
 # aliases
 
 # Codenames
-lenny
-squeeze
-wheezy
-sid
+lenny(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+squeeze(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+wheezy(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+sid(?:(?:-)(?:backports|proposed-updates|security|volatile))?
 
 # Aliases
-oldstable
-stable
-testing
-unstable
-experimental
+oldstable(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+stable(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+testing(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+unstable(?:(?:-)(?:backports|proposed-updates|security|volatile))?
+experimental(?:(?:-)(?:backports|proposed-updates|security|volatile))?
 
diff --git a/data/changelog-file/ubuntu-dists b/data/changelog-file/ubuntu-dists
index 0948ec9..e1517c9 100644
--- a/data/changelog-file/ubuntu-dists
+++ b/data/changelog-file/ubuntu-dists
@@ -1,11 +1,11 @@
 # A list of Ubuntu distributions, used to suppress some checks for Ubuntu
 # packages and to validate Ubuntu distributions.
 
-dapper
-hardy
-karmic
-lucid
-maverick
-natty
-oneiric
-precise
+dapper(?:-(?:proposed|updates|backports|security))?
+hardy(?:-(?:proposed|updates|backports|security))?
+karmic(?:-(?:proposed|updates|backports|security))?
+lucid(?:-(?:proposed|updates|backports|security))?
+maverick(?:-(?:proposed|updates|backports|security))?
+natty(?:-(?:proposed|updates|backports|security))?
+oneiric(?:-(?:proposed|updates|backports|security))?
+precise(?:-(?:proposed|updates|backports|security))?
-- 
1.7.7.2


-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (90, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 3.0.0-rc5+hati.1 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages lintian depends on:
ii  binutils                       2.21.90.20111025-1
ii  bzip2                          1.0.5-7           
ii  diffstat                       1.54-1            
ii  file                           5.09-2            
ii  gettext                        0.18.1.1-5        
ii  intltool-debian                0.35.0+20060710.1 
ii  libapt-pkg-perl                0.1.25            
ii  libclass-accessor-perl         0.34-1            
ii  libdpkg-perl                   1.16.1.1          
ii  libemail-valid-perl            0.185-1           
ii  libipc-run-perl                0.90-1            
ii  libparse-debianchangelog-perl  1.2.0-1           
ii  libtimedate-perl               1.2000-1          
ii  liburi-perl                    1.59-1            
ii  locales                        2.13-21           
ii  man-db                         2.6.0.2-3         
ii  patchutils                     0.3.2-1           
ii  perl [libdigest-sha-perl]      5.12.4-6          
ii  unzip                          6.0-5             

lintian recommends no packages.

Versions of packages lintian suggests:
ii  binutils-multiarch     <none>               
ii  dpkg-dev               1.16.1.1             
ii  libhtml-parser-perl    3.69-1               
ii  libtext-template-perl  <none>               
ii  man-db                 2.6.0.2-3            
ii  xz-utils               5.1.1alpha+20110809-3

-- no debconf information

-- 
Daniel Dehennin
Récupérer ma clef GPG:
gpg --keyserver pgp.mit.edu --recv-keys 0x6A2540D1

Attachment: pgpGJ37MsqjEN.pgp
Description: PGP signature


Reply to: