The following commit has been merged in the master branch:
commit f014760b1e971622ca78b59ea0912fca66057c91
Author: Russ Allbery <[email protected]>
Date:   Tue Dec 30 13:28:25 2008 -0800

    Clean up /usr/share/doc checks and avoid global $info
    
    * checks/copyright-file{,.desc}:
      + [RA] Clean up checks of a symlinked /usr/share/doc directory and
        avoid making package info global.

diff --git a/checks/copyright-file b/checks/copyright-file
index 571dcd8..9389031 100644
--- a/checks/copyright-file
+++ b/checks/copyright-file
@@ -20,6 +20,10 @@
 
 package Lintian::copyright_file;
 use strict;
+
+use lib "$ENV{'LINTIAN_ROOT'}/checks/";
+use common_data;
+
 use Dep;
 use Spelling;
 use Tags;
@@ -27,23 +31,17 @@ use Util;
 
 use Encode qw(decode);
 
-# Used in depends_on()
-my $info;
-
 sub run {
 
 my $pkg = shift;
 my $type = shift;
-$info = shift;
+my $info = shift;
 
 my $ppkg = quotemeta($pkg);
 
 my $found = 0;
 my $linked = 0;
 
-use lib "$ENV{'LINTIAN_ROOT'}/checks/";
-use common_data;
-
 # Read package contents...
 foreach (sort keys %{$info->index}) {
     my $index_info = $info->index->{$_};
@@ -86,27 +84,23 @@ foreach (sort keys %{$info->index}) {
            last;
        }
 
-       # link might point to a subdirectory of another /usr/share/doc
-       # directory
+       # The symlink may point to a subdirectory of another /usr/share/doc
+       # directory.  This is allowed if this package depends on link and both
+       # packages come from the same source package.
+       #
+       # Policy requires that packages be built from the same source if
+       # they're going to do this, which by my (rra's) reading means that we
+       # should have a strict version dependency.  However, in practice the
+       # copyright file doesn't change a lot and strict version dependencies
+       # cause other problems (such as with arch: any / arch: all package
+       # combinations and binNMUs).
+       #
+       # We therefore just require the dependency for now and don't worry
+       # about the version number.
        $link =~ s,/.*,,;
-
-       # this case is allowed, if this package depends on link
-       # and both packages come from the same source package
-
-       if (not defined $info->field('version')) {
-           fail("Can't open fields/version: $!");
-       } else {
-           my $our_version = $info->field('version');
-
-           # depend on $link pkg?
-           if ((not depends_on($link, $our_version)) &&
-                not (exists($known_essential{$link}) &&
-                defined($known_essential{$link}))) {
-               # no, it does not.
-
-               tag "usr-share-doc-symlink-without-dependency", "$link";
-               last;
-           }
+       if (not depends_on($info, $link)) {
+           tag 'usr-share-doc-symlink-without-dependency', $link;
+           last;
        }
 
        # We can only check if both packages come from the same source
@@ -285,7 +279,6 @@ if ($gpl || m,/usr/share/common-licenses/GPL,) {
        if (defined $info->field('pre-depends')) {
            push @depends, split (/\s*,\s*/, scalar 
$info->field('pre-depends'));
        }
-       close DEP;
        if (grep { /^libssl[0-9.]+(\s|\z)/ && !/\|/ } @depends) {
            tag 'possible-gpl-code-linked-with-openssl';
        }
@@ -296,22 +289,17 @@ if ($gpl || m,/usr/share/common-licenses/GPL,) {
 
 # -----------------------------------
 
-# returns true, if $foo depends on $bar
+# Returns true if the package whose information is in $info depends $package
+# or if $package is essential.
 sub depends_on {
-    my ($package, $version) = @_;
-
-    my ($deps, $predeps) = ("", "");
-
-    if (defined $info->field('depends')) {
-       $deps = $info->field('depends');
-    }
-
-    if (defined $info->field('pre-depends')) {
-       $predeps = $info->field('pre-depends');
+    my ($info, $package) = @_;
+    return 1 if $known_essential{$package};
+    my $deps = $info->field('pre-depends') || '';
+    if ($info->field('depends')) {
+       $deps .= ', ' if $deps;
+       $deps .= $info->field('depends');
     }
     return 1 if Dep::implies(Dep::parse($deps), Dep::parse($package));
-    return 1 if Dep::implies(Dep::parse($predeps), Dep::parse($package));
-
     return 0;
 }
 
diff --git a/debian/changelog b/debian/changelog
index 5ed297c..a57321f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -20,6 +20,8 @@ lintian (2.1.4) UNRELEASED; urgency=low
     + [RA] Warn (severity: wishlist) about the old dh_make packaging
       copyright, which used (C) without the word or symbol.  Based on a
       patch by Raphael Geissert.  (Closes: #497347)
+    + [RA] Clean up checks of a symlinked /usr/share/doc directory and
+      avoid making package info global.
   * checks/debhelper{,.desc}:
     + [RA] Check for use of shell brace expansion in debhelper config
       files that list filenames, which is not supported.  Based on a patch
diff --git a/t/tests/6000_copyright-file-doc-symlink.desc 
b/t/tests/6000_copyright-file-doc-symlink.desc
new file mode 100644
index 0000000..90146ee
--- /dev/null
+++ b/t/tests/6000_copyright-file-doc-symlink.desc
@@ -0,0 +1,4 @@
+Testname: copyright-file-doc-symlink
+Version: 1.0
+Description: Test a symlinked /usr/share/doc
+Test-Against: usr-share-doc-symlink-without-dependency
diff --git a/t/tests/copyright-file-doc-symlink/debian/debian/control.in 
b/t/tests/copyright-file-doc-symlink/debian/debian/control.in
new file mode 100644
index 0000000..4032211
--- /dev/null
+++ b/t/tests/copyright-file-doc-symlink/debian/debian/control.in
@@ -0,0 +1,35 @@
+Source: {$srcpkg}
+Priority: extra
+Section: {$section}
+Maintainer: {$author}
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 7)
+
+Package: {$srcpkg}
+Architecture: {$architecture}
+Depends: $\{shlibs:Depends\}, $\{misc:Depends\}
+Description: {$description}
+ This is a test package designed to exercise some feature or tag of
+ Lintian.  It is part of the Lintian test suite and may do very odd
+ things.  It should not be installed like a regular package.
+
+Package: {$srcpkg}-helper
+Architecture: {$architecture}
+Depends: {$srcpkg} (= {$version}), $\{shlibs:Depends\}, $\{misc:Depends\}
+Description: {$description} (symlink)
+ Helper package with a legitimate /usr/share/doc symlink.
+ .
+ This is a test package designed to exercise some feature or tag of
+ Lintian.  It is part of the Lintian test suite and may do very odd
+ things.  It should not be installed like a regular package.
+
+Package: {$srcpkg}-weak
+Architecture: {$architecture}
+Depends: {$srcpkg}, $\{shlibs:Depends\}, $\{misc:Depends\}
+Description: {$description} (weak)
+ Helper package with a /usr/share/doc symlink but an insufficiently
+ strong dependency.  We intentionally don't diagnose this.
+ .
+ This is a test package designed to exercise some feature or tag of
+ Lintian.  It is part of the Lintian test suite and may do very odd
+ things.  It should not be installed like a regular package.
diff --git a/t/tests/copyright-file-doc-symlink/debian/debian/rules 
b/t/tests/copyright-file-doc-symlink/debian/debian/rules
new file mode 100755
index 0000000..e242291
--- /dev/null
+++ b/t/tests/copyright-file-doc-symlink/debian/debian/rules
@@ -0,0 +1,16 @@
+#!/usr/bin/make -f
+
+pkg := copyright-file-doc-symlink
+
+%:
+       dh $@
+
+binary: binary-indep
+binary-arch:
+binary-indep:
+       dh binary-indep --until dh_prep
+       mkdir -p debian/$(pkg)-helper/usr/share/doc
+       ln -s $(pkg) debian/$(pkg)-helper/usr/share/doc/$(pkg)-helper
+       mkdir -p debian/$(pkg)-weak/usr/share/doc
+       ln -s $(pkg) debian/$(pkg)-weak/usr/share/doc/$(pkg)-weak
+       dh binary --remaining
diff --git a/t/tests/basic-non-native/tags 
b/t/tests/copyright-file-doc-symlink/tags
similarity index 100%
copy from t/tests/basic-non-native/tags
copy to t/tests/copyright-file-doc-symlink/tags

-- 
Debian package checker


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

Reply via email to