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: