The following commit has been merged in the master branch:
commit e7ca33ae6b9635dbf34417c271799b739e822c61
Author: Russ Allbery <[email protected]>
Date:   Sat Feb 7 17:07:50 2009 -0800

    Use Lintian::Relation and new collect methods in checks/fields
    
    * checks/fields{,.desc}:
      + [RA] Use Lintian::Relation and the new Lintian::Collect support for
        retrieving parsed relationship fields.

diff --git a/checks/fields b/checks/fields
index ec04302..707afbe 100644
--- a/checks/fields
+++ b/checks/fields
@@ -27,12 +27,13 @@ use strict;
 
 use lib "$ENV{'LINTIAN_ROOT'}/checks/";
 use common_data;
-use Dep;
 use Tags;
 use Util;
 
-use Lintian::Data;
+use Lintian::Data ();
 use Lintian::Check qw(check_maintainer);
+use Lintian::Relation ();
+use Lintian::Relation::Version qw(versions_compare);
 
 # The allowed Python dependencies currently.  This is the list of alternatives
 # that, either directly or through transitive dependencies that can be relied
@@ -453,7 +454,6 @@ if (($type eq "binary") || ($type eq 'udeb')) {
                        unfold($field, \$data);
                        $data =~ s/^\s*(.+?)\s*$/$1/;
                        $fields{$field} = $data;
-                       $parsed{$field} = Dep::parse ($data);
 
                        my (@seen_libstdcs, @seen_tcls, @seen_tclxs, @seen_tks, 
@seen_tkxs, @seen_libpngs);
 
@@ -581,10 +581,11 @@ if (($type eq "binary") || ($type eq 'udeb')) {
        for my $conflict (qw/conflicts breaks/) {
                next unless $fields{$conflict};
                for my $field (qw(depends pre-depends recommends suggests)) {
-                       next unless $parsed{$field};
+                       next unless $info->field($field);
+                       my $relation = $info->relation($field);
                        for my $package (split /\s*,\s*/, $fields{$conflict}) {
                                tag "conflicts-with-dependency", $field, 
$package
-                                   if Dep::implies($parsed{$field}, 
Dep::parse($package));
+                                   if $relation->implies($package);
                        }
                }
        }
@@ -743,23 +744,18 @@ if ($type eq "source") {
        }
 
        # Check for duplicates.
-       my $build_all = $depend{'build-depends'} || '';
-       $build_all .= ', ' if $depend{'build-depends'} && 
$depend{'build-depends-indep'};
-       $build_all .= $depend{'build-depends-indep'} || '';
-       my @dups = Dep::get_dups(Dep::parse($build_all));
+       my $build_all = $info->relation('build-depends-all');
+       my @dups = $build_all->duplicates;
        for my $dup (@dups) {
                tag "package-has-a-duplicate-build-relation", join (', ', 
@$dup);
        }
 
        # Make sure build dependencies and conflicts are consistent.
        my %parsed;
-       $parsed{'build-depends'} = Dep::parse($depend{'build-depends'} || '');
-       $parsed{'build-depends-indep'} = 
Dep::parse($depend{'build-depends-indep'} || '');
        for ($depend{'build-conflicts'}, $depend{'build-conflicts-indep'}) {
                next unless $_;
                for my $conflict (split /\s*,\s*/, $_) {
-                       if (Dep::implies($parsed{'build-depends'}, 
Dep::parse($conflict))
-                           || Dep::implies($parsed{'build-depends-indep'}, 
Dep::parse($conflict))) {
+                       if ($build_all->implies($conflict)) {
                                tag "build-conflicts-with-build-dependency", 
$conflict;
                        }
                }
@@ -768,11 +764,12 @@ if ($type eq "source") {
        # Make sure that all the required build dependencies are there.  Don't
        # issue missing-build-dependency errors for debhelper, since there's
        # another test that does that and it would just be a duplicate.
+       my $build_regular = $info->relation('build-depends');
+       my $build_indep   = $info->relation('build-depends-indep');
        for my $package (keys %needed_clean) {
-               my $dep = Dep::parse($package);
                my $tag = $needed_clean{$package} || 'missing-build-dependency';
-               unless (Dep::implies($parsed{'build-depends'}, $dep)) {
-                       if (Dep::implies($parsed{'build-depends-indep'}, $dep)) 
{
+               unless ($build_regular->implies($package)) {
+                       if ($build_indep->implies($package)) {
                                tag 
"clean-should-be-satisfied-by-build-depends", $package;
                        } else {
                                if ($tag eq 'missing-build-dependency') {
@@ -783,10 +780,7 @@ if ($type eq "source") {
                        }
                }
        }
-       my $deps = $depend{'build-depends'} || '';
-       $deps .= ', ' if $deps && $depend{'build-depends-indep'};
-       $deps .= $depend{'build-depends-indep'} || '';
-       $deps = Dep::parse_noarch($deps);
+       my $noarch = $info->relation_noarch('build-depends-all');
        for my $package (keys %needed) {
                my $tag = $needed{$package} || 'missing-build-dependency';
 
@@ -796,7 +790,7 @@ if ($type eq "source") {
                        next if -f 'debfiles/pycomat';
                        next if defined $info->field('python-version');
                }
-               unless (Dep::implies($deps, Dep::parse($package))) {
+               unless ($noarch->implies($package)) {
                        if ($tag eq 'missing-build-dependency') {
                                tag $tag, $package;
                        } else {
@@ -821,14 +815,14 @@ if ($type eq "source") {
        if (defined $info->field('build-depends') && $arch_dep_packages == 0 && 
!$bypass_needed_clean) {
                my $build_depends = $info->field('build-depends');
                my @packages = split /\s*,\s*/, $build_depends;
-               my @allowed = map { s/[\(\[][^\)\]]+[\)\]]//g; s/\|/,/g; $_ } 
keys (%needed_clean), keys (%allowed_clean);
-               my $dep = Dep::parse (join (',', @allowed));
+               my @allowed = map { s/\([^\)]+\)//g; s/\|/,/g; $_ } keys 
(%needed_clean), keys (%allowed_clean);
+               my $dep = Lintian::Relation->new_noarch(join(',', @allowed));
                foreach my $pkg (@packages) {
                        my $name = $pkg;
                        $name =~ s/[\[\(][^\)\]]+[\)\]]//g;
                        $name =~ s/\s+$//;
                        $name =~ s/\s+/ /g;
-                       unless (Dep::implies($dep, Dep::parse($name))) {
+                       unless ($dep->implies($name)) {
                                tag "build-depends-without-arch-dep", $name;
                        }
                }
@@ -983,7 +977,7 @@ sub perl_core_has_version {
        return 0 if !defined $core_version;
        my @version = _valid_version($version);
        return 0 if !...@version;
-       return Dep::get_version_cmp($core_version, $op, $version);
+       return versions_compare($core_version, $op, $version);
 }
 
 sub unfold {
diff --git a/debian/changelog b/debian/changelog
index dd27a82..f45bd84 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -46,6 +46,8 @@ lintian (2.2.3) UNRELEASED; urgency=low
     + [RA] Warn of ".dfsg" versions and recommend "+dfsg" for version
       sorting reasons.  Thanks, Paul Wise.  (Closes: #514203)
     + [RA] Warn of the "dsfg" typo in versions.  Thanks, Paul Wise.
+    + [RA] Use Lintian::Relation and the new Lintian::Collect support for
+      retrieving parsed relationship fields.
   * checks/files:
     + [ADB] Don't report duplicate-font-file for udebs.  Patch by Raphael
       Geissert.  (Closes: #514095)

-- 
Debian package checker


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to