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