summaryrefslogtreecommitdiffstats
path: root/t/scripts/Lintian
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 13:42:30 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 13:42:30 +0000
commit75808db17caf8b960b351e3408e74142f4c85aac (patch)
tree7989e9c09a4240248bf4658a22208a0a52d991c4 /t/scripts/Lintian
parentInitial commit. (diff)
downloadlintian-upstream.tar.xz
lintian-upstream.zip
Adding upstream version 2.117.0.upstream/2.117.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 't/scripts/Lintian')
-rw-r--r--t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_amd64.changes98
-rw-r--r--t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_source.changes94
-rw-r--r--t/scripts/Lintian/Lab/data/changes/lintian_2.5.11_amd64.changes272
-rw-r--r--t/scripts/Lintian/Lab/data/changes/lintian_2.5.7_amd64.changes264
-rw-r--r--t/scripts/Lintian/Lab/data/changes/lintian_2.5.8_amd64.changes106
-rw-r--r--t/scripts/Lintian/Lab/data/changes/lintian_2.5.9_amd64.changes101
-rwxr-xr-xt/scripts/Lintian/Relation/01-basic.t19
-rwxr-xr-xt/scripts/Lintian/Relation/02-architecture.t19
-rwxr-xr-xt/scripts/Lintian/Relation/03-duplicates.t29
-rwxr-xr-xt/scripts/Lintian/Relation/04-multiarch.t64
-rwxr-xr-xt/scripts/Lintian/Relation/05-invalid.t66
-rwxr-xr-xt/scripts/Lintian/Relation/06-build-profiles.t24
-rw-r--r--t/scripts/Lintian/Relation/07-implies.t46
-rw-r--r--t/scripts/Lintian/Util/data/pgp-eof-missing-sign5
-rw-r--r--t/scripts/Lintian/Util/data/pgp-leading-unsigned14
-rw-r--r--t/scripts/Lintian/Util/data/pgp-malformed-header11
-rw-r--r--t/scripts/Lintian/Util/data/pgp-no-end-pgp-header7
-rw-r--r--t/scripts/Lintian/Util/data/pgp-sig-before-start7
-rw-r--r--t/scripts/Lintian/Util/data/pgp-trailing-unsigned14
-rw-r--r--t/scripts/Lintian/Util/data/pgp-two-signatures16
-rw-r--r--t/scripts/Lintian/Util/data/pgp-two-signed-msgs19
-rw-r--r--t/scripts/Lintian/Util/data/pgp-unexpected-header6
-rwxr-xr-xt/scripts/Lintian/Util/dctrl-parser.t64
-rwxr-xr-xt/scripts/Lintian/Util/path.t69
24 files changed, 1434 insertions, 0 deletions
diff --git a/t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_amd64.changes b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_amd64.changes
new file mode 100644
index 0000000..d316ead
--- /dev/null
+++ b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_amd64.changes
@@ -0,0 +1,98 @@
+Format: 1.8
+Date: Sat, 30 Jun 2012 17:21:27 +0200
+Source: lintian
+Binary: lintian
+Architecture: source all
+Version: 2.5.10
+Distribution: unstable
+Urgency: low
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Changed-By: Niels Thykier <niels@thykier.net>
+Description:
+ lintian - Debian package checker
+Closes: 673276 678775
+Changes:
+ lintian (2.5.10) unstable; urgency=low
+ .
+ * Summary of tag changes:
+ + Added:
+ - incompatible-java-bytecode-format
+ - unknown-java-class-version
+ .
+ * checks/changes-file.desc:
+ + [NT] Fix typo in tag description. Thanks to Luca
+ Falavigna for spotting it.
+ * checks/files:
+ + [NT] Use new gzip decompressor from L::Util.
+ * checks/java{,.desc}:
+ + [NT] Catch unknown Java class versions.
+ + [NT] Catch uses of Java7 byte code as an experimental
+ check. It lacks the proper checks for cases where
+ packages have the proper dependencies for Java7 byte
+ code. (Closes: #673276)
+ .
+ * collection/*:
+ + [NT] Add missing load of the FileHandle module.
+ * collection/java-info{,.desc}:
+ + [NT] Use Archive::Zip instead of zipinfo + unzip to
+ extract information from Jar files.
+ + [NT] Limit java-info to files classified as "Zip Archive"
+ by file(1).
+ * collection/objdump-info:
+ + [NT] Only call readelf once per binary.
+ + [NT] Use xargs + a new helper to reduce the number of
+ readelf calls even further.
+ * collection/objdump-info-helper:
+ + [NT] New file.
+ * collection/strings:
+ + [NT] Optimize for the "common case" file names with a
+ fall-back to previous behaviour with special file names.
+ * collection/strings-helper:
+ + [NT] New file.
+ .
+ * debian/control:
+ + [NT] Add (Build-)Dependency on libarchive-zip-perl.
+ + [NT] Remove runtime dependency on unzip (replaced by
+ libarchive-zip-perl).
+ + [NT] Add explicit Build-Dependency on xz-utils instead
+ of relying on dpkg-dev's dependency on it.
+ + [NT] Add versioned xz-utils as alternative to xz-lzma
+ or lzma. (Closes: #678775)
+ + [NT] Add missing suggests for lzma packages. lzma is
+ only used for source packages compressed with lzma.
+ + [NT] Add suggests on libperlio-gzip-perl.
+ .
+ * frontend/lintian:
+ + [NT] Check if some collections can be skipped for existing
+ entries. This is mostly useful for static labs, where
+ certain checks can be now be rerun without having to run
+ "unpacked".
+ + [NT] Emit run times of collections and checks with debug
+ level 2 (or higher).
+ + [NT] Load lintian's libraries earlier.
+ + [NT] Add new option "--jobs" to control the number of
+ unpacking jobs Lintian will schedule in parallel.
+ + [NT] Improve Lintian's job scheduler to schedule unpacking
+ jobs on a group level rather than just a package level.
+ .
+ * lib/Lintian/Collect/[Binary,Package}.pm:
+ + [NT] Use new gzip decompressor from L::Util.
+ * lib/Lintian/CollScript.pm:
+ + [NT] New file.
+ * lib/Lintian/Util.pm:
+ + [NT] Add gzip decompressor preferring libperlio-perl if
+ available, but with fallback to a "fork+exec" of gzip.
+ + [NT] Load Digest::SHA immediately like Digest::MD5.
+Checksums-Sha1:
+ ea252bf1960aed48a93766b7bdc6a0c9f18f51d1 2556 lintian_2.5.10.dsc
+ 4fc358f2aeb6b797f580b75a254390f7cf2f7551 1105393 lintian_2.5.10.tar.gz
+ 736dc7b2ef09398327ea270bdcb1b51ccf479758 707676 lintian_2.5.10_all.deb
+Checksums-Sha256:
+ b29adb3b1eadbc00be0274f09f5345954e1340672e76f7b3f56af2b153a08b74 2556 lintian_2.5.10.dsc
+ 249f1a23d14d824151181728cc026e0971a5960ce7f7b1b383cc1e42e4244961 1105393 lintian_2.5.10.tar.gz
+ d1405f3aeffe079c75d2a2ee56666b3e6f20eb3e3ce5c77f7888bf4838400f31 707676 lintian_2.5.10_all.deb
+Files:
+ 8767bfbf1b004474936eb319b60f8dae 2556 devel optional lintian_2.5.10.dsc
+ 5dd1d5ca1ab71f672b34992e249064ca 1105393 devel optional lintian_2.5.10.tar.gz
+ e45c47e1110e05f76dc7df35f5f501c4 707676 devel optional lintian_2.5.10_all.deb
+
diff --git a/t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_source.changes b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_source.changes
new file mode 100644
index 0000000..4281fa1
--- /dev/null
+++ b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.10_source.changes
@@ -0,0 +1,94 @@
+Format: 1.8
+Date: Sun, 17 Jun 2012 23:25:06 +0200
+Source: lintian
+Binary: lintian
+Architecture: source
+Version: 2.5.10
+Distribution: UNRELEASED
+Urgency: low
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Changed-By: Niels Thykier <niels@thykier.net>
+Description:
+ lintian - Debian package checker
+Closes: 673276 678775
+Changes:
+ lintian (2.5.10) UNRELEASED; urgency=low
+ .
+ * Summary of tag changes:
+ + Added:
+ - incompatible-java-bytecode-format
+ - unknown-java-class-version
+ .
+ * checks/changes-file.desc:
+ + [NT] Fix typo in tag description. Thanks to Luca
+ Falavigna for spotting it.
+ * checks/files:
+ + [NT] Use new gzip decompressor from L::Util.
+ * checks/java{,.desc}:
+ + [NT] Catch unknown Java class versions.
+ + [NT] Catch uses of Java7 byte code as an experimental
+ check. It lacks the proper checks for cases where
+ packages have the proper dependencies for Java7 byte
+ code. (Closes: #673276)
+ .
+ * collection/*:
+ + [NT] Add missing loads of FileHandle module.
+ * collection/java-info{,.desc}:
+ + [NT] Use Archive::Zip instead of zipinfo + unzip to
+ extract information from Jar files.
+ + [NT] Limit java-info to files classified as "Zip Archive"
+ by file(1).
+ * collection/objdump-info:
+ + [NT] Only call readelf once per binary.
+ + [NT] Use xargs + a new helper to reduce the number of
+ readelf calls even further.
+ * collection/objdump-info-helper:
+ + [NT] New file.
+ * collection/strings:
+ + [NT] Optimize for the "common case" file names with a
+ fall-back to previous behaviour with special file names.
+ * collection/strings-helper:
+ + [NT] New file.
+ .
+ * debian/control:
+ + [NT] Add (Build-)Dependency on libarchive-zip-perl.
+ + [NT] Remove runtime dependency on unzip (replaced by
+ libarchive-zip-perl).
+ + [NT] Add explicit Build-Dependency on xz-utils instead
+ of relying on dpkg-dev's dependency on it.
+ + [NT] Add versioned xz-utils as alternative to xz-lzma
+ or lzma. (Closes: #678775)
+ + [NT] Add missing suggests for lzma packages. lzma is
+ only used for source packages compressed with lzma.
+ + [NT] Add suggests on libperlio-gzip-perl.
+ .
+ * frontend/lintian:
+ + [NT] Check if some collections can be skipped for existing
+ entries. This is mostly useful for static labs, where
+ certain checks can be now be rerun without having to run
+ "unpacked".
+ + [NT] Emit run times of collections and checks with debug
+ level 2 (or higher).
+ + [NT] Load lintian's libraries earlier.
+ + [NT] Add new option "--jobs" to control the number of
+ unpacking jobs Lintian will schedule in parallel.
+ + [NT] Improve Lintian's job scheduler to schedule unpacking
+ jobs on a group level rather than just a package level.
+ .
+ * lib/Lintian/Collect/[Binary,Package}.pm:
+ + [NT] Use new gzip decompressor from L::Util.
+ * lib/Lintian/CollScript.pm:
+ + [NT] New file.
+ * lib/Lintian/Util.pm:
+ + [NT] Add gzip decompressor preferring libperlio-perl if
+ available, but with fallback to a "fork+exec" of gzip.
+ + [NT] Load Digest::SHA immediately like Digest::MD5.
+Checksums-Sha1:
+ b4b96b4d27c2cda31acf6d01b2e0654b6a09a132 1670 lintian_2.5.10.dsc
+ 8ea77c3b4a81fcbb63bac6a0847c687d4ddf2534 1105415 lintian_2.5.10.tar.gz
+Checksums-Sha256:
+ e15ca14cfbf30e0086cb5942b395f34a7d933e5668b3c7fa2b3900fed1ee98d2 1670 lintian_2.5.10.dsc
+ 5b91379747dfb6a779e4117db4a5bfb41154e97854de11b21475ddd273343c9c 1105415 lintian_2.5.10.tar.gz
+Files:
+ dda8d51e21900fd23393d2d4401e13d8 1670 devel optional lintian_2.5.10.dsc
+ b99b2e42c3b933efb8b147745dabdc46 1105415 devel optional lintian_2.5.10.tar.gz
diff --git a/t/scripts/Lintian/Lab/data/changes/lintian_2.5.11_amd64.changes b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.11_amd64.changes
new file mode 100644
index 0000000..23e21f8
--- /dev/null
+++ b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.11_amd64.changes
@@ -0,0 +1,272 @@
+Format: 1.8
+Date: Tue, 11 Dec 2012 22:12:06 +0100
+Source: lintian
+Binary: lintian
+Architecture: source all
+Version: 2.5.11
+Distribution: experimental
+Urgency: low
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Changed-By: Niels Thykier <niels@thykier.net>
+Description:
+ lintian - Debian package checker
+Closes: 623265 658474 660655 672273 673073 677874 677890 678639 678896 680391 681410 681769 681894 683224 683516 685497 686179 686352 687464 688320 688494 690014 690910 691489 692232 692616 693013 693442 693589 694328
+Changes:
+ lintian (2.5.11) experimental; urgency=low
+ .
+ * Summary of tag changes:
+ + Added:
+ - conffile-has-bad-file-type
+ - debug-package-for-multi-arch-same-pkg-not-coinstallable
+ - dm-upload-allowed-is-obsolete
+ - field-name-typo-in-dep5-copyright
+ - font-adobe-copyrighted-fragment
+ - license-problem-json-evil
+ - maintainer-script-has-unexpanded-debhelper-token
+ - shlibs-uses-obsolete-relation
+ - untranslatable-debconf-templates
+ + Removed:
+ - apparently-truncated-elf-binary
+ - data.tar.xz-member-without-dpkg-pre-depends
+ - debhelper-overrides-need-versioned-build-depends
+ - no-source-field
+ - preinst-uses-dpkg-maintscript-helper-without-predepends
+ .
+ * checks/*:
+ + [NT] Remove assumption that lintian will chdir into the
+ lab before calling the check.
+ + [NT] Be better at avoiding false-positive spelling errors
+ for references to packages that also happen to be common
+ spelling mistake. Thanks to Paul Tagliamonte for the
+ report. (Closes: #687464)
+ * checks/binaries{,.desc}:
+ + [NT] Merge apparently-truncated-elf-binary into
+ apparently-corrupted-elf-binary.
+ + [NT] Remove some references to objdump in tag descriptions
+ as Lintian uses readelf.
+ + [JW,NT] Update the "extract SONAME" shell snippet to properly
+ handle SONAMEs with uppercase letters.
+ + [JW] Recognise any path with matching the GNU multi-arch
+ triplet as a "Multi-arch: same"-safe directory. Thanks to
+ Matthias Klose for the report. (Closes: #681410)
+ * checks/changelog-file:
+ + [NT] Emit "missing changelog" for packages that are missing
+ their usr/share/doc/<pkg>/ dir and do not have a doc symlink.
+ Thanks to Faheem Mitha for the report. (Closes: #683224)
+ * checks/conffiles{,.desc}:
+ + [NT] Remove leading slash on the filename when emitting
+ file-in-etc-rc.d-marked-as-conffile.
+ + [NT] Add check for "non-file" conffiles. Thanks to Guillem
+ Jover for the report. (Closes: #690910)
+ * checks/control-file.desc:
+ + [NT] Bump obsolete-relation-form-in-source to serious as these
+ forms are now "must not" instead of "should not".
+ * checks/copyright.desc:
+ + [NT] Bump debian-copyright-file-uses-obsolete-national-encoding
+ to serious as copyright files must now be UTF-8 encoded.
+ * checks/cruft{,.desc}:
+ + [NT] Detect MS-DOS executables as windows binaries.
+ + [NT] Bump the version of config.{guess,sub} needed for
+ triggering the "outdated-autotools-helper-file" tag for arm64
+ support. Thanks to Paul Wise for the report and the
+ investigative work. (Closes: #690014)
+ + [RA,NT] Extend the description of the tags {outdated,ancient}-
+ autotools-helper-file to mention that dh-autoreconf might be
+ helpful tool.
+ + [NT] Apply patch from Bastien Roucariès to detect file licensed
+ under the "Good, not Evil"-JSON license. (Closes: #692616)
+ * checks/deb-format{,.desc}:
+ + [NT] Retire data.tar.xz tag. (Closes: #680391)
+ * checks/debhelper{,.desc}:
+ + [JW,NT] Consider missing versioned build-depends on
+ debhelper for compat 8 (or less) a pedantic issue.
+ (Closes: #681894)
+ + [NT] Retire debhelper-overrides-need-versioned-build-depends.
+ * checks/fields{,.desc}:
+ + [NT] Retire no-source-field since Lintian cannot emit it any
+ more due to dpkg-source refusing to extract such source
+ packages.
+ + [NT] Add tag for using the obsolete DMUA field. Thanks to
+ Ansgar Burchardt for the report. (Closes: #688494)
+ + [NT] Apply patches from Bernhard R. Link to check for
+ unintentional whitespace and use of non-cannical URIs in
+ Vcs-* fields. (Closes: #681769)
+ + [NT] Fix false-positive caused by insignificant whitespace.
+ Thanks to Dima Kogan for the report. (Closes: #693589)
+ * checks/files:
+ + [RG] Recognise smarty3 as smarty itself.
+ + [NT] Consider "tasksel tasks" as a meta package.
+ (Closes: #691489)
+ + [NT] Add patch from Bastien Roucariès to check for adobe font
+ license issues. (Closes: #694328)
+ * checks/group-checks{,.desc}:
+ + [NT] Detect debug packages not co-installable with itself,
+ when it provides debug symbols for a Multi-Arch: same package.
+ Thanks to Carsten Hey for the report. (Closes: #678896)
+ * checks/infofiles:
+ + [NT] Use L::Util's gzip decompressor rather than zcat.
+ * checks/init.d{,.desc}:
+ + [NT] Move file-in-etc-rc.d-marked-as-conffile to conffiles
+ check.
+ + [NT] Use L::Collect's conffile API instead of accessing the
+ "conffiles" control file directly.
+ * checks/java.desc:
+ + [NT] Remove the "experimental" marker of the Java byte-code
+ check.
+ * checks/manpages{,.desc}:
+ + [CW,NT] Manually do redirects and chdir rather than
+ invoking a shell when calling man and lexgrog.
+ + [CW,NT] Be stricter with missing roff preprocessors by
+ setting MANROFFSEQ to the empty string when calling man.
+ + [CW,NT] Pass -Tutf8 -Z to man to skip an unused part of
+ the groff pipeline. (Closes: #677874)
+ + [CW,NT] Use the L::Util gzip decompressor to open gzipped
+ manpages.
+ * checks/menu-format{,.desc}:
+ + [NT] Move a table of categories to a data file.
+ + [NT] Update description of menu-icon-missing. Lintian is now
+ sometimes able to find the icon in dependencies (if they are
+ built from the same source). Thanks to Ryan Kavanagh for the
+ report and the suggested patch. (Closes: #683516)
+ * checks/md5sums:
+ + [NT] Use L::Collect's conffile API instead of accessing the
+ "conffiles" control file directly.
+ * checks/po-debconf{,.desc}:
+ + [NT] Check for untranslatable templates that should be
+ translatable. Thanks to David Prévot for the report and the
+ patch. (Closes: #686179)
+ * checks/scripts{,.desc}:
+ + [NT] Retire check for dpkg-maintscript-helper in preinst.
+ (Closes: #685497)
+ + [NT] Fix false positive "executable-not-elf-or-script" when
+ the file is an executable hardlink to a script.
+ + [NT] Check maintainer scripts for unexpanded #DEBHELPER# tokens.
+ Thanks to Cyril "KiBi" Brulebois for the suggestion.
+ + [NT] Fix false-positive for removal of device files as /dev/shm
+ is not a device. Thanks to Steve Langasek for the report and
+ Roger Leigh for the extra info. (Closes: #693442)
+ * checks/shared-libs{,.desc}:
+ + [NT] Clearify the description of dev-pkg-without-shlib-symlink
+ to mention that the dev symlink is always expected in /usr.
+ + [NT] Add missing "+" in libtool regex. Thanks to Leo 'costela'
+ Antunes for the report.
+ + [RA,NT] Check for use of obsolete "<" and ">" in shlibs control
+ files. (Closes: #660655)
+ * checks/source-copyright{,.desc}:
+ + [NT] Check for possible misspellings of known field
+ names. (Closes: #678639)
+ + [NT] Fix typo of paragraph. Thanks to Logan Rosen for spotting
+ it. (Closes: #693013)
+ * checks/version-substvars{,.desc}:
+ + [JW,NT] Extend version-substvar-for-external-package to
+ all relations. Previously it was only triggered for
+ strong dependnecy relations. (Closes: #658474)
+ .
+ * collection/deb-format.desc:
+ + [NT] Remove unneeded changelog-file from "Needs-Info".
+ * collection/objdump-info{,-helper,.desc}:
+ + [NT] Change the output format for the collection and
+ bump the version of the collection accordingly.
+ + [NT] Apply patch from Peter Pentchev to ensure set{u,g}id
+ ELF binaries are properly processed, even when Lintian is
+ run as root. (Closes: #686352)
+ .
+ * data/binaries/embedded-libs:
+ + [RG] Check for embedded copies of jsoncpp.
+ * data/fields/archive-sections:
+ + [NT] Add new "tasks" section.
+ * data/menu-format/add-categories:
+ + [NT] New file.
+ * data/output/ftp-master-{,non}fatal:
+ + [NT] Removed, not used at run time.
+ * data/scripts/interpreters:
+ + [NT] Add nodejs and Rscript as a known interpreter.
+ Thanks to Marcelo Jorge Vieira and Sébastien Boisvert
+ for the report. (Closes: #623265, #692232)
+ * data/spelling/corrections:
+ + [NT,RG] Add more corrections.
+ + [RG] Re-sort the corrections.
+ .
+ * debian/control:
+ + [NT] Add (Build-)Depends on libtext-levenshtein-perl.
+ + [NT] Use anonscm.d.o in the Vcs-* fields instead of
+ git.d.o.
+ * debian/lintian.install:
+ + [NT] Install Lintian perl modules in /usr/share/perl5.
+ * debian/rules:
+ + [NT] Add target to generate HTML API doc. Currently
+ this is only run manually.
+ .
+ * frontend/lintian:
+ + [NT] Remove chdir calls for checks.
+ + [NT] Retire depreciated command line and config options.
+ + [NT] Refactor unpackaging into Lintian::Unpacker.
+ + [NT] Make parameter for --jobs optional. In its absence
+ Lintian will not limit the number of parallel jobs.
+ + [JW,NT] During the unpack phase, emit the name of the
+ group currently being unpacked when --verbose is given.
+ (Closes: #677890)
+ + [JW] Fix typo of Parallelization.
+ + [NT] Fix regression where --suppress-tags{,-from-file}
+ was ignored if -C or -X was passed. Thanks to Thorsten
+ Glaser for reporting it. (Closes: #688320)
+ .
+ * lib/Lintian/Collect{,/Source}.pm:
+ + [NT] Add optional parameter to field (and X_field)
+ methods that denotes the default value if a field is
+ missing. This avoid some boiler plate for callers
+ of the methods.
+ * lib/Lintian/Collect/Binary.pm:
+ + [NT] Bump API for objdump method.
+ + [NT] Add API for checking if a file is considered a
+ conffile.
+ * lib/Lintian/Collect/Package.pm:
+ + [NT] Strip leading slash off files extracted from tar.
+ * lib/Lintian/Command.pm:
+ + [NT] Work around a leak in IPC::Run (see #301774).
+ * lib/Lintian/Internal/FrontendUtil.pm:
+ + [NT] Always use Dpkg::Vendor to determine the default
+ vendor. Previously dpkg-vendor would be preferred if
+ available.
+ * lib/Lintian/Lab/Entry.pm:
+ + [NT] Use the L::Collect during creation instead of
+ manually reading the dsc for source packages.
+ * lib/Lintian/Profile.pm:
+ + [NT] Add support for the new optional "Load-Checks"
+ field in profiles.
+ + [NT] Ensure that the "lintian" check is always loaded
+ as these tags are not emitted by check modules. Also
+ enable the tags from the check by default.
+ * lib/Lintian/Tags.pm:
+ + [NT] Be explicit about the reason when rejecting an
+ override. Thanks to Yves-Alexis Perez for the report.
+ (Closes: #673073)
+ * lib/Lintian/Unpacker.pm:
+ + [NT] New file.
+ .
+ * man/lintian.pod.in:
+ + [NT] Remove documentation about removed options.
+ .
+ * reporting/graphs/{statistics,tags}.gpi:
+ + [JP] New file.
+ * reporting/html_reports:
+ + [JP,NT] Generate graphs of the collected history data.
+ (Closes: #672273)
+ + [NT] Make the mirror name configurable.
+ .
+ * vendors/ubuntu/main/data/changes-file/known-dists:
+ + [NT] Add "raring" as known Ubuntu distribution. Thanks to
+ Dmitry Shachnev. (LP: #1068208)
+Checksums-Sha1:
+ 850fcd4ceaf870dd6ac276c15c43b104dba52e9b 2602 lintian_2.5.11.dsc
+ c83143fc76461efbdfd687ea63964c650de9511e 1140318 lintian_2.5.11.tar.gz
+ 2148b6ee048eb28026990c33a25d16d2ea555d7e 733808 lintian_2.5.11_all.deb
+Checksums-Sha256:
+ 482bf299f9e3e77467b06fe7a49e719d961584a4826db73a84333fe709a209a5 2602 lintian_2.5.11.dsc
+ 91f96295eac39c4711a1e53715f9c4324539665ef8aa4c1500af5ba5efd39cd5 1140318 lintian_2.5.11.tar.gz
+ 9f33060a392f8cf1adf8ed37041d66fe2a270d01732386ea5fbb3fe700c4670d 733808 lintian_2.5.11_all.deb
+Files:
+ 8b4bd5c4bea641f0ff2f0d957fbbea78 2602 devel optional lintian_2.5.11.dsc
+ 90000a9fc6b5a7061f63154a946f9b79 1140318 devel optional lintian_2.5.11.tar.gz
+ 5bd3ff3eb29a80322a57cdbe2676bfbd 733808 devel optional lintian_2.5.11_all.deb
+
diff --git a/t/scripts/Lintian/Lab/data/changes/lintian_2.5.7_amd64.changes b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.7_amd64.changes
new file mode 100644
index 0000000..1c4353a
--- /dev/null
+++ b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.7_amd64.changes
@@ -0,0 +1,264 @@
+Format: 1.8
+Date: Mon, 14 May 2012 23:45:08 +0200
+Source: lintian
+Binary: lintian
+Architecture: source all
+Version: 2.5.7
+Distribution: unstable
+Urgency: low
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Changed-By: Niels Thykier <niels@thykier.net>
+Description:
+ lintian - Debian package checker
+Closes: 614034 628189 648777 649277 649852 650536 657402 660845 663516 664061 664471 664600 666207 666765 668546 671024 671537 672615
+Changes:
+ lintian (2.5.7) unstable; urgency=low
+ .
+ * Summary of tag changes:
+ + Added:
+ - apache2-configuration-files-need-conf-suffix
+ - apache2-deprecated-auth-config
+ - apache2-module-depends-on-real-apache2-package
+ - apache2-module-does-not-depend-on-apache2-api
+ - apache2-module-does-not-ship-load-file
+ - apache2-reverse-dependency-calls-invoke-rc.d
+ - apache2-reverse-dependency-calls-wrapper-script
+ - apache2-reverse-dependency-ships-file-in-not-allowed-directory
+ - apache2-reverse-dependency-uses-obsolete-directory
+ - apache2-unparseable-dependency
+ - apache2-unsupported-dependency
+ - diff-contains-quilt-control-dir
+ - hardening-no-fortify-functions
+ - hardening-no-relro
+ - hardening-no-stackprotector
+ - non-standard-apache2-configuration-name
+ - non-standard-apache2-module-package-name
+ - rc-version-greater-than-expected-version
+ - udeb-uses-unsupported-compression-for-data-tarball
+ - web-application-depends-on-apache2-data-package
+ - web-application-should-not-depend-unconditionally-on-apache2
+ + Removed:
+ - ancient-dpkg-long-filenames-check
+ - ancient-dpkg-predepends-check
+ - bad-ubuntu-distribution-in-changes-file
+ - binary-nmu-uses-old-version-style
+ - debian-control-with-duplicate-fields
+ - doc-base-file-references-usr-doc
+ - duplicate-fields-in-templates
+ - manpage-for-non-x11-binary-in-wrong-directory
+ - manpage-for-x11-binary-in-wrong-directory
+ - missing-dependency-on-install-info
+ - obsolete-field
+ - old-app-defaults-directory
+ - old-style-copyright-file
+ - old-style-example-dir
+ - package-installs-file-to-usr-x11r6-bin
+ - package-installs-font-to-usr-x11r6
+ - package-uses-obsolete-file
+ - postinst-should-not-set-usr-doc-link
+ - raster-image-in-scalable-directory
+ - udeb-uses-non-gzip-data-tarball
+ - x11-games-should-be-in-usr-games
+ .
+ * checks/*:
+ + [NT] Remove some old tags that are no longer useful.
+ (Closes: #663516)
+ + [NT] Migrate to sorted_index from sorted_file_info.
+ + [NT] Explicitly import needed subs from L::Util.
+ * checks/apache2{,.desc}:
+ + [NT] New files to check for apache2 related packages. Thanks
+ to Arno Töll and Stefan Fritsch for the patches.
+ (Closes: #668546)
+ + [NT] This check is not enabled by default. It can be used
+ via the debian/extra-apache2 profile.
+ * checks/binaries{,.desc}:
+ + [NT] Move embedded library data to a data file.
+ + [NT] Add ELF hardening checks. Thanks to Kees Cook for
+ report and the patches. (Closes: 650536)
+ + [NT] Replace architecture tables with data files.
+ + [JW] Check for missing Python3 numpy ABI dependency.
+ (Closes: #671024)
+ * checks/changelog-file:
+ + [NT] Output the correct line number for the "line-too-long"
+ tag. Thanks to Arno Töll for the report. (Closes: #657402)
+ * checks/changes-file{,.desc}:
+ + [NT] Remove Ubuntu specific handling of distribution names.
+ Instead replace it with a more generalized one that derivatives
+ can reuse by extending vendor specific data files. Thanks to
+ Daniel Dehennin for the suggestion. (Closes: #648777)
+ * checks/control-file:
+ + [NT] Rewrote parts to use Lintian::Collect for fetching data.
+ * checks/cruft{,.desc}:
+ + [NT] Check for quilt control dirs in the debian packaging files.
+ * checks/deb-format{,.desc}:
+ + [NT] Replace old udeb compression tag with a more general
+ one. (Closes: #664600)
+ + [NT] Remove logic for checking if a deb is meant for
+ Ubuntu. Instead unconditionally emit the tag and let the
+ vendor profiles handle it.
+ * checks/debconf:
+ + [NT] Special case debconf providers for purge-debconf tag.
+ Generally they cannot use db_purge in postrm (for obvious
+ reasons), so the tag will be a false-positive in such
+ cases.
+ * checks/fields{,.desc}:
+ + [NT] Add devref reference.
+ + [NT] Remove special handling of the Ubuntu specific field,
+ "original-maintainer". This field is now handled by vendor
+ specific data files. (Closes: #649852)
+ + [JW,NT] Check for common mistakes with preview release and
+ release candidate versions. For non-native packages, this
+ check is only done on initial uploads of new upstream
+ releases. Thanks to Stefano Rivera and Julian Taylor for
+ their additional suggestions. (Closes: #649277)
+ * checks/filename-length.desc:
+ + [ADB, NT] Reword description of package-has-long-file-name.
+ Thanks to Andreas Beckmann for suggestion.
+ * checks/files{,.desc}:
+ + [NT] Remove "manual" lazy loads of data files.
+ + [NT] Remove code for the uses-FHS-doc-dir tag.
+ + [NT] Extend icon checks to all icon directories and look for
+ raster images in "scalable" icon directories. Thanks to
+ Paul Wise for the report and Felix Geyer for the patches.
+ (Closes: #628189)
+ * checks/group-checks:
+ + [NT] Include Provides when checking for conflict relations.
+ Thanks to Damyan Ivanov for the report. (Closes: #672615)
+ * checks/java:
+ + [NT] Ignore "codeless" jars if they appear to be maven
+ javadoc jars. Thanks to Ludovic Claude for the patch.
+ (Closes: #660845)
+ * checks/lintian.desc:
+ + [NT] Updated the description of the override tags.
+ * checks/manpages{,.desc}:
+ + [RA] Detect hyphen used as minus sign following a groff \f[C] font
+ change. Thanks, Iustin Pop. (Closes: #664471)
+ * checks/menu-format:
+ + [NT] Move menu section lists into a data file.
+ + [NT] If a package is missing a menu icon, check its direct strong
+ dependencies built from the same source (if any) for the icon.
+ This fixes false-positives menu-icon-missing in some cases.
+ * checks/menus{,.desc}:
+ + [NT] Remove "manual" lazy load of data file.
+ * checks/nmu:
+ + [NT] Remove Ubuntu specific code to handle their (lack of) NMUs.
+ These tags are instead suppressed by the Ubuntu profile.
+ * chekcs/rules:
+ + [NT] Fix false-positive "ignores-make-clean-error" tag caused by
+ using make with -C and a dir containing the letter "i". Thanks to
+ Tobias Hansen for the report. (Closes: #671537)
+ * checks/scripts{,.desc}:
+ + [NT] Mention devref 6.4 in command-with-path-in-maintainer-script.
+ Thanks to Arno Töll for the patch.
+ + [NT] Do not emit unusual-interpreter if the package provides the
+ interpreter itself.
+ + [NT] Ignore the lack of exec bit on th debconf shell modules.
+ * checks/standards-version.desc:
+ + [NT] Add references to the Policy upgrading checklist. Thanks to
+ Simon Paillard for the patch.
+ .
+ * collection/*:
+ + [NT] Use Lintian::Collect to access the package index.
+ * collection/bin-pkg-control{,.desc}:
+ + [NT] Compress control-index file and bump version of
+ bin-pkg-control.
+ * collection/copyright-file:
+ + [NT] Remove code to look for old-style copyright file.
+ * collection/file-info{,.desc}:
+ + [NT] Compress file-info output and bump version of file-info.
+ * collection/hardening-info{,.desc}:
+ + [NT] New files. Thanks to Kees Cook for the patch.
+ * collection/index{,.desc}:
+ + [NT] Compress index output and bump version of index.
+ * collection/java-info{,.desc}:
+ + [NT] Compress java-info output and bump version of java-info.
+ * collection/objdump-info:
+ + [NT] Use "fail" from Lintian::Util.pm rather than embedding a
+ copy of it.
+ + [NT] Use Lintian::Collect to find ELF files.
+ + [NT] Replace all usage of objdump with readelf.
+ (Closes: #614034)
+ + [NT] Compress objdump-info output and bump version of objdump-info.
+ * collection/strings{,.desc}:
+ + [NT] Compress strings output and bump version of strings.
+ .
+ * data:
+ + [NT] Move to vendors/debian/ftp-master-auto-reject and replace
+ it with a symlink.
+ * data/binaries/{arch-{64bit-equivs,regex},hardening-tags}:
+ + [NT] New file.
+ * data/binaries/embedded-libs:
+ + [NT] New file.
+ + [NT] Add libav libraries. Thanks to Andres Mejia for the
+ suggestion and the suggested patch. (Closes: #666765)
+ * data/changes-file/{debian-dists -> known-dists}:
+ + [NT] Renamed file.
+ * data/menu-format/menu-sections:
+ + [NT] New file.
+ .
+ * debian/changelog:
+ + [NT] Amend the 2.5.5 to mention that it also added the tag
+ binaries-have-file-conflict.
+ .
+ * frontend/lintian:
+ + [JW] Fix typo in error message.
+ + [JW,NT] Fix handling of "override" option in the lintianrc file.
+ (Closes: #666207)
+ .
+ * lib/Lintian/Architecture.pm:
+ + [NT] Lazily evaluate the data file.
+ * lib/Lintian/Collect/Package.pm:
+ + [NT] Remove an extra level of quoting in index.
+ + [NT] Remove root dir from sorted_index.
+ + [NT] Keep trailing slash in dir names for file_info.
+ * lib/Lintian/Collect/Binary.pm:
+ + [NT] Remove sorted_file_info as sorted_index now produces
+ an identical list.
+ * lib/Lintian/Data.pm:
+ + [NT] Lazily load data files.
+ + [NT] Allow pre-process sub to alter existing value for a key
+ by passing the previous value as third argument.
+ + [NT] Allow vendor specific data files. They will be loaded
+ from LINTIAN_ROOT/vendors/$profile/data.
+ * lib/Lintian/Output{,/*}.pm:
+ + [NT] Replace non-printables with "?" in output.
+ * lib/Lintian/Profile.pm:
+ + [NT] Normalize profile name and replace "parents" with
+ "profile_list". The latter also includes the current profile
+ name.
+ * lib/Lintian/Tag/Info.pm:
+ + [NT] Use Lintian::Data to load the manual-references data
+ file instead using an ad-hoc parser.
+ * lib/{Text_utils => Lintian/Tag/TextUtil}.pm:
+ + [NT] Renamed module.
+ * lib/{Util => Lintian/Util}.pm:
+ + [NT] Renamed Util to Lintian::Util.
+ + [JW] Consider duplicate fields a syntax error in dctrl files.
+ Previously, duplicate fields were silently ignored (except
+ when a separate tag would check for it). (Closes: #664061)
+ + [NT] Stop exported a majority of all subs by default.
+ .
+ * profiles/ubuntu/main.profile:
+ + [NT] Add a number of NMU related tags to the list of disabled
+ tags.
+ .
+ * vendors/ubuntu/main/data/changes-file/known-dists:
+ + [NT] New file based on data/changes-file/ubuntu-dists.
+ + [ADB] Add "quantal" (Quetzal)
+ * vendors/ubuntu/main/data/common/source-fields:
+ + [NT] New file.
+ * vendors/ubuntu/main/data/fields/{binary,udeb}-fields:
+ + [NT] New files.
+Checksums-Sha1:
+ 0b03babd3aa8571eb0af02af768f7c4fade12fbd 2462 lintian_2.5.7.dsc
+ 3af1c36dbe4ae3dc7b70aa375107928c28c8555f 1087847 lintian_2.5.7.tar.gz
+ 2ebf64764da8e9b03cea8555ec6db1cf5da38f59 692506 lintian_2.5.7_all.deb
+Checksums-Sha256:
+ 0dd400eff2da35e2e1b39370a0edf8a918ce3e3cdd68b6be2fcb53ae8a143e5f 2462 lintian_2.5.7.dsc
+ c56d7550e10acb7672708911c7636611d128ab7ec3eded8e70035737581f1a26 1087847 lintian_2.5.7.tar.gz
+ 5fd3554d5e76aa70334a4a56f87c75fe6a287b9723d64330621d7a423fffb2a0 692506 lintian_2.5.7_all.deb
+Files:
+ ab60445e9f6618d0b9349dbc8e3455c3 2462 devel optional lintian_2.5.7.dsc
+ ec47bdf0735e61fffd0a582cd76cdb74 1087847 devel optional lintian_2.5.7.tar.gz
+ af45b86b4b0a254ab0cb46fab4de2bbf 692506 devel optional lintian_2.5.7_all.deb
+
diff --git a/t/scripts/Lintian/Lab/data/changes/lintian_2.5.8_amd64.changes b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.8_amd64.changes
new file mode 100644
index 0000000..bd3d11f
--- /dev/null
+++ b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.8_amd64.changes
@@ -0,0 +1,106 @@
+Format: 1.8
+Date: Tue, 29 May 2012 11:49:47 +0200
+Source: lintian
+Binary: lintian
+Architecture: source all
+Version: 2.5.8
+Distribution: unstable
+Urgency: low
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Changed-By: Niels Thykier <niels@thykier.net>
+Description:
+ lintian - Debian package checker
+Closes: 662134 667895 669911 671387 673106 673109 673112 673198 673352 673449 673451 673611 673613 673862
+Changes:
+ lintian (2.5.8) unstable; urgency=low
+ .
+ Its like 2.5.7, only with less false positives and no FTBFS.
+ .
+ * checks/binaries{,.desc}:
+ + [NT] Fix a too strict regex causing false-positives for
+ biarch packages. This was a regression introduced in
+ version 2.5.7. Thanks to Sven Joachim for reporting it.
+ (Closes: #673106)
+ + [NT] Demote certainty of hardening-no-stackprotector to
+ wild-guess and move it to debian/extra-hardening profile.
+ + [NT] Skip hardening-no-fortify-functions for binaries only
+ using the unprotected memcpy. This greatly reduces the
+ number of false positives for binaries compiled with
+ gcc-4.7 -O2 (or higher optimization). (Closes: #673112)
+ * checks/files:
+ + [NT] Properly handle symlinks in icon directories. Thanks
+ to Nicholas Breen for the report and Felix Geyer for the
+ patches. (Closes: #673352)
+ + [NT] Ignore wrong sizes on images in animations as it may
+ be a method to implement the animation. Thanks to Matthias
+ Klumpp for the report and Felix Geyer for the patch.
+ (Closes: #673862)
+ + [NT] Ignore wrong icon sizes if the size difference is at
+ most 2px. Thanks to Felix Geyer for the patch.
+ * checks/scripts:
+ + [NT] Refactor the %versioned_interpreters into a new
+ data file.
+ * checks/shared-libs:
+ + [NT] Fix false positive "dev-pkg-without-shlib-symlink"
+ for shared libraries using "libtool -release X.Y".
+ Thanks to Sven Joachim for the report. (Closes: #673109)
+ + [NT] Fix false positive "dev-pkg-without-shlib-symlink"
+ for shared libraries installed in /lib. Lintian now
+ correctly expects the dev-symlink beneath /usr/lib.
+ Thanks to Guillem Jover for the report.
+ * checks/source-copyright:
+ + [NT] Use the in-memory contents of the copyright file
+ instead of re-reading the file when parsing it as a
+ DEP-5 copyright file.
+ .
+ * collection/objdump-info{,.desc}:
+ + [NT] Drop -D flag for readelf when looking for symbols.
+ This makes some checks more reliable in Ubuntu. Thanks
+ to Marc Deslauriers for the report and the patch.
+ (Closes: #673451)
+ .
+ * debian/control:
+ + [NT] Add versioned Build-Depends on dpkg-dev (>= 1.16.1~)
+ as the test suite relies on it. Thanks to Luca Falavigna
+ for reporting it.
+ + [NT] Update the description to mention that the version
+ of Lintian is calibrated for version 3.9.3 of the Policy.
+ * debian/lintian.install:
+ + [NT] Remove usr/share/lintian/data - Lintian does not
+ need it and dpkg will not replace the dir with a symlink.
+ .
+ * data/scripts/interpreters:
+ + [NT] Add falcon, gbr3, jython and ngp2 as known interpreters.
+ (Closes: #669911, #671387, #662134, #667895)
+ * data/scripts/versioned-interpreters:
+ + [NT] New file.
+ + [NT] Added python2.7 to the list of known Python 2 interpreters.
+ * data/spelling/corrections:
+ + [RA] Remove corrections for "writeable" and "overwriteable". These
+ spellings are permitted by the OED in UK English. (Closes: #673611)
+ + [NT] Add correction for "pointer".
+ .
+ * lib/Lintian/Collect/*.pm:
+ + [NT] Localize "$_" to avoid truncating caller's variable.
+ (Closes: #673613)
+ .
+ * t:
+ + [NT] Generate empty ".so" files used in the test. This
+ resolves an issue where dpkg-source would exclude them
+ causing a FTBFS. (Closes: #673198)
+ + [NT] Fix test failure in derivatives where some hardening
+ flags are enabled by default. Thanks to Marc Deslauriers
+ for the report and the patch. (Closes: #673449)
+Checksums-Sha1:
+ de2ae82463727f45b3d28dce15b89bbea8fc641c 2485 lintian_2.5.8.dsc
+ 576c06a94e7758e358a43b549b123052a7e49fdc 1092923 lintian_2.5.8.tar.gz
+ d6f247358c070a7e37c9f22c84aee63fbfd816fb 697324 lintian_2.5.8_all.deb
+Checksums-Sha256:
+ 20fd9f4084197aaa923af9a7bb7dba8cc06bd1ed307a16c8b14e275d91e1093f 2485 lintian_2.5.8.dsc
+ b0a6016d9a0e5ba3ed1fc00cabd8b3be75c572fcfee7cd5079d06c64f626d343 1092923 lintian_2.5.8.tar.gz
+ 587c014c2f87ea1359f139e5a37bce1acd0b1552d7c49ca0e54e5e8b24f57c5c 697324 lintian_2.5.8_all.deb
+Files:
+ 71653df24991d1734fea17f3205ef042 2485 devel optional lintian_2.5.8.dsc
+ 1121be8bcccaf75a571e4c17197bebbc 1092923 devel optional lintian_2.5.8.tar.gz
+ 4fd057457a01384ffdc4fa39888f4f4d 697324 devel optional lintian_2.5.8_all.deb
+
diff --git a/t/scripts/Lintian/Lab/data/changes/lintian_2.5.9_amd64.changes b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.9_amd64.changes
new file mode 100644
index 0000000..e3e3b69
--- /dev/null
+++ b/t/scripts/Lintian/Lab/data/changes/lintian_2.5.9_amd64.changes
@@ -0,0 +1,101 @@
+Format: 1.8
+Date: Fri, 15 Jun 2012 21:29:03 +0200
+Source: lintian
+Binary: lintian
+Architecture: source all
+Version: 2.5.9
+Distribution: unstable
+Urgency: low
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Changed-By: Niels Thykier <niels@thykier.net>
+Description:
+ lintian - Debian package checker
+Closes: 675139 675358 675826 675832 676799 677142 677310 677649
+Changes:
+ lintian (2.5.9) unstable; urgency=low
+ .
+ * Summary of tag changes:
+ + Added:
+ - run-parts-cron-filename-contains-illegal-chars
+ + Removed:
+ - run-parts-cron-filename-contains-full-stop
+ .
+ * checks/*:
+ + [NT] Migrate to new Lintian::Path API.
+ * checks/fields:
+ + [NT] Also classify lib*-cli-dev as belonging to the section
+ cli-mono (rather than libdevel). Thanks to Chow Loong Jin
+ for the report and the patch. (Closes: #675358)
+ * checks/files{,.desc}:
+ + [NT] Rename run-parts-cron-filename-contains-full-stop and
+ have it catch "+" in the filename as well. Add reference
+ to policy 9.5.1 in the tag description.
+ * checks/init.d:
+ + [NT] Use the proper regex for matching package names rather
+ than an ad-hoc regex. Thanks to Thorsten Alteholz for the
+ report and suggested patch. (Closes: #677142)
+ * checks/shared-libs:
+ + [NT] Reverse order of two subst expressions to prevent
+ dev-pkg-without-shlib-symlink false positives. Thanks to
+ Aurelien Jarno, Yves-Alexis Perez and Stephen M. Webb for
+ the reports and the patch.
+ (Closes: #675826, #677310, #675832)
+ + [NT] Clarify that dev-pkg-without-shlib-symlink is emitted
+ on library and not "-dev" packages.
+ .
+ * collection/hardening-info:
+ + [NT] Process binaries with hardening-check via xargs. This
+ greatly reduces the processing time for packages with many
+ binaries (like some of the linux binaries). Thanks to
+ Bastian Blank for the heads up.
+ + [NT] Skip kernel modules (.ko files).
+ * collection/hardening-info-helper:
+ + [NT] New file.
+ .
+ * data/*:
+ + [NT] Refresh with tools/data from sid.
+ * data/scripts/interpreters:
+ + [NT] Replace ngp2 with ngraph. Thanks to Koichi Akabe for
+ the report. (Closes: #675139)
+ * data/spelling/corrections:
+ + [NT] Add corrections for usage, invocation(s) and ancient.
+ .
+ * debian/changelog:
+ + [NT] raster-image-in-scalable-directory was added in 2.5.7,
+ not removed.
+ .
+ * frontend/lintian{,-info}:
+ + [NT] Remove assumption that $ENV{HOME} is set/defined. If
+ $ENV{HOME} is not sent, user specific profiles will simply
+ be ignored.
+ * frontend/lintian:
+ + [NT] Attempt to automatically determine what to process, if
+ no packages are given and debian/changelog exists. Thanks
+ to Gilles Filippini for the suggestion. (Closes: #676799)
+ .
+ * lib/Lintian/Check.pm:
+ + [NT] Add regex to match valid package names.
+ * lib/Lintian/Collect/Package.pm:
+ + [NT] sorted_index now returns a list rather than a list ref.
+ + [NT] Represent files (from index) as Lintian::Path objects.
+ * lib/Lintian/Collect/Source.pm:
+ + [NT] Recognise "Package-Type" as an alternative of the "X-"
+ field of same name. Thanks to Christian Perrier for the
+ report. (Closes: #677649)
+ * lib/Lintian/Data.pm:
+ + [NT] Gracefully handle the absence of $ENV{HOME}.
+ * lib/Lintian/Path.pm:
+ + [NT] New file.
+Checksums-Sha1:
+ 5910ab721c5785b01400b3444cb9d6904ad6a876 2485 lintian_2.5.9.dsc
+ 0f0de9cbf56a6702509a95c2c976ca8f6bafef47 1100166 lintian_2.5.9.tar.gz
+ 40be3ed688b6d01c66bf9440fccefb5c32b189f3 702742 lintian_2.5.9_all.deb
+Checksums-Sha256:
+ 9263501f00c3e3a762803375c8febc9cd651a34d4a3710f48e0d13266d3ead8d 2485 lintian_2.5.9.dsc
+ bd5c285d46ab54588819879e10e16d301542162cc886939c29ec2a4da05b7357 1100166 lintian_2.5.9.tar.gz
+ 6caf9ba0dd9b98713356d03818f844be36f4e58af44d14374ec1366631eb3a2a 702742 lintian_2.5.9_all.deb
+Files:
+ 152a018943890d860377d5438d58f6fa 2485 devel optional lintian_2.5.9.dsc
+ d5abfd1dbca688d0bcaa90890052b758 1100166 devel optional lintian_2.5.9.tar.gz
+ 44934b36c0b11b01579cc4713772897c 702742 devel optional lintian_2.5.9_all.deb
+
diff --git a/t/scripts/Lintian/Relation/01-basic.t b/t/scripts/Lintian/Relation/01-basic.t
new file mode 100755
index 0000000..7838957
--- /dev/null
+++ b/t/scripts/Lintian/Relation/01-basic.t
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use Lintian::Relation;
+
+my $relation = Lintian::Relation->new->load('pkgA, altA | altB');
+
+ok($relation->satisfies('pkgA'), 'Satisfies');
+ok(!$relation->satisfies('altA'), 'Satisfies alt');
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Relation/02-architecture.t b/t/scripts/Lintian/Relation/02-architecture.t
new file mode 100755
index 0000000..3bdefbe
--- /dev/null
+++ b/t/scripts/Lintian/Relation/02-architecture.t
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+use Lintian::Relation;
+
+my $relation
+ = Lintian::Relation->new->load_norestriction('pkgA [i386], pkgB [amd64]');
+
+ok($relation->satisfies('pkgA:any'), 'Implies arch alt [i386]');
+ok($relation->satisfies('pkgB:any'), 'Implies arch alt [amd64]');
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Relation/03-duplicates.t b/t/scripts/Lintian/Relation/03-duplicates.t
new file mode 100755
index 0000000..84d22c6
--- /dev/null
+++ b/t/scripts/Lintian/Relation/03-duplicates.t
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use Lintian::Relation;
+
+my $relation_a
+ = Lintian::Relation->new->load_norestriction(
+ 'pkgA, pkgB, pkgC, pkgA | pkgD');
+
+my $relation_b
+ = Lintian::Relation->new->load_norestriction(
+ 'pkgA, pkgB, pkgC, pkgD | pkgE');
+
+is_deeply(
+ $relation_a->redundancies,
+ (['pkgA:any', 'pkgA:any | pkgD:any']),
+ 'Find redundancies'
+);
+is($relation_b->redundancies, 0, 'No redundancies');
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Relation/04-multiarch.t b/t/scripts/Lintian/Relation/04-multiarch.t
new file mode 100755
index 0000000..7f18b6c
--- /dev/null
+++ b/t/scripts/Lintian/Relation/04-multiarch.t
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 12;
+
+use Lintian::Relation;
+
+my $orig = 'pkgA:any, pkgB, pkgC:i386';
+my $relation = Lintian::Relation->new->load($orig);
+
+ok($relation->satisfies('pkgA:any'), 'pkgA:any satisfies pkgA:any');
+
+ok($relation->satisfies('pkgB'), 'pkgB satisfies pkgB');
+
+ok(!$relation->satisfies('pkgC'), 'pkgC:i386 does not satisfy pkgC');
+ok($relation->satisfies('pkgC:i386'), 'pkgC:i386 satisfies pkgC:i386');
+
+ok($relation->satisfies('pkgB:any'), 'pkgB satisfies pkgB:any');
+
+ok(!$relation->satisfies('pkgA'), 'pkgA:any does not satisfy pkgA');
+
+ok(!$relation->satisfies('pkgC:any'), 'pkgC:i386 does not satisfy pkgC:any');
+
+is($relation->to_string, $orig, 'reconstituted eq original');
+
+my @redundancies1
+ = Lintian::Relation->new->load('pkgD, pkgD:any')->redundancies;
+is_deeply(
+ \@redundancies1,
+ [['pkgD', 'pkgD:any']],
+ 'pkgD and pkgD:any are redundant'
+);
+
+TODO: {
+ local $TODO = ':X => :Y cases are not implemented (in general)';
+
+ my @redundancies2
+ = Lintian::Relation->new->load('pkgD:i386, pkgD:any')->redundancies;
+ is_deeply(
+ \@redundancies2,
+ [['pkgD:i386', 'pkgD:any']],
+ 'pkgD:i386 and pkgD:any are redundant'
+ );
+}
+
+my @redundancies3
+ = Lintian::Relation->new->load('pkgD:i386, pkgD')->redundancies;
+is_deeply(\@redundancies3, [],'pkgD:i386 and pkgD are not redundant');
+
+my @redundancies4
+ = Lintian::Relation->new->load('pkgD:i386, pkgD:i386 (>= 1.0)')
+ ->redundancies;
+is_deeply(
+ \@redundancies4,
+ [['pkgD:i386', 'pkgD:i386 (>= 1.0)']],
+ 'Can detect pkgD:i386 redundancies'
+);
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Relation/05-invalid.t b/t/scripts/Lintian/Relation/05-invalid.t
new file mode 100755
index 0000000..9b42d62
--- /dev/null
+++ b/t/scripts/Lintian/Relation/05-invalid.t
@@ -0,0 +1,66 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+
+use Lintian::Relation;
+
+test_relation(
+ 'pkg%any (>= 1.0) , pkgB | _gf , pkgC(>=2.0)',
+ 'satisfied' => [
+ 'pkgB | _gf', # partly unparsable, but identity holds
+ 'pkgC (>= 1.0)', # regular entry
+ ],
+ 'not-satisfied' => [
+ 'pkg', # unparsable
+ 'pkg%any', # unparsable
+ 'pkgB', # OR relation with unparsable entry
+ '_gf', # OR relation
+ ],
+ 'unparsable' => ['_gf', 'pkg%any (>= 1.0)'],
+ 'reconstituted' => 'pkg%any (>= 1.0), pkgB | _gf, pkgC (>= 2.0)'
+);
+
+done_testing;
+
+sub test_relation {
+ my ($text, %tests) = @_;
+
+ my $relation_under_test = Lintian::Relation->new->load($text);
+
+ my $tests = 0;
+ if (my $reconstituted = $tests{'reconstituted'}) {
+ is($relation_under_test->to_string,
+ $reconstituted, "Reconstitute $text");
+ $tests++;
+ }
+
+ for my $other_relation (@{$tests{'satisfied'} // [] }) {
+ ok($relation_under_test->satisfies($other_relation),
+ "'$text' satisfies '$other_relation'");
+ $tests++;
+ }
+
+ for my $other_relation (@{$tests{'not-satisfied'} // [] }) {
+ ok(
+ !$relation_under_test->satisfies($other_relation),
+ "'$text' does NOT satisfy '$other_relation'"
+ );
+ $tests++;
+ }
+
+ if (my $unparsable = $tests{'unparsable'}) {
+ my @actual = $relation_under_test->unparsable_predicates;
+ is_deeply(\@actual, $unparsable, "Unparsable entries for '$text'");
+ }
+
+ cmp_ok($tests, '>=', 1, "Ran at least one test on '$text'");
+ return;
+}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Relation/06-build-profiles.t b/t/scripts/Lintian/Relation/06-build-profiles.t
new file mode 100755
index 0000000..824572d
--- /dev/null
+++ b/t/scripts/Lintian/Relation/06-build-profiles.t
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+use Lintian::Relation;
+
+my $relation = Lintian::Relation->new->load_norestriction(
+ 'pkgA (<= 1.0) <stage1 nocheck> <nobiarch>, pkgB (<< 1.0) <!nodoc>');
+
+ok($relation->satisfies('pkgA:any'),
+ 'Satisfies restrictions <stage1 nocheck> <nobiarch>');
+ok($relation->satisfies('pkgB:any'), 'Satisfies restriction <!nodoc>');
+
+my $rel = Lintian::Relation->new->load('pkgC <foo bar> <baz>');
+
+is($rel->to_string, 'pkgC <foo bar> <baz>', 'Reconstitute pkgC');
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Relation/07-implies.t b/t/scripts/Lintian/Relation/07-implies.t
new file mode 100644
index 0000000..85c7f74
--- /dev/null
+++ b/t/scripts/Lintian/Relation/07-implies.t
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use Lintian::Relation;
+
+my @TESTS = (
+ # A, B, A->I(B), A->I_I(B), B->I(A), B->I_I(A), line
+ # - with "I" being "satisfies" and "I_I" being "satisfies_inverse".
+ ['foo (= 1.0)', 'foo (= 2.0)', 0, 1, 0, 1, __LINE__],
+ ['foo (>= 1.0)', 'foo (= 2.0)', 0, 0, 1, 0, __LINE__],
+ ['foo (>= 2.0)', 'foo (>= 1.0)', 1, 0, 0, 0, __LINE__],
+ ['foo (>> 1.0)', 'foo (>= 1.0)', 1, 0, 0, 0, __LINE__],
+ ['foo (>> 2.0)', 'foo (>> 1.0)', 1, 0, 0, 0, __LINE__],
+ ['foo (<= 1.0)', 'foo (<= 2.0)', 1, 0, 0, 0, __LINE__],
+ ['foo (<< 1.0)', 'foo (<= 1.0)', 1, 0, 0, 0, __LINE__],
+ ['foo (<< 1.0)', 'foo (<< 2.0)', 1, 0, 0, 0, __LINE__],
+);
+
+plan tests => scalar(@TESTS) * 4;
+
+for my $test (@TESTS) {
+ my ($a_raw, $b_raw, $a_i_b, $a_ii_b, $b_i_a, $b_ii_a, $lno) = @{$test};
+
+ my $relation_a = Lintian::Relation->new->load($a_raw);
+ my $relation_b = Lintian::Relation->new->load($b_raw);
+
+ is($relation_a->satisfies($relation_b),
+ $a_i_b, "$a_raw satisfies $b_raw (case 1, line $lno)");
+ is($relation_a->satisfies_inverse($relation_b),
+ $a_ii_b,"$test->[0] satisfies inverse $test->[1] (case 2, line $lno)");
+
+ is($relation_b->satisfies($relation_a),
+ $b_i_a,"$b_raw satisfies $a_raw (case 3, line $test->[6])");
+ is($relation_b->satisfies_inverse($relation_a),
+ $b_ii_a, "$b_raw satisfies inverse $a_raw (case 4, line $lno)");
+}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Util/data/pgp-eof-missing-sign b/t/scripts/Lintian/Util/data/pgp-eof-missing-sign
new file mode 100644
index 0000000..78e5ee9
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-eof-missing-sign
@@ -0,0 +1,5 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: lintian
+
+# Missing signature block
diff --git a/t/scripts/Lintian/Util/data/pgp-leading-unsigned b/t/scripts/Lintian/Util/data/pgp-leading-unsigned
new file mode 100644
index 0000000..0b6b949
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-leading-unsigned
@@ -0,0 +1,14 @@
+Package: dpkg
+
+# Unsigned above, signed below (bad)
+
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: lintian
+
+-----BEGIN PGP SIGNATURE-----
+
+Some signature.
+
+-----END PGP SIGNATURE-----
+
diff --git a/t/scripts/Lintian/Util/data/pgp-malformed-header b/t/scripts/Lintian/Util/data/pgp-malformed-header
new file mode 100644
index 0000000..a9e2e7b
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-malformed-header
@@ -0,0 +1,11 @@
+# Missing a dash in the end
+
+-----BEGIN PGP SIGNED MESSAGE----
+
+Package: lintian
+
+-----BEGIN PGP SIGNATURE----
+
+Some signature.
+
+-----END PGP SIGNATURE----
diff --git a/t/scripts/Lintian/Util/data/pgp-no-end-pgp-header b/t/scripts/Lintian/Util/data/pgp-no-end-pgp-header
new file mode 100644
index 0000000..6d15d98
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-no-end-pgp-header
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: lintian
+
+-----BEGIN PGP SIGNATURE-----
+
+Some signature, missing an end marker.
diff --git a/t/scripts/Lintian/Util/data/pgp-sig-before-start b/t/scripts/Lintian/Util/data/pgp-sig-before-start
new file mode 100644
index 0000000..1d7cf12
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-sig-before-start
@@ -0,0 +1,7 @@
+Package: lintian
+
+-----BEGIN PGP SIGNATURE-----
+
+Some signature.
+
+-----END PGP SIGNATURE-----
diff --git a/t/scripts/Lintian/Util/data/pgp-trailing-unsigned b/t/scripts/Lintian/Util/data/pgp-trailing-unsigned
new file mode 100644
index 0000000..1d29d87
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-trailing-unsigned
@@ -0,0 +1,14 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: lintian
+
+-----BEGIN PGP SIGNATURE-----
+
+Some signature.
+
+-----END PGP SIGNATURE-----
+
+# Signed above, unsigned below (bad)
+
+Package: dpkg
+
diff --git a/t/scripts/Lintian/Util/data/pgp-two-signatures b/t/scripts/Lintian/Util/data/pgp-two-signatures
new file mode 100644
index 0000000..0c0b7d6
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-two-signatures
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: lintian
+
+-----BEGIN PGP SIGNATURE-----
+
+Some signature.
+
+-----END PGP SIGNATURE-----
+
+-----BEGIN PGP SIGNATURE-----
+
+Another signature.
+
+-----END PGP SIGNATURE-----
+
diff --git a/t/scripts/Lintian/Util/data/pgp-two-signed-msgs b/t/scripts/Lintian/Util/data/pgp-two-signed-msgs
new file mode 100644
index 0000000..c8fcf9d
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-two-signed-msgs
@@ -0,0 +1,19 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: lintian
+
+-----BEGIN PGP SIGNATURE-----
+
+Some signature.
+
+-----END PGP SIGNATURE-----
+
+-----BEGIN PGP SIGNED MESSAGE-----
+
+Package: dpkg
+
+-----BEGIN PGP SIGNATURE-----
+
+Aother signature.
+
+-----END PGP SIGNATURE-----
diff --git a/t/scripts/Lintian/Util/data/pgp-unexpected-header b/t/scripts/Lintian/Util/data/pgp-unexpected-header
new file mode 100644
index 0000000..743ac85
--- /dev/null
+++ b/t/scripts/Lintian/Util/data/pgp-unexpected-header
@@ -0,0 +1,6 @@
+-----BEGIN PGP MESSAGE-----
+
+We are expecting a "SIGNED" message.
+
+-----END PGP MESSAGE-----
+
diff --git a/t/scripts/Lintian/Util/dctrl-parser.t b/t/scripts/Lintian/Util/dctrl-parser.t
new file mode 100755
index 0000000..36d9961
--- /dev/null
+++ b/t/scripts/Lintian/Util/dctrl-parser.t
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Syntax::Keyword::Try;
+use Test::More;
+
+use Lintian::Deb822;
+
+my %TESTS_BAD = (
+ 'pgp-sig-before-start' => qr/PGP signature before message/,
+ 'pgp-two-signatures' => qr/Found two PGP signatures/,
+ 'pgp-unexpected-header' => qr/Unexpected .+ header/,
+ 'pgp-malformed-header' => qr/Malformed PGP header/,
+
+ 'pgp-two-signed-msgs' => qr/Multiple PGP messages/,
+ 'pgp-no-end-pgp-header' => qr/Cannot find END PGP SIGNATURE/,
+ 'pgp-leading-unsigned' => qr/Expected PGP MESSAGE header/,
+ 'pgp-trailing-unsigned' => qr/Data after PGP SIGNATURE/,
+ 'pgp-eof-missing-sign' => qr/Cannot find BEGIN PGP SIGNATURE/,
+);
+
+my $DATADIR = $0;
+$DATADIR =~ s{[^/]+$}{};
+if ($DATADIR) {
+ # invoked in some other dir
+ $DATADIR = "$DATADIR/data";
+} else {
+ # current dir
+ $DATADIR = 'data';
+}
+
+plan skip_all => 'Data files not available'
+ unless -d $DATADIR;
+
+plan tests => scalar keys %TESTS_BAD;
+
+for my $filename (sort keys %TESTS_BAD) {
+
+ my $path = "$DATADIR/$filename";
+
+ my $deb822 = Lintian::Deb822->new;
+
+ try {
+ $deb822->read_file($path);
+
+ } catch {
+ my $error = $@;
+
+ my $fail_regex = $TESTS_BAD{$filename};
+ like($error, $fail_regex, $filename);
+
+ next;
+ }
+
+ fail("$path was parsed successfully");
+}
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et
diff --git a/t/scripts/Lintian/Util/path.t b/t/scripts/Lintian/Util/path.t
new file mode 100755
index 0000000..21c359a
--- /dev/null
+++ b/t/scripts/Lintian/Util/path.t
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Const::Fast;
+use Test::More tests => 18;
+
+const my $EMPTY => q{};
+const my $SLASH => q{/};
+const my $DOT => q{.};
+
+# Lintian::Util exports fail, which clashes with Test::More, so we
+# have to be explicit about the import(s).
+BEGIN {
+ use_ok('Lintian::Util', qw(normalize_pkg_path normalize_link_target));
+}
+
+# Safe - absolute
+is(normalize_link_target('usr/share/java', '/usr/share/ant/file'),
+ 'usr/share/ant/file', 'Safe absolute path');
+is(normalize_link_target('usr/share/ant', $SLASH),
+ $EMPTY, 'Safe absolute root');
+
+# Safe - relative
+is(normalize_link_target('/usr/share/java', './file/.'),
+ 'usr/share/java/file', 'Safe simple same-dir path');
+is(normalize_link_target('/usr/share/java', '../ant/./file'),
+ 'usr/share/ant/file', 'Safe simple relative path');
+is(
+ normalize_link_target(
+ 'usr/share/java', '../../../usr/./share/../share/./ant/file'
+ ),
+ 'usr/share/ant/file',
+ 'Safe absurd relative path'
+);
+is(
+ normalize_pkg_path(
+ 'usr/share/java/../../../usr/./share/../share/./ant/file'),
+ 'usr/share/ant/file',
+ 'Safe absurd single path argument'
+);
+is(normalize_link_target('usr/share/java', $DOT),
+ 'usr/share/java', 'Safe relative dot path');
+is(normalize_link_target($SLASH, $DOT), $EMPTY, 'Safe relative root dot');
+is(normalize_link_target($SLASH, 'usr/..'),
+ $EMPTY, 'Safe absurd relative root path');
+is(normalize_link_target('usr/share/java', '../../../'),
+ $EMPTY, 'Safe absurd relative path to root');
+is(normalize_pkg_path($DOT), $EMPTY, 'Safe single argument root dot');
+is(normalize_pkg_path($SLASH), $EMPTY, 'Safe single argument root slash');
+is(normalize_pkg_path('usr/..'),
+ $EMPTY, 'Safe absurd single relative root path');
+is(normalize_pkg_path('usr/share/java/../../../'),
+ $EMPTY, 'Safe absurd single relative path to root');
+
+# Unsafe
+is(normalize_link_target('/usr/share/ant', '../../../../etc/passwd'),
+ undef, 'Unsafe - relative escape root');
+is(normalize_link_target('/usr/share/ant', '/../etc/passwd'),
+ undef, 'Unsafe - absolute escape root');
+is(normalize_pkg_path('/usr/../../etc/passwd'),
+ undef, 'Unsafe - single path escape root');
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et