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

Bug#486145: lintian: Please downgrade "depends-on-obsolete-package" to warning for alternative OR'ed dependencies



tags 486145 + patch
thanks

Hi,

On Sun, 2008-06-15 at 14:32 +0200, Raphael Hertzog wrote:
> On Fri, 13 Jun 2008, Kevin B. McCarty wrote:
> > For instance, if bar is a known obsolete package, then the following in
> > debian/control:
> > 
> > (Build-)Depends: foo | bar
> > 
> > will trigger a Lintian error.
> > 
> > It would be preferable for the severity in this case to be only a
> > warning instead of an error.
[...]
> (only speaking of obsolete package in OR, unconditional dependency on
> obsolete package is certainly an error, also the obsolete package should
> never appear in the first position in an OR dependency)

Please find attached a proposed patch for this. I've currently
implemented the new tag as a warning, but that's obviously easily
changeable.

The patch modifies the check logic to use the current tag if the first
package in an ORed dependency is obsolete or if all the alternatives are
obsolete. An obsolete package occurring as the second or subsequent
alternative generates the new tag.

By way of a couple of examples:

Dependency: gs | ghostscript | gs-aladdin
Result:     depends-on-obsolete-package gs
            ored-depends-on-obsolete-package gs-aladdin

Dependency: gs | gs-aladdin | ghostscript
Result:     depends-on-obsolete-package gs
            ored-depends-on-obsolete-package gs-aladdin

Dependency: gs | gs-gpl
Result:     depends-on-obsolete-package gs
            depends-on-obsolete-package gs-gpl

Dependency: ghostscript | gs
Result:     ored-depends-on-obsolete-package gs

Regards,

Adam
--- checks/fields.orig	2008-06-16 20:05:37.000000000 +0100
+++ checks/fields	2008-06-16 20:25:19.000000000 +0100
@@ -441,7 +441,7 @@
 			    if ($data =~ /\|/ && ! &$is_dep_field($field));
 
 			for my $dep (split /\s*,\s*/, $data) {
-				my @alternatives;
+				my (@alternatives, @seen_obsolete_packages);
 				push @alternatives, [_split_dep($_), $_] for (split /\s*\|\s*/, $dep);
 
 				if (&$is_dep_field($field)) {
@@ -494,7 +494,7 @@
 					tag "bad-relation", "$field: $part_d_orig"
 					    if $rest;
 
-					tag "depends-on-obsolete-package", "$field: $part_d_orig"
+					push @seen_obsolete_packages, $part_d_orig
 					    if ($obsolete_packages->known($d_pkg) && &$is_dep_field($field));
 
 					tag "depends-on-x-metapackage", "$field: $part_d_orig"
@@ -523,6 +523,15 @@
 					    if ($d_pkg eq 'python' && $d_version->[0] eq '<<' && &$is_dep_field($field)
 						&& $arch_indep && $pkg =~ /^python-/ && ! -f "fields/python-version");
 				}
+
+				for my $pkg (@seen_obsolete_packages) {
+					if ($pkg eq $alternatives[0]->[0] or
+					    scalar @seen_obsolete_packages == scalar @alternatives) {
+						tag "depends-on-obsolete-package", "$field: $pkg";
+					} else {
+						tag "ored-depends-on-obsolete-package", "$field: $pkg";
+					}
+				}
 			}
 			tag "package-depends-on-multiple-libstdc-versions", @seen_libstdcs
 			    if (scalar @seen_libstdcs > 1);
--- checks/fields.desc.orig	2008-06-16 20:06:10.000000000 +0100
+++ checks/fields.desc	2008-06-16 20:05:47.000000000 +0100
@@ -374,6 +374,13 @@
 Tag: depends-on-obsolete-package
 Type: error
 Info: The package depends on a package that has been superseded.
+  If the superseded package is part of an ORed group, it should not be
+  the first package in the group.
+
+Tag: ored-depends-on-obsolete-package
+Type: warning
+Info: The package depends on an ORed group of packages which includes
+  a package that has been superseded.
 
 Tag: build-depends-on-obsolete-package
 Type: error
--- testset/relations/debian/control.orig	2008-06-16 20:06:59.000000000 +0100
+++ testset/relations/debian/control	2008-06-16 20:23:05.000000000 +0100
@@ -2,7 +2,7 @@
 Section: misc
 Priority: optional
 Build-Depends: mail-transport-agent, libc6-dev, findutils, foo (= 3) [!amd64 !i386], bar, arch-test1 [i386], arch-test2 [!i386], quilt (>= 0.40), perl, python-all-dev
-Build-Depends-Indep: make, bash, debmake, build-essential, baz (= 2.0),
+Build-Depends-Indep: make, bash, debmake, build-essential, baz (= 2.0), ghostscript | gs,
   car (>= 1.0), car (<= 2.0), caz (= 1.0) [amd64], caz (>= 2.0) [i386],
   caz (= 2.0) [powerpc], perl (>= 5.0), foo (<< 4) [!amd64 !i386], libfoo (>= 1.2-1), bozzle [kfreebsd-i386]
 Build-Conflicts: foo [amd64 i386], bar [alpha test], xlibs-dev, arch-test1 [powerpc], arch-test2 [!sparc]
@@ -23,7 +23,7 @@
 Conflicts: foobar (<< 5&5), foo, relations,
            gnuwdf,
 Suggests: alpha, gnu (>= 44-3-4-8-11.4) | ung (<< 89beta) | nug | ngu, beta, some-other-package
-Recommends: emacs21 | emacsen, dpkg, null, some-other-package, ${f-oo:b-ar}
+Recommends: emacs21 | emacsen, dpkg, null, some-other-package, ${f-oo:b-ar}, gs | ghostscript | gs-aladdin
 Description: Strange dependency relationships
  This package declares relationships designed to tickle lintian's "fields"
  check.  It should generate a number of tags for these.
@@ -36,9 +36,9 @@
 Section: non-free/misc
 Depends: libstdc++2.10, libstdc++2.10-glibc2.2, libstdc++3.0, tk8.2, tk8.3, tcl8.0, tcl8.2, tkx8.2, tkx8.3, tclx8.2, libpng2, libpng3, xorg, ${shlibs:Depends}
 Provides: awk
-Recommends: ${shlibs:Depends}, relations-multiple-libs
+Recommends: ${shlibs:Depends}, relations-multiple-libs, gs | gs-gpl
 Breaks: libpng3 (<< 1.0), libpng2
-Suggests: x-dev
+Suggests: x-dev, ghostscript | gs
 Description: Duplicate library dependency relationships.
  Duplicate library dependency relationships.
  This tests the depending on different versions of the same library
--- testset/tags.relations.orig	2008-06-16 20:26:56.000000000 +0100
+++ testset/tags.relations	2008-06-16 20:26:28.000000000 +0100
@@ -4,12 +4,15 @@
 E: relations source: build-depends-on-essential-package-without-using-version build-depends-indep: bash
 E: relations source: build-depends-on-essential-package-without-using-version build-depends: findutils
 E: relations source: build-depends-on-obsolete-package build-depends-indep: debmake
+E: relations source: build-depends-on-obsolete-package build-depends-indep: gs
 E: relations source: depends-on-build-essential-package-without-using-version libc6-dev [build-depends: libc6-dev]
 E: relations source: depends-on-build-essential-package-without-using-version make [build-depends-indep: make]
 E: relations source: invalid-arch-string-in-source-relation test [build-conflicts: bar [alpha test]]
 E: relations source: missing-build-dependency libmodule-build-perl
 E: relations source: section-category-mismatch Package relations-multiple-libs
 E: relations-multiple-libs: conflicts-with-dependency depends libpng2
+E: relations-multiple-libs: depends-on-obsolete-package recommends: gs
+E: relations-multiple-libs: depends-on-obsolete-package recommends: gs-gpl
 E: relations-multiple-libs: depends-on-obsolete-package suggests: x-dev
 E: relations-multiple-libs: description-synopsis-is-duplicated
 E: relations-multiple-libs: package-depends-on-multiple-libpng-versions libpng2 libpng3
@@ -23,6 +26,7 @@
 E: relations: conflicts-with-dependency depends relations
 E: relations: depends-on-essential-package-without-using-version depends: coreutils
 E: relations: depends-on-essential-package-without-using-version depends: dpkg
+E: relations: depends-on-obsolete-package recommends: gs
 E: relations: needlessly-depends-on-awk pre-depends
 E: relations: no-copyright-file
 I: relations source: build-depends-without-arch-dep arch-test1
@@ -48,11 +52,13 @@
 W: relations-multiple-libs: bad-homepage lintian.debian.org
 W: relations-multiple-libs: breaks-without-version libpng2
 W: relations-multiple-libs: description-synopsis-might-not-be-phrased-properly
+W: relations-multiple-libs: ored-depends-on-obsolete-package suggests: gs
 W: relations-multiple-libs: package-uses-breaks
 W: relations-multiple-libs: redundant-bugs-field
 W: relations-multiple-libs: redundant-origin-field
 W: relations: bad-homepage lintian.debian.org
 W: relations: depends-on-old-emacs recommends: emacs21
+W: relations: ored-depends-on-obsolete-package recommends: gs-aladdin
 W: relations: package-relation-with-self depends: relations (<< 3)
 W: relations: package-relation-with-self replaces: relations
 W: relations: redundant-bugs-field

Reply to: