Import Upstream version 2.117.0

This commit is contained in:
luoyaoming 2024-05-07 09:34:01 +08:00
parent dc9a7a800a
commit 4a647da510
326 changed files with 2579 additions and 30341 deletions

23
.gitignore vendored
View File

@ -1,23 +0,0 @@
/*-stamp
/debian/*.debhelper*
/debian/debhelper-build-stamp
/debian/files
/debian/lintian.substvars
/debian/lintian/
/debian/test-out/
/debian/test.locale/
/doc/api.html/
/doc/README
/doc/help.tmp
/doc/lintian.html
/doc/lintian.txt
/l10n/
/man/man*/
*.iml
/.idea/
/.nobackup
*.bak
*.rej
cover_db*
/coverage-report
/TAGS

View File

@ -1,12 +0,0 @@
Bastien ROUCARIÈS <roucaries.bastien+debian@gmail.com>
Damyan Ivanov <dmn@debian.org>
Jakub Wilk <jwilk@debian.org>
Jean-Michel Vourgère <jmv_deb@nirgal.com>
Jean-Michel Vourgère <nirgal@debian.org>
Johannes Schauer <j.schauer@email.de>
Justin B Rye <jbr@edlug.org.uk>
Justin B Rye <justin.byam.rye@gmail.com>
Marcelo Jorge Vieira <metal@alucinados.com>
Marcelo Jorge Vieira <metal@debian.org>
Raphaël Hertzog <hertzog@debian.org>
Tobias Quathamer <toddy@debian.org>

View File

@ -12,10 +12,11 @@ on [salsa.debian.org][salsa]. First, create an account on Salsa if you
do not have one. You need to configure at least one SSH key. do not have one. You need to configure at least one SSH key.
The easiest way to file merge requests on Salsa is to fork our team The easiest way to file merge requests on Salsa is to fork our team
repository into your private name space. That is done on the website. repository into your private namespace. That is done on the salsa
website.
Then you should clone the forked version of Lintian from your private Then you should clone the forked version of Lintian from your private
name space to your local machine. You can find the command for that namespace to your local machine. You can find the command for that
under a blue button that says "Clone'. Choose the git protocol (not under a blue button that says "Clone'. Choose the git protocol (not
HTTPS). HTTPS).
@ -28,7 +29,7 @@ Create a feature branch for your proposed changes.
### Make Lintian better ### Make Lintian better
Now you can fix bugs or implement new checks. Now you can fix bugs or implement new features.
Please commit your changes with suitable explanations in the commit Please commit your changes with suitable explanations in the commit
messages. You can find some examples with: messages. You can find some examples with:
@ -49,121 +50,152 @@ you provide tests for your proposed tags.
There is a way to exempt your tag from testing, but please do not do There is a way to exempt your tag from testing, but please do not do
so. so.
Our test specifications have two parts. One declares how to build the Most tests only run a specific lintian 'check'. Please name your tests
test package. The other declares how to run Lintian on it. after this check: do not name them after the tag they are testing
because many tags need two or more tests to exercise subtle variations
in the trigger conditions.
The build instructions are almost completely parameterized. In many Test specifications have two parts, build specifications and
cases, you will not need to copy or modify any templates. For each evaluation specifications. Build specifications tell the testsuite how
test, the build specifications are located in the file to build a test package, and evaluation specifications declare how to
${recipe-dir}/build-spec/fill-values. run Lintian on the package and say what the expected output is.
A simple one might look like this: Build specifications are located in the directory
't/recipes/path/to/test/build-spec/'. This must contain:
- A partial debian/ directory that includes as little packaging files
as possible
- An optional 'orig' directory containing upstream files (if any are
needed to trigger the tag)
- A file called 'fill-values' that tells the test suite how to use
existing template to 'fill in' anything not included in debian/
For most tests, debian/ will be very minimal indeed. A simple
'fill-values' might look like this:
Skeleton: upload-native Skeleton: upload-native
Testname: pdf-in-etc Testname: pdf-in-etc
Description: Ships a PDF file in /etc Description: Ships a PDF file in /etc
Such a package would probably be used to trigger a tag about This will use the 'upload-native' template to create a native package
documentation in a place other than /usr/share/doc. Please do not look with the given 'Description'. The 'debian' directory would have a
for this test in the test suite; it is ficticious. one-line 'install' file putting some PDF documentation in /etc, and a
PDF file would be included in orig. (Please do not look for this test
in the test suite; it is just an example).
For most tests, we run only the check being tested. That is why the Evaluation specifications are located in the directory
tests are sorted according to the check to which they belong. 't/recipes/path/to/test/eval/'. These describes how to run Lintian and
which output (tags, exit code) to expect.
Please name your tests after what they contain. Do not name them after The main file is 'desc'. A simple evaluation specification might look
the tag they are testing. Many tags use two or more tests to exercise like this:
subtle variations in the trigger conditions.
The second part of each test describes how to run Lintian and which
tags to expect. Evaluation specifications are located in the file
${recipe-dir}/eval/desc.
A simple evaluation specification might look like this:
Testname: pdf-in-etc Testname: pdf-in-etc
Check: documentation Check: documentation
As noted, this will only run the specified check. It eliminates all As noted, this will only run the specified 'documentation' check. This
nuisance tags, such as debian-watch-does-not-check-gpg-signature keeps output to a minimum so you do not get nuisance tags, such as
(unless you are working on the check debian/watch). debian-watch-does-not-check-gpg-signature (unless you are working on
the a check for debian/watch). The contents of the 'Testname' field
must match the directory name.
Another file in that same directory shows the tags expected to be A 'hints' file in the eval directory contains the tags that lintian is
triggered. Only tags from the selected check will show up there. expected to be produce when run on the test package. Only tags from
the selected 'check' should be included.
You should scrupulously examine that file to make sure your tags show You should scrupulously examine the 'hints' to make sure your tags
up exactly the way you want, but you do not have to write it show up exactly the way you want, but you do not have to write it
yourself. The test suite will do it for you during the interactive yourself. The test suite will help you write this during the
calibration in the next step. interactive calibration described in the next step.
### Calibrate your tests Further details are in the file t/recipes/README
To build the test package you probably have to install all test ### Preparing to run the test suite
prerequisites from d/tests/control. Usually, that can be done with:
$ autopkgtest -B To run the testsuite you probably have to install all testsuite
prerequisites from lintian's debian/tests/control. This can be done
with:
If anyhing else is missing, you may also have to install the build # autopkgtest -B
prerequisites. That can be done with:
$ apt build-dep . You may also have to install the build dependencies with:
Both of these commands have to be run with superuse privileges (root). # apt build-dep .
As you might imagine, Lintian comes with a large number of test Both of these commands have to be run with root privileges.
packages. You have to build all of them locally. It takes time the
first time around but is much faster in subsequent runs. You can build
the test packages with:
$ private/build-test-packages ### Running the testsuite
Now, please calibrate your tests. For the documentation check the To run all tests run
command would be:
$ private/runtests
This takes a long time the first time you run it because Lintian has a
large number of tests each building its own test package. The
packages are built locally (in debian/test-out/) and reused so
subsequent runs are much faster.
To run a subset of tests, use --onlyrun:
$ private/runtests --onlyrun=check:documentation $ private/runtests --onlyrun=check:documentation
Make sure to select the check you are actually modifying. This runs all tests that have 'Check: documentation' in their
'eval/desc' file. Alternatively,
The interactive calibration will add expected tags to your test $ private/runtests --onlyrun=test:name
specifications. In many cases, it is best to "accept all" and examine
the changes in git. In complex cases, you can use git add -i to accept
only the ones you need.
This is a crucial step. Please make sure the expected tags are Will run a single test with 'Testname: name'. Running
meaningful. We also pay close attention to these tags when we look at
your merge request. $ private/runtests --help
will show you further options.
### Calibrating tests to fix test failures
If tests fail, the teststuite will use an interactive 'calibration'
process to help you write or amend a 'hints' file. Simply follow
the instructions on the screen. In many cases, it is best to "accept
all" and examine the changes in git. In complex cases, you can use
'git add -i' to stage only the changes you need.
This is a crucial step when adding a new test. Please make sure the
expected tags are correct. We pay close attention to these tags when
we look at your merge request.
### Run the full test suite ### Run the full test suite
Finally, please start the entire test suite. It will run a variety of Once your test is correct and passing, please ensure the entire test
style and consistency tests. The most common issue is that you have to suite passes. This includes a variety of style and consistency
run perltidy. tests.
We configure perltidy in a special way. Please run it from the The most common issue detected is that you have to run perltidy. We
configure perltidy in a special way. Please run it from the
repository's base directory. Otherwise it will not find the custom repository's base directory. Otherwise it will not find the custom
configuration, and the test suite will not pass. configuration, and the test suite will not pass.
### Submit your merge request ### Submit a merge request
Finally, please push your changes to the Lintian repo in your own name Once all the above is done, please push your changes to your Lintian
space. You may end up doing that multiple times, It will eventually fork on salsa.
require the force switch.
You may end up doing that multiple times: use
$ git push -f $ git push -f
That command will respond with the single most important message in to keep the git history simple.
this document. Salsa will ask you to create a merge request. Just
click the link provided in the terminal.
Your browser will open a draft merge request. For a single commit, the After each push you will be shown a link to create a merge
text field is populated with your commit message. Otherwise, please request. Just click the link provided in the terminal. Your browser
explain the purpose of your commit series and hit "Submit". will open a draft merge request. For a single commit, the text field
is populated with your commit message. Otherwise, please explain the
purpose of your commit series and hit "Submit".
The push command also started the standard CI pipeline on Salsa, which The push command also started the standard CI pipeline on Salsa, which
is very comprehensive. It builds Debian packages and runs autopkgtest, is very comprehensive. It builds Debian packages and runs autopkgtest,
among many other jobs. among many other jobs.
We will generally not accept merge requests unless the CI pipeline We will generally not accept merge requests unless the CI pipeline
passes sucessfully. You can see the status on Salsa in two places: in passes successfully. You can see the status on Salsa in two places: in
the MR and in your own repo. The pipeline takes about one hundred the MR and in your own repo. The pipeline takes about one hundred
minutes. minutes.

View File

@ -51,7 +51,7 @@ can find the Lintian User's Manual in:
$ sensible-browser /usr/share/doc/lintian/lintian.html $ sensible-browser /usr/share/doc/lintian/lintian.html
# or in txt format # or in txt format
$ less /usr/share/doc/lintian/lintian.txt.gz $ zless /usr/share/doc/lintian/lintian.txt.gz
Compiling Lintian Compiling Lintian

View File

@ -614,7 +614,7 @@ unless (@ARGV || $selected{'packages-from-file'}) {
if ($selected{debug}) { if ($selected{debug}) {
say {*STDERR} encode_utf8("Lintian v$ENV{LINTIAN_VERSION}"); say {*STDERR} encode_utf8("Lintian v$ENV{LINTIAN_VERSION}");
say {*STDERR} encode_utf8("Lintian root directory: $ENV{LINTIAN_BASE}"); say {*STDERR} encode_utf8("Lintian root directory: $ENV{LINTIAN_BASE}");
say {*STDERR} encode_utf8("Configuration file: $LINTIAN_CFG"); say {*STDERR} encode_utf8('Configuration file: '.($LINTIAN_CFG//'(none)'));
} }
if (defined $selected{LINTIAN_PROFILE}) { if (defined $selected{LINTIAN_PROFILE}) {

File diff suppressed because it is too large Load Diff

View File

@ -35,6 +35,7 @@ i386 ~~^ELF 32-bit LSB .* 80386, .* (?:GNU/Linux|(?!GNU)).*$
ia64 ~~^ELF 64-bit LSB .* IA-64 ia64 ~~^ELF 64-bit LSB .* IA-64
kfreebsd-amd64~~^ELF 64-bit LSB .* x86-64, .* (?:GNU/kFreeBSD|(?!GNU)).*$ kfreebsd-amd64~~^ELF 64-bit LSB .* x86-64, .* (?:GNU/kFreeBSD|(?!GNU)).*$
kfreebsd-i386 ~~^ELF 32-bit LSB .* 80386, .* (?:GNU/kFreeBSD|(?!GNU)).*$ kfreebsd-i386 ~~^ELF 32-bit LSB .* 80386, .* (?:GNU/kFreeBSD|(?!GNU)).*$
loong64 ~~^ELF 64-bit LSB .* LoongArch
lpia ~~^ELF 32-bit LSB .* 80386, .* (?:GNU/Linux|(?!GNU)).*$ lpia ~~^ELF 32-bit LSB .* 80386, .* (?:GNU/Linux|(?!GNU)).*$
m32r ~~^ELF 32-bit MSB .* M32R m32r ~~^ELF 32-bit MSB .* M32R
m68k ~~^ELF 32-bit MSB .* 680[02]0 m68k ~~^ELF 32-bit MSB .* 680[02]0

View File

@ -85,6 +85,7 @@ libupnp ||source-regex=libupnp\d?||(?m)(?:SSDP_LIB: New Request Handler:Error|
libxml2 || ||root and DTD name do not match libxml2 || ||root and DTD name do not match
libyaml || ||(?m)^did not find expected <stream-start> libyaml || ||(?m)^did not find expected <stream-start>
libytnef || ||Signature does not match\. Not TNEF\. libytnef || ||Signature does not match\. Not TNEF\.
libzstd || ||pathological dataset : literals are not compressible : samples are noisy or too regular
ltdl ||source=libtool ||(?m)^library already shutdown ltdl ||source=libtool ||(?m)^library already shutdown
mbedtls || ||(?m)^(?:ASN1 - Actual length differs from expected length|SSL - The connection indicated an EOF) mbedtls || ||(?m)^(?:ASN1 - Actual length differs from expected length|SSL - The connection indicated an EOF)
mpfr ||source=mpfr4 ||MPFR: Can't allocate memory mpfr ||source=mpfr4 ||MPFR: Can't allocate memory
@ -102,6 +103,7 @@ taglib || ||One of the size bytes in the id3v2 header was greater than the al
t1lib || ||t1lib is copyright \(c\) Rainer Menzner t1lib || ||t1lib is copyright \(c\) Rainer Menzner
tiff ||source-regex=tiff\d* ||No space for PixarLog state block tiff ||source-regex=tiff\d* ||No space for PixarLog state block
tinyxml || ||(?m)^(?:Error when TiXmlDocument added to document|Error null \(0\) or unexpected EOF found in input stream\.) tinyxml || ||(?m)^(?:Error when TiXmlDocument added to document|Error null \(0\) or unexpected EOF found in input stream\.)
yajl || ||context_pop: Bottom of stack reached prematurely
# We exclude version strings starting with "4 " since that's a mark of the # We exclude version strings starting with "4 " since that's a mark of the
# Pascal implementation, which is not what this tag is designed to detect. # Pascal implementation, which is not what this tag is designed to detect.

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,10 @@
# Codenames # Codenames
jessie
stretch stretch
buster buster
bullseye bullseye
bookworm
sid sid
# Aliases # Aliases

View File

@ -85,6 +85,9 @@ X-Python3-Version
XB-Ruby-Versions XB-Ruby-Versions
# See https://bugs.debian.org/1014885 and
# https://bugs.debian.org/1029471 for Lintian issues with specifically
# the "XS-" prefix
XS-Autobuild XS-Autobuild
XS-Go-Import-Path XS-Go-Import-Path
XS-Ruby-Versions XS-Ruby-Versions

View File

@ -50,6 +50,16 @@
"dh-buildinfo" "dh-buildinfo"
] ]
}, },
"builtusing" : {
"installed_by" : [
"dh-builtusing"
]
},
"cargo" : {
"installed_by" : [
"dh-cargo"
]
},
"cli" : { "cli" : {
"installed_by" : [ "installed_by" : [
"cli-common-dev" "cli-common-dev"
@ -90,6 +100,11 @@
"dh-cmake" "dh-cmake"
] ]
}, },
"cruft" : {
"installed_by" : [
"dh-cruft"
]
},
"ctest" : { "ctest" : {
"installed_by" : [ "installed_by" : [
"dh-cmake" "dh-cmake"
@ -100,6 +115,11 @@
"dh-di" "dh-di"
] ]
}, },
"debputy" : {
"installed_by" : [
"dh-debputy"
]
},
"dist_zilla" : { "dist_zilla" : {
"installed_by" : [ "installed_by" : [
"dh-dist-zilla" "dh-dist-zilla"
@ -110,6 +130,11 @@
"dh-dkms" "dh-dkms"
] ]
}, },
"doxygen" : {
"installed_by" : [
"doxygen"
]
},
"dwz" : { "dwz" : {
"installed_by" : [ "installed_by" : [
"libdebhelper-perl" "libdebhelper-perl"
@ -142,7 +167,7 @@
}, },
"gir" : { "gir" : {
"installed_by" : [ "installed_by" : [
"gobject-introspection" "gobject-introspection-bin"
] ]
}, },
"gnome" : { "gnome" : {
@ -155,11 +180,21 @@
"dh-golang" "dh-golang"
] ]
}, },
"grantlee" : {
"installed_by" : [
"libgrantlee5-dev"
]
},
"haskell" : { "haskell" : {
"installed_by" : [ "installed_by" : [
"dh-haskell" "dh-haskell"
] ]
}, },
"installdebputy" : {
"installed_by" : [
"dh-debputy"
]
},
"installinitramfs" : { "installinitramfs" : {
"installed_by" : [ "installed_by" : [
"libdebhelper-perl" "libdebhelper-perl"
@ -170,6 +205,11 @@
"dh-nss" "dh-nss"
] ]
}, },
"installsysusers" : {
"installed_by" : [
"libdebhelper-perl"
]
},
"javahelper" : { "javahelper" : {
"installed_by" : [ "installed_by" : [
"javahelper" "javahelper"
@ -225,6 +265,11 @@
"mkdocs" "mkdocs"
] ]
}, },
"movetousr" : {
"installed_by" : [
"libdebhelper-perl"
]
},
"nginx" : { "nginx" : {
"installed_by" : [ "installed_by" : [
"nginx-dev" "nginx-dev"
@ -255,9 +300,14 @@
"dh-octave" "dh-octave"
] ]
}, },
"package_notes" : { "pd_lib_builder" : {
"installed_by" : [ "installed_by" : [
"dh-package-notes" "dh-puredata"
]
},
"pdl" : {
"installed_by" : [
"pdl"
] ]
}, },
"perl6" : { "perl6" : {
@ -315,21 +365,16 @@
"ppp-dev" "ppp-dev"
] ]
}, },
"puredata" : {
"installed_by" : [
"dh-puredata"
]
},
"pyppd" : { "pyppd" : {
"installed_by" : [ "installed_by" : [
"pyppd" "pyppd"
] ]
}, },
"pypy" : {
"installed_by" : [
"dh-python"
]
},
"python2" : {
"installed_by" : [
"dh-python"
]
},
"python3" : { "python3" : {
"installed_by" : [ "installed_by" : [
"dh-python" "dh-python"
@ -415,6 +460,11 @@
"tex-common" "tex-common"
] ]
}, },
"user_session_migration" : {
"installed_by" : [
"dh-user-session-migration"
]
},
"uwsgi" : { "uwsgi" : {
"installed_by" : [ "installed_by" : [
"uwsgi-dev" "uwsgi-dev"
@ -469,6 +519,11 @@
"installed_by" : [ "installed_by" : [
"zathura-dev" "zathura-dev"
] ]
},
"zz_debputy" : {
"installed_by" : [
"dh-debputy"
]
} }
}, },
"preamble" : { "preamble" : {

View File

@ -113,6 +113,11 @@
"dh-buildinfo" "dh-buildinfo"
] ]
}, },
"dh_builtusing" : {
"installed_by" : [
"dh-builtusing"
]
},
"dh_clean" : { "dh_clean" : {
"installed_by" : [ "installed_by" : [
"debhelper" "debhelper"
@ -194,6 +199,12 @@
"dh-cmake" "dh-cmake"
] ]
}, },
"dh_cruft" : {
"installed_by" : [
"dh-cruft"
],
"uses_autoscript" : 1
},
"dh_ctest_build" : { "dh_ctest_build" : {
"installed_by" : [ "installed_by" : [
"dh-cmake" "dh-cmake"
@ -229,6 +240,11 @@
"dh-cmake" "dh-cmake"
] ]
}, },
"dh_debputy" : {
"installed_by" : [
"dh-debputy"
]
},
"dh_di_kernel_gencontrol" : { "dh_di_kernel_gencontrol" : {
"installed_by" : [ "installed_by" : [
"dh-di" "dh-di"
@ -293,12 +309,16 @@
"debhelper" "debhelper"
] ]
}, },
"dh_fortran_lib" : {
"installed_by" : [
"dh-fortran-mod"
]
},
"dh_fortran_mod" : { "dh_fortran_mod" : {
"installed_by" : [ "installed_by" : [
"dh-fortran-mod" "dh-fortran-mod"
], ],
"uses_autoscript" : 1, "uses_autoscript" : 1
"uses_misc_depends" : 1
}, },
"dh_gencontrol" : { "dh_gencontrol" : {
"installed_by" : [ "installed_by" : [
@ -318,7 +338,7 @@
}, },
"dh_girepository" : { "dh_girepository" : {
"installed_by" : [ "installed_by" : [
"gobject-introspection" "gobject-introspection-bin"
] ]
}, },
"dh_gnome" : { "dh_gnome" : {
@ -346,6 +366,11 @@
"dh-golang" "dh-golang"
] ]
}, },
"dh_grantlee" : {
"installed_by" : [
"libgrantlee5-dev"
]
},
"dh_gstscancodecs" : { "dh_gstscancodecs" : {
"installed_by" : [ "installed_by" : [
"libgstreamer1.0-dev" "libgstreamer1.0-dev"
@ -500,6 +525,11 @@
"uses_autoscript" : 1, "uses_autoscript" : 1,
"uses_misc_depends" : 1 "uses_misc_depends" : 1
}, },
"dh_installdebputy" : {
"installed_by" : [
"dh-debputy"
]
},
"dh_installdirs" : { "dh_installdirs" : {
"installed_by" : [ "installed_by" : [
"debhelper" "debhelper"
@ -766,6 +796,11 @@
"pkg-kde-tools" "pkg-kde-tools"
] ]
}, },
"dh_movetousr" : {
"installed_by" : [
"debhelper"
]
},
"dh_nginx" : { "dh_nginx" : {
"installed_by" : [ "installed_by" : [
"nginx-dev" "nginx-dev"
@ -778,6 +813,11 @@
"dh-nodejs" "dh-nodejs"
] ]
}, },
"dh_nodejs_build_debug_package" : {
"installed_by" : [
"dh-nodejs"
]
},
"dh_nodejs_substvars" : { "dh_nodejs_substvars" : {
"installed_by" : [ "installed_by" : [
"dh-nodejs" "dh-nodejs"
@ -844,11 +884,6 @@
"dh-octave" "dh-octave"
] ]
}, },
"dh_package_notes" : {
"installed_by" : [
"dh-package-notes"
]
},
"dh_pdl" : { "dh_pdl" : {
"installed_by" : [ "installed_by" : [
"pdl" "pdl"
@ -929,24 +964,17 @@
"debhelper" "debhelper"
] ]
}, },
"dh_puredata_substvar" : {
"installed_by" : [
"dh-puredata"
]
},
"dh_pyppd" : { "dh_pyppd" : {
"installed_by" : [ "installed_by" : [
"pyppd" "pyppd"
], ],
"uses_misc_depends" : 1 "uses_misc_depends" : 1
}, },
"dh_pypy" : {
"installed_by" : [
"dh-python"
],
"uses_autoscript" : 1
},
"dh_python2" : {
"installed_by" : [
"dh-python"
],
"uses_autoscript" : 1
},
"dh_python3" : { "dh_python3" : {
"installed_by" : [ "installed_by" : [
"dh-python" "dh-python"
@ -978,6 +1006,11 @@
"dh-raku" "dh-raku"
] ]
}, },
"dh_raku_clean" : {
"installed_by" : [
"dh-raku"
]
},
"dh_raku_install" : { "dh_raku_install" : {
"installed_by" : [ "installed_by" : [
"dh-raku" "dh-raku"
@ -1096,6 +1129,12 @@
"debhelper" "debhelper"
] ]
}, },
"dh_user-session-migration" : {
"installed_by" : [
"dh-user-session-migration"
],
"uses_misc_depends" : 1
},
"dh_usrlocal" : { "dh_usrlocal" : {
"installed_by" : [ "installed_by" : [
"debhelper" "debhelper"

View File

@ -4,6 +4,77 @@
"title" : "Debian Policy Releases" "title" : "Debian Policy Releases"
}, },
"releases" : [ "releases" : [
{
"author" : "Sean Whitton <spwhitton@spwhitton.name>",
"changes" : [
"",
"debian-policy (4.6.2.0) unstable; urgency=medium",
"",
" [ Sean Whitton ]",
" * Policy: Update alternatives system priorities for window managers",
" Wording: Ansgar <ansgar@debian.org>",
" Seconded: Russ Allbery <rra@debian.org>",
" Seconded: Sean Whitton <spwhitton@spwhitton.name>",
" Closes: #975631",
" * Policy: Clarify udeb-only source packages are out of scope",
" Wording: Russ Allbery <rra@debian.org>",
" Seconded: Holger Levsen <holger@layer-acht.org>",
" Seconded: Sean Whitton <spwhitton@spwhitton.name>",
" Closes: #992136",
"",
" [ Russ Allbery ]",
" * Policy: Add new-version argument to several maintainer script calls",
" Wording: Russ Allbery <rra@debian.org>",
" Seconded: Sean Whitton <spwhitton@spwhitton.name>",
" Seconded: Guillem Jover <guillem@debian.org>",
" Closes: #823256",
" * Policy: Essential packages must work only if previously configured",
" Wording: Helmut Grohne <helmut@subdivi.de>",
" Seconded: Santiago Vila <sanvila@unex.es>",
" Seconded: Guillem Jover <guillem@hadrons.org>",
" Closes: #1020267",
" * Prefer \"portion\" to \"stanza\" when describing parts of the Vcs-Git",
" header to avoid confusion with blocks of fields in deb822. Thanks to",
" Charles Plessy for pointing out the inconsistency.",
"",
" [ Guillem Jover ]",
" * Terminology fixes. (Closes: #1020248)",
" - Refer to blocks of fields in deb822 files as stanzas, not",
" paragraphs. This aligns terminology with dpkg and reduces confusion",
" with text paragraphs found in, for example, the Description field.",
" * Policy: Replace references to PGP with OpenPGP. (Closes: #1020243)",
" * Whitespace and quoting fixes. (Closes: #1020238)",
" - Remove trailing whitespace and convert tabs to spaces in all files.",
" - Avoid use of unbalanced single quotes.",
" * copyright-format: Formatting improvements. (Closes: #1020241)",
" - Put Source after Format in examples.",
" - Reformat GPL examples to be more compact.",
" - Use URLs rather than postal addresses in GPL examples.",
" - Move the comment about where the GPL can be found on Debian systems",
" to a separate Comment block in examples, rather than including it in",
" the License text.",
" - Apply wrap-and-sort -ast formatting to Files fields in the examples.",
"",
" [ Daniel Shahaf ]",
" * Add an English description of the format of bug closers in the",
" changelog file, alongside the Perl-compatible regular expression.",
" (Closes: #953911)"
],
"closes" : [
823256,
953911,
975631,
992136,
1020238,
1020241,
1020243,
1020248,
1020267
],
"epoch" : 1671244904,
"timestamp" : "2022-12-17T02:41:44Z",
"version" : "4.6.2.0"
},
{ {
"author" : "Sean Whitton <spwhitton@spwhitton.name>", "author" : "Sean Whitton <spwhitton@spwhitton.name>",
"changes" : [ "changes" : [

View File

@ -18,3 +18,6 @@ homepage-for-cpan-package-contains-version ~~ (?:search\.cpan\.org|m
homepage-for-cran-package-not-canonical ~~ cran\.r-project\.org/web/packages/.+ homepage-for-cran-package-not-canonical ~~ cran\.r-project\.org/web/packages/.+
homepage-refers-to-filesystem-listing ~~ (https?|ftp)://ftp\.gnu\.org/gnu/(.*) homepage-refers-to-filesystem-listing ~~ (https?|ftp)://ftp\.gnu\.org/gnu/(.*)
homepage-refers-to-obsolete-debian-infrastructure ~~ alioth\.debian\.org homepage-refers-to-obsolete-debian-infrastructure ~~ alioth\.debian\.org
homepage-github-url-ends-with-dot-git ~~ ^https?://github\.com/.*\.git$
homepage-gitlab-url-ends-with-dot-git ~~ ^https?://gitlab\.com/.*\.git$
homepage-salsa-url-ends-with-dot-git ~~ ^https?://salsa.debian.org/.*\.git$

View File

@ -5,7 +5,6 @@ dma
esmtp-run esmtp-run
exim4-daemon-heavy exim4-daemon-heavy
exim4-daemon-light exim4-daemon-light
masqmail
msmtp-mta msmtp-mta
nullmailer nullmailer
opensmtpd opensmtpd

View File

@ -137,7 +137,6 @@ libtinfo-dev => libncurses-dev
# Deprecated in bullseye # Deprecated in bullseye
bsdmainutils => bsdextrautils and/or ncal bsdmainutils => bsdextrautils and/or ncal
libegl1-mesa-dev => libegl-dev
libfontconfig1-dev => libfontconfig-dev libfontconfig1-dev => libfontconfig-dev
libfreetype6-dev => libfreetype-dev libfreetype6-dev => libfreetype-dev
libgdk-pixbuf2.0-0 => libgdk-pixbuf-2.0-0 and optionally libgdk-pixbuf-xlib-2.0-0 libgdk-pixbuf2.0-0 => libgdk-pixbuf-2.0-0 and optionally libgdk-pixbuf-xlib-2.0-0
@ -151,3 +150,8 @@ libxcb-util0-dev => libxcb-util-dev
libgsasl7-dev => libgsasl-dev libgsasl7-dev => libgsasl-dev
libidn11-dev => libidn-dev libidn11-dev => libidn-dev
policykit-1 => polkitd and optionally pkexec policykit-1 => polkitd and optionally pkexec
lsb-base
pkg-config => pkgconf
# Deprecated in trixie
gnome-common => https://wiki.gnome.org/Projects/GnomeCommon/Migration

View File

@ -28,4 +28,4 @@ git://gitorious\.org/ ~~ Git
git://[a-zA-Z0-9]+\.branchable\.com/ ~~ Git git://[a-zA-Z0-9]+\.branchable\.com/ ~~ Git
git://repo\.or\.cz/ ~~ Git git://repo\.or\.cz/ ~~ Git
https?://repo\.or\.cz/ ~~ Git https?://repo\.or\.cz/ ~~ Git
https?://bitbucket\.org/ ~~ Git,Hg https?://bitbucket\.org/ ~~ Git

View File

@ -15,6 +15,7 @@ cbr
cbt cbt
cbz cbz
chm chm
dbf
der der
djvu djvu
dll dll
@ -64,6 +65,11 @@ png
ppt ppt
pptx pptx
psd psd
qix
sbn
sbx
shp
shx
spx spx
sqlite sqlite
sqlite3 sqlite3

File diff suppressed because it is too large Load Diff

View File

@ -14,14 +14,16 @@
# 59 -> Java15 # 59 -> Java15
# 60 -> Java16 # 60 -> Java16
# 61 -> Java17 # 61 -> Java17
# 62 -> Java18 - highest version in Debian unstable # 62 -> Java18
# 63 -> Java19 # 63 -> Java19
# 64 -> Java20
# 65 -> Java21 - highest version in Debian unstable
# current default in Debian # current default in Debian
default-bytecode-version = 56 default-bytecode-version = 61
# highest known anywhere # highest known anywhere
highest-known-bytecode-version = 63 highest-known-bytecode-version = 65
# The following should not change # The following should not change
lowest-known-bytecode-version = 45 lowest-known-bytecode-version = 45

View File

@ -20,6 +20,7 @@ NotShowIn
OnlyShowIn OnlyShowIn
Path Path
PrefersNonDefaultGPU PrefersNonDefaultGPU
SingleMainWindow
StartupNotify StartupNotify
StartupWMClass StartupWMClass
Terminal Terminal

View File

@ -3,6 +3,7 @@
# #
# Please keep the file sorted alphabetically. # Please keep the file sorted alphabetically.
01.org
alioth.debian.org alioth.debian.org
anonscm.debian.org anonscm.debian.org
berlios.de berlios.de

View File

@ -61,7 +61,7 @@
guile => /usr/bin, guile-([\d.]+), guile-$1:any, 2.2 3.0, guile:any guile => /usr/bin, guile-([\d.]+), guile-$1:any, 2.2 3.0, guile:any
jruby => /usr/bin, jruby([\d.]+), jruby$1:any, 1.0 1.1 1.2, jruby:any jruby => /usr/bin, jruby([\d.]+), jruby$1:any, 1.0 1.1 1.2, jruby:any
lua => /usr/bin, lua([\d.]+), lua$1:any, 40 50 5.1 5.2, lua:any lua => /usr/bin, lua([\d.]+), lua$1:any, 40 50 5.1 5.2 5.3 5.4, lua:any
octave => /usr/bin, octave([\d.]+), octave$1:any, 3.0 3.2, octave:any octave => /usr/bin, octave([\d.]+), octave$1:any, 3.0 3.2, octave:any
pike => /usr/bin, pike([\d.]+), pike$1:any | pike$1-core:any, 7.6 7.8 pike => /usr/bin, pike([\d.]+), pike$1:any | pike$1-core:any, 7.6 7.8
python2 => /usr/bin, python([\d.]+), python$1:any | python$1-minimal:any, 2.7, @SKIP_UNVERSIONED@ python2 => /usr/bin, python([\d.]+), python$1:any | python$1-minimal:any, 2.7, @SKIP_UNVERSIONED@

View File

@ -16,6 +16,12 @@
# should be included in the appropriate data file, rather than here. # should be included in the appropriate data file, rather than here.
# #
# Please keep the list sorted using `make sort` in this directory. # Please keep the list sorted using `make sort` in this directory.
#
# (And in case you wonder about these entries at the end of the file
# seemingly starting with a "c" and still being listed at the end of
# the file after "make sort", please note that they start with a
# cyrillic "с", not with a latin "c". They look the same at least in
# most fonts, though.)
aaccessibility||accessibility aaccessibility||accessibility
aaccession||accession aaccession||accession
@ -2782,8 +2788,7 @@ curently||currently
curiousities||curiosities curiousities||curiosities
curiousity||curiosity curiousity||curiosity
curiousity's||curiosity's curiousity's||curiosity's
currectly||correctly currectly||correctly or currently
curren||current
currious||curious currious||curious
currnt||current currnt||current
currntly||currently currntly||currently
@ -4187,6 +4192,7 @@ epectedly||expectedly
epect||expect epect||expect
epecting||expecting epecting||expecting
epects||expects epects||expects
ependency||dependency
ephememeral||ephemeral ephememeral||ephemeral
ephememeris||ephemeris ephememeris||ephemeris
eploit||exploit eploit||exploit
@ -7921,8 +7927,8 @@ occure||occur
occuring||occurring occuring||occurring
occurrance||occurrence occurrance||occurrence
occurrances||occurrences occurrances||occurrences
ocorrence||ocurrence ocorrence||occurrence
ocorrences||ocurrences ocorrences||occurrences
octects||octets octects||octets
ocupied||occupied ocupied||occupied
ocupies||occupies ocupies||occupies
@ -8635,7 +8641,7 @@ preferrable||preferable
preferrably||preferably preferrably||preferably
prefferable||preferable prefferable||preferable
prefferably||preferably prefferably||preferably
preffered||prefered preffered||preferred
preformance||performance preformance||performance
prepaired||prepared prepaired||prepared
prepartion||preparation prepartion||preparation
@ -9867,6 +9873,8 @@ repesent||represent
repesents||represents repesents||represents
repetion||repetition repetion||repetition
repetions||repetitions repetions||repetitions
repition||repetition
repitions||repetitions
replacability||replaceability replacability||replaceability
replacable||replaceable replacable||replaceable
replacables||replaceables replacables||replaceables
@ -9990,7 +9998,6 @@ resgister||register
resgisters||registers resgisters||registers
resistence||resistance resistence||resistance
resistent||resistant resistent||resistant
resizeable||resizable
resloved||resolved resloved||resolved
reslove||resolve reslove||resolve
resloves||resolves resloves||resolves
@ -11523,8 +11530,8 @@ trageted||targeted
trailling||trailing trailling||trailing
tranceivers||transceivers tranceivers||transceivers
tranceiver||transceiver tranceiver||transceiver
tranfered||transfered tranfered||transferred
tranfering||transfering tranfering||transferring
tranfers||transfers tranfers||transfers
tranfer||transfer tranfer||transfer
tranformations||transformations tranformations||transformations
@ -11705,7 +11712,6 @@ two-dimenional||two-dimensional
twodimenional||two-dimensional twodimenional||two-dimensional
two-dimenionsal||two-dimensional two-dimenionsal||two-dimensional
twodimenionsal||two-dimensional twodimenionsal||two-dimensional
tye||type
typicaly||typically typicaly||typically
typles||tuples typles||tuples
typle||tuple typle||tuple
@ -12114,6 +12120,7 @@ upsrteams||upstreams
upsrteam||upstream upsrteam||upstream
upsteam||upstream upsteam||upstream
upsteram||upstream upsteram||upstream
upstram||upstream
upstreamedd||upstreamed upstreamedd||upstreamed
upstreammed||upstreamed upstreammed||upstreamed
upstreammer||upstreamer upstreammer||upstreamer

View File

@ -28,6 +28,6 @@
(?i)per say||per se (?i)per say||per se
(?i)pleases see||please see (?i)pleases see||please see
(?i)seams like||seems like (?i)seams like||seems like
(?i)these package||this package (?i)these package(?!\s+\w+s\b)||this package
(?i)this packages||these packages (?i)this packages||these packages
(?i)will be remove||will be removed (?i)will be remove||will be removed

View File

@ -11,6 +11,7 @@ needs-internet
needs-reboot needs-reboot
needs-recommends needs-recommends
needs-root needs-root
needs-sudo
rw-build-tree rw-build-tree
skip-not-installable skip-not-installable
skippable skippable

View File

@ -7,6 +7,7 @@ autopkgtest-pkg-go
autopkgtest-pkg-nodejs autopkgtest-pkg-nodejs
autopkgtest-pkg-octave autopkgtest-pkg-octave
autopkgtest-pkg-perl autopkgtest-pkg-perl
autopkgtest-pkg-pybuild
autopkgtest-pkg-python autopkgtest-pkg-python
autopkgtest-pkg-r autopkgtest-pkg-r
autopkgtest-pkg-ruby autopkgtest-pkg-ruby

View File

@ -1,8 +0,0 @@
lintian for Debian
Please edit this to provide information specific to
this lintian Debian package.
(Automatically generated by debmake Version 4.3.1)
-- sufang <sufang@kylinos.cn> Wed, 14 Sep 2022 10:28:58 +0800

5
debian/changelog vendored
View File

@ -1,5 +0,0 @@
lintian (2.114.0-ok1) yangtze; urgency=medium
* Build for openkylin.
-- sufang <sufang@kylinos.cn> Wed, 14 Sep 2022 10:28:58 +0800

114
debian/control vendored
View File

@ -1,114 +0,0 @@
Source: lintian
Section: devel
Priority: optional
Maintainer: OpenKylin Developers <packaging@lists.openkylin.top>
Build-Depends:
debhelper-compat (= 13),
dpkg (>= 1.17.14),
libconst-fast-perl,
libfile-basedir-perl,
libipc-run3-perl,
libpath-tiny-perl,
libunicode-utf8-perl,
python3-docutils,
Standards-Version: 4.6.0.1
Vcs-Git: https://gitee.com/openkylin/lintian.git
Vcs-Browser: https://gitee.com/openkylin/lintian
Homepage: https://lintian.debian.org/
Rules-Requires-Root: no
Package: lintian
Architecture: all
Depends:
binutils,
bzip2,
diffstat,
dpkg (>= 1.17.14),
dpkg-dev,
file,
gettext,
gpg,
intltool-debian,
libapt-pkg-perl,
libarchive-zip-perl,
libcapture-tiny-perl,
# makes Moo faster, https://metacpan.org/pod/Moo#MOO-AND-CLASS::XSACCESSOR
libclass-xsaccessor-perl,
libclone-perl,
libconfig-tiny-perl,
libconst-fast-perl,
libcpanel-json-xs-perl,
libdata-dpath-perl,
libdata-validate-domain-perl,
libdata-validate-uri-perl,
libdevel-size-perl,
libdigest-sha-perl,
libdpkg-perl,
libencode-perl,
libemail-address-xs-perl,
libfile-basedir-perl,
libfile-find-rule-perl,
libfont-ttf-perl,
libhtml-html5-entities-perl,
libio-interactive-perl,
libio-prompt-tiny-perl,
libipc-run3-perl,
libjson-maybexs-perl,
liblist-compare-perl,
liblist-someutils-perl,
liblist-utilsby-perl,
libmoo-perl,
libmoox-aliases-perl,
libnamespace-clean-perl,
libpath-tiny-perl,
libperlio-gzip-perl,
libperlio-utf8-strict-perl,
libproc-processtable-perl,
libsereal-decoder-perl,
libsereal-encoder-perl,
libsort-versions-perl,
libsyntax-keyword-try-perl,
libterm-readkey-perl,
libtext-glob-perl,
libtext-levenshteinxs-perl,
libtext-markdown-discount-perl,
libtext-xslate-perl,
libtime-duration-perl,
libtime-moment-perl,
libtimedate-perl,
libunicode-utf8-perl,
liburi-perl,
libxml-libxml-perl,
libyaml-libyaml-perl,
lzip | clzip,
lzop,
man-db,
patchutils,
perl,
t1utils,
unzip,
xz-utils,
${misc:Depends},
${perl:Depends},
Suggests:
binutils-multiarch,
libtext-template-perl,
Breaks:
funny-manpages (<< 1.3-5.1),
libconfig-model-dpkg-perl (<< 2.151),
lintian-brush (<< 0.88),
pkg-js-tools (<< 0.9.4),
pkg-perl-tools (<< 0.53),
Replaces:
funny-manpages (<< 1.3-5.1),
Multi-Arch: foreign
Description: Debian package checker
Lintian dissects Debian packages and reports bugs and policy violations. It
contains automated checks for many aspects of Debian policy as well as some
checks for common errors.
.
This package is useful for all people who want to check Debian packages for
compliance with Debian policy. Every Debian maintainer should check packages
with this tool before uploading them to the archive.
.
This version of Lintian is calibrated for Debian Policy version 4.6.0.1.

21455
debian/copyright vendored

File diff suppressed because it is too large Load Diff

3
debian/dirs vendored
View File

@ -1,3 +0,0 @@
etc
usr/bin
usr/share/lintian

12
debian/doc-base vendored
View File

@ -1,12 +0,0 @@
Document: lintian
Title: Lintian User's Manual
Author: Christian Schwarz, Richard Braakman, Sean 'Shaleh' Perry
Abstract: This manual describes Lintian, the Debian package checker.
Section: Debian
Format: HTML
Index: /usr/share/doc/lintian/lintian.html
Files: /usr/share/doc/lintian/*.html
Format: text
Files: /usr/share/doc/lintian/lintian.rst.gz

5
debian/docs vendored
View File

@ -1,5 +0,0 @@
README.md
doc/CREDITS
doc/api.html
doc/lintian.html
doc/lintian.rst

View File

@ -1 +0,0 @@
doc/examples/*

View File

@ -1,10 +0,0 @@
bin usr/share/lintian
data usr/share/lintian
lib usr/share/lintian
.perlcriticrc usr/share/lintian
# the next line will be removed when libconfig-model-dpkg-perl stops using Lintian data (Bug#968000)
private/latest-policy-version usr/share/lintian/private
profiles usr/share/lintian
tags usr/share/lintian
templates usr/share/lintian
vendors usr/share/lintian

View File

@ -1,7 +0,0 @@
usr/share/lintian/bin/lintian usr/bin/lintian
usr/share/lintian/bin/lintian-explain-tags usr/bin/lintian-explain-tags
usr/share/lintian/bin/lintian-annotate-hints usr/bin/lintian-annotate-hints
usr/share/lintian/bin/lintian-annotate-hints usr/bin/lintian-info
usr/share/man/man1/lintian-annotate-hints.1.gz usr/share/man/man1/lintian-info.1.gz
usr/share/lintian/bin/spellintian usr/bin/spellintian
usr/share/doc/lintian/lintian.rst usr/share/doc/lintian/lintian.txt

View File

@ -1 +0,0 @@
rm_conffile /etc/lintianrc 2.90.0~ lintian

2
debian/manpages vendored
View File

@ -1,2 +0,0 @@
man/man1/*.1
man/man3/*.3

View File

@ -1 +0,0 @@
# You must remove unused comment lines for the released package.

70
debian/rules vendored
View File

@ -1,70 +0,0 @@
#!/usr/bin/make -f
PERL ?= /usr/bin/perl
VER := $(shell head -1 debian/changelog | sed -e 's/^.*(//' -e 's/).*$$//')
tmp := $(CURDIR)/debian/lintian
profiles := profiles/debian/main.profile \
profiles/debian/ftp-master-auto-reject.profile
pod2man := pod2man --center "Debian Package Checker" --release "Lintian v$(VER)"
pod2mansources := $(wildcard man/*.pod)
docsources := doc/lintian.rst README.md $(pod2mansources)
perlprovides := data/fields/perl-provides
autoreject_data := $(wildcard private/build-time-data/*)
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
jobs = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
PAR_ARGS=-j $(jobs)
endif
%:
dh $@
override_dh_auto_build: generate-docs-stamp
# check that the static data about perl core modules is up to date
$(PERL) -ne '/PERL_VERSION=(.+)/ and $$] > $$1 and warn q{*}x60 . qq{\n$(perlprovides) needs an update, please run\n debian/rules refresh-perl-provides\n} . q{*}x60 . qq{\n}' $(perlprovides)
override_dh_clean:
rm -rf $(CURDIR)/debian/test-out
rm -rf doc/api.html doc/lintian.html
rm -rf man/man1/ man/man3/ l10n/
dh_clean
override_dh_install:
dh_install
echo "Setting LINTIAN_VERSION to $(VER)"
$(PERL) -p -i -e 's/my \$$LINTIAN_VERSION;/my \$$LINTIAN_VERSION = q{$(VER)};/;' \
$(tmp)/usr/share/lintian/bin/*
profiles: $(profiles);
$(profiles): $(autoreject_data) private/generate-profiles
private/generate-profiles
api-doc:
private/generate-html-docs doc/api.html
.PHONY: generate-docs
generate-docs: generate-docs-stamp
generate-docs-stamp: $(docsources)
dh_testdir
# A UTF-8 locale seemed appropriate; manual uses &sect; character
cd doc && LC_ALL=en_US.UTF-8 rst2html lintian.rst > lintian.html
mkdir -p man/man1/ man/man3/
$(pod2man) --name lintian --section=1 man/lintian.pod > man/man1/lintian.1
set -e ; for POD in $(pod2mansources) ; do \
BASENAME=$$(basename "$$POD" .pod) ; \
$(pod2man) --section=1 "$$POD" > "man/man1/$$BASENAME".1 ; \
done
set -e ; for POD in $$(find doc/tutorial lib/Lintian lib/Test -type f '!' -path '*/Output/*' '!' -path '*/Check/*' '!' -path '*/Screen/*' ) ; do \
BASENAME=$$(echo "$$POD" | perl -pe 's@^(doc/tutorial|lib)/@@; s@/@::@g; s/\.(pod|pm)$$//') ; \
$(pod2man) --name="$$BASENAME" --section=3 "$$POD" > "man/man3/$$BASENAME".3 ; \
done
private/generate-html-docs doc/api.html > /dev/null
touch $@
# only used manually
.PHONY: refresh-perl-provides
refresh-perl-provides:
perl private/refresh-perl-provides > $(perlprovides)

View File

@ -1 +0,0 @@
3.0 (native)

View File

@ -1,10 +0,0 @@
#!/bin/sh
set -e
export LINTIAN_TEST_INSTALLED=yes
WORKDIR="$AUTOPKGTEST_TMP/$(basename $0)"
private/runtests --debug --unattended --keep-going --work-dir="$WORKDIR"
rm -rf "${WORKDIR}"

49
debian/tests/control vendored
View File

@ -1,49 +0,0 @@
Tests: build-and-evaluate-test-packages
Restrictions: allow-stderr
# Conflicts:
# libperl-critic-pulp-perl,
Depends:
aspell,
aspell-en,
build-essential,
cdbs,
default-jdk-headless | default-jdk,
dh-elpa | bash (<< 4.4),
dh-python,
dh-r,
dh-runit,
dpatch,
fakeroot,
gcc-mingw-w64-i686,
gcc-mingw-w64-x86-64,
gpg-agent,
javahelper,
libmce-perl,
libio-prompt-tiny-perl,
libperl-critic-freenode-perl,
libperl-critic-pulp-perl,
libpod-coverage-trustpod-perl,
libtest-minimumversion-perl,
libtest-perl-critic-perl,
libtest-pod-coverage-perl,
libtest-pod-perl,
libtest-spelling-perl,
libtest-strict-perl,
libtest-synopsis-perl,
libtext-csv-perl,
libtext-csv-xs-perl,
libtext-diff-perl,
libtext-template-perl,
lintian,
mingw-w64-tools,
pkg-php-tools,
python-dev-is-python3,
python3,
python3-dev,
python3-all-dev,
python3-numpy,
python3-setuptools,
quilt,
tidy,
uglifyjs,
zip,

View File

@ -364,8 +364,13 @@ per line (and may contain empty lines and comments, starting with a
for more info); <type> is one of ``binary``, ``udeb`` and ``source``, for more info); <type> is one of ``binary``, ``udeb`` and ``source``,
and <context> is all additional information provided by Lintian and <context> is all additional information provided by Lintian
except for the tag. What's inside brackets is optional and may be except for the tag. What's inside brackets is optional and may be
omitted if you want to match it all. An example file for a binary omitted if you want to match it all. Additionally, if the context of
package would look like: the tag contains paths to files in the package, they're enclosed with
literal brackets (so called "pointed hints") so that tools which
process lintian tags can link to the according file and potentially
even line in the file.
An example file for a binary package would look like:
:: ::
@ -374,7 +379,7 @@ package would look like:
# We use a non-standard dir permission to only allow the webserver to look # We use a non-standard dir permission to only allow the webserver to look
# into this directory: # into this directory:
foo binary: non-standard-dir-perm foo binary: non-standard-dir-perm
foo binary: FSSTND-dir-in-usr /usr/man/man1/foo.1.gz foo binary: FSSTND-dir-in-usr [/usr/man/man1/foo.1.gz]
An example file for a source package would look like: An example file for a source package would look like:
@ -384,7 +389,7 @@ An example file for a source package would look like:
foo source: debian-files-list-in-source foo source: debian-files-list-in-source
# Upstream distributes it like this, repacking would be overkill though, so # Upstream distributes it like this, repacking would be overkill though, so
# tell lintian to not complain: # tell lintian to not complain:
foo source: configure-generated-file-in-source config.cache foo source: configure-generated-file-in-source [config.cache]
Many tags can occur more than once (e.g. if the same error is found in Many tags can occur more than once (e.g. if the same error is found in
more than one file). You can override a tag either completely by more than one file). You can override a tag either completely by
@ -395,8 +400,8 @@ will match arbitrary strings similar to the shell wildcard. For example:
:: ::
# The "help text" must also be covered by the override # Multiple files need to be covered by the override
source-is-missing apidoc/html/api_data.js * source-is-missing [apidoc/html/*.js]
.. _section-2.4.2: .. _section-2.4.2:

View File

@ -80,7 +80,7 @@ the lintian release.
Step 2 Step 2
------ ------
Login to the lintian-host and ensure that lintian is not currectly Login to the lintian-host and ensure that lintian is not currently
performing an archive-wide run and that you have "plenty" of time to performing an archive-wide run and that you have "plenty" of time to
complete the upgrade. The entire upgrade can be done in less than 5 complete the upgrade. The entire upgrade can be done in less than 5
minutes (but you may want to have a "slightly" larger window the first minutes (but you may want to have a "slightly" larger window the first

View File

@ -94,13 +94,16 @@ sub installable {
} }
} }
} }
if ( foreach my $lib_dir (qw(usr/lib lib)) {
defined( if (
my $dir= $processable->installed->resolve_path('lib/udev/rules.d/') defined(
) my $dir = $processable->installed->resolve_path(
) { "$lib_dir/udev/rules.d/")
for my $item ($dir->descendants) { )
push(@udevrules, $item) if ($item->is_file); ) {
for my $item ($dir->descendants) {
push(@udevrules, $item) if ($item->is_file);
}
} }
} }

View File

@ -50,9 +50,13 @@ sub always {
if $self->processable->fields->declares('Auto-Built-Package'); if $self->processable->fields->declares('Auto-Built-Package');
my $basename = basename($self->processable->path); my $basename = basename($self->processable->path);
# remove salsaci suffix
my $nosalsabasename = $basename;
$nosalsabasename
=~ s/[+]salsaci[+]\d+[+]\d+(_[[:alnum:]]+\.[[:alnum:]]+)$/$1/;
my $adjusted_length my $adjusted_length
= length($basename) = length($nosalsabasename)
- length($self->processable->architecture) - length($self->processable->architecture)
+ $LONGEST_ARCHITECTURE; + $LONGEST_ARCHITECTURE;

View File

@ -88,6 +88,10 @@ sub source {
next next
if $source_liberty eq 'main' && $installable_liberty eq 'contrib'; if $source_liberty eq 'main' && $installable_liberty eq 'contrib';
# and non-free-firmware built from non-free
next
if $source_liberty eq 'non-free'
&& $installable_liberty eq 'non-free-firmware';
my $control_item= $self->processable->debian_control->item; my $control_item= $self->processable->debian_control->item;
my $position = $installable_fields->position('Section'); my $position = $installable_fields->position('Section');
my $pointer = $control_item->pointer($position); my $pointer = $control_item->pointer($position);

View File

@ -53,6 +53,8 @@ sub visit_installed_files {
sub check_elf_issues { sub check_elf_issues {
my ($self, $item) = @_; my ($self, $item) = @_;
return unless $item->is_elf;
for (uniq @{$item->elf->{ERRORS} // []}) { for (uniq @{$item->elf->{ERRORS} // []}) {
$self->pointed_hint('elf-error',$item->pointer, $_) $self->pointed_hint('elf-error',$item->pointer, $_)
unless ( unless (

View File

@ -92,7 +92,8 @@ sub installable {
qr/^python3-numpy \(<[<=][^\|]+$/, qr/^python3-numpy \(<[<=][^\|]+$/,
Lintian::Relation::VISIT_OR_CLAUSE_FULL Lintian::Relation::VISIT_OR_CLAUSE_FULL
) )
)&& $self->processable->name !~ m{\A python3?-numpy \Z}xsm; )
&& $self->processable->name !~ m{\A python3?-numpy \Z}xsm;
return; return;
} }

View File

@ -657,7 +657,7 @@ sub php_source_whitelist {
return 0 return 0
if defined $copyright_path if defined $copyright_path
&& $copyright_path->bytes && $copyright_path->bytes
=~ m{^Source: https?://pecl.php.net/package/.*$}m; =~ m{^Source: https?://(pecl|pear).php.net/package/.*$}m;
return 0 return 0
if $self->processable->source_name =~ /^php\d*(?:\.\d+)?$/xms; if $self->processable->source_name =~ /^php\d*(?:\.\d+)?$/xms;

View File

@ -133,13 +133,13 @@ sub installable {
} else { } else {
if ( if (
$ctrl_member !~ m{\A $ctrl_member !~ m{\A
control\.tar(?:\.(?:gz|xz))? \Z}xsm control\.tar(?:\.(?:gz|xz|zst))? \Z}xsm
) { ) {
$self->hint( $self->hint(
'malformed-deb-archive', 'malformed-deb-archive',
join($SPACE, join($SPACE,
"second (official) member $ctrl_member", "second (official) member $ctrl_member",
'not control.tar.(gz|xz)') 'not control.tar.(gz|xz|zst)')
); );
$failed = 1; $failed = 1;
} elsif ($ctrl_member eq 'control.tar') { } elsif ($ctrl_member eq 'control.tar') {
@ -158,14 +158,14 @@ sub installable {
} else { } else {
if ( if (
$data_member !~ m{\A $data_member !~ m{\A
data\.tar(?:\.(?:gz|bz2|xz|lzma))? \Z}xsm data\.tar(?:\.(?:gz|bz2|xz|lzma|zst))? \Z}xsm
) { ) {
# wasn't okay after all # wasn't okay after all
$self->hint( $self->hint(
'malformed-deb-archive', 'malformed-deb-archive',
join($SPACE, join($SPACE,
"third (official) member $data_member", "third (official) member $data_member",
'not data.tar.(gz|xz|bz2|lzma)') 'not data.tar.(gz|xz|bz2|lzma|zst)')
); );
$failed = 1; $failed = 1;
} elsif ($self->processable->type eq 'udeb' } elsif ($self->processable->type eq 'udeb'

View File

@ -81,7 +81,7 @@ my %DH_COMMAND_MANUAL_PREREQUISITES = (
'dh-autoreconf:any | debhelper:any (>= 9.20160403~) | debhelper-compat:any', 'dh-autoreconf:any | debhelper:any (>= 9.20160403~) | debhelper-compat:any',
dh_autoreconf => dh_autoreconf =>
'dh-autoreconf:any | debhelper:any (>= 9.20160403~) | debhelper-compat:any', 'dh-autoreconf:any | debhelper:any (>= 9.20160403~) | debhelper-compat:any',
dh_dkms => 'dkms:any | dh-sequence-dkms:any', dh_dkms => 'dh-dkms:any | dh-sequence-dkms:any',
dh_girepository => 'gobject-introspection:any | dh-sequence-gir:any', dh_girepository => 'gobject-introspection:any | dh-sequence-gir:any',
dh_gnome => 'gnome-pkg-tools:any | dh-sequence-gnome:any', dh_gnome => 'gnome-pkg-tools:any | dh-sequence-gnome:any',
dh_gnome_clean => 'gnome-pkg-tools:any | dh-sequence-gnome:any', dh_gnome_clean => 'gnome-pkg-tools:any | dh-sequence-gnome:any',
@ -90,7 +90,8 @@ my %DH_COMMAND_MANUAL_PREREQUISITES = (
dh_nativejava => 'gcj-native-helper:any | default-jdk-builddep:any', dh_nativejava => 'gcj-native-helper:any | default-jdk-builddep:any',
dh_pgxs_test => 'postgresql-server-dev-all:any | postgresql-all:any', dh_pgxs_test => 'postgresql-server-dev-all:any | postgresql-all:any',
dh_python2 => 'dh-python:any | dh-sequence-python2:any', dh_python2 => 'dh-python:any | dh-sequence-python2:any',
dh_python3 => 'dh-python:any | dh-sequence-python3:any', dh_python3 =>
'dh-python:any | dh-sequence-python3:any | pybuild-plugin-pyproject:any',
dh_sphinxdoc => dh_sphinxdoc =>
'sphinx:any | python-sphinx:any | python3-sphinx:any | dh-sequence-sphinxdoc:any', 'sphinx:any | python-sphinx:any | python3-sphinx:any | dh-sequence-sphinxdoc:any',
dh_xine => 'libxine-dev:any | libxine2-dev:any' dh_xine => 'libxine-dev:any | libxine2-dev:any'
@ -124,6 +125,7 @@ my %DH_ADDON_MANUAL_PREREQUISITES = (
'sphinx:any | python-sphinx:any | python3-sphinx:any | dh-sequence-sphinxdoc:any', 'sphinx:any | python-sphinx:any | python3-sphinx:any | dh-sequence-sphinxdoc:any',
systemd => systemd =>
'debhelper:any (>= 9.20160709~) | debhelper-compat:any | dh-sequence-systemd:any | dh-systemd:any', 'debhelper:any (>= 9.20160709~) | debhelper-compat:any | dh-sequence-systemd:any | dh-systemd:any',
vim_addon => 'dh-vim-addon:any | dh-sequence-vim-addon:any',
); );
sub visit_patched_files { sub visit_patched_files {
@ -648,12 +650,14 @@ sub source {
$self->pointed_hint( $self->pointed_hint(
'debian-rules-uses-unnecessary-dh-argument', 'debian-rules-uses-unnecessary-dh-argument',
$drules->pointer($seen_dh_parallel), $drules->pointer($seen_dh_parallel),
"$debhelper_level >= $DH_PARALLEL_NOT_NEEDED",
'dh ... --parallel' 'dh ... --parallel'
)if $seen_dh_parallel && $debhelper_level >= $DH_PARALLEL_NOT_NEEDED; )if $seen_dh_parallel && $debhelper_level >= $DH_PARALLEL_NOT_NEEDED;
$self->pointed_hint( $self->pointed_hint(
'debian-rules-uses-unnecessary-dh-argument', 'debian-rules-uses-unnecessary-dh-argument',
$drules->pointer($seen_dh_systemd), $drules->pointer($seen_dh_systemd),
"$debhelper_level >= $INVOKES_SYSTEMD",
'dh ... --with=systemd' 'dh ... --with=systemd'
)if $seen_dh_systemd && $debhelper_level >= $INVOKES_SYSTEMD; )if $seen_dh_systemd && $debhelper_level >= $INVOKES_SYSTEMD;
@ -800,7 +804,8 @@ sub source {
# As a special case, the python3 addon needs a dependency on # As a special case, the python3 addon needs a dependency on
# dh-python unless the -dev packages are used. # dh-python unless the -dev packages are used.
my $python_source = 'dh-python:any | pybuild-plugin-pyproject:any'; my $python_source
= 'dh-python:any | dh-sequence-python3:any | pybuild-plugin-pyproject:any';
$self->pointed_hint('missing-build-dependency-for-dh-addon', $self->pointed_hint('missing-build-dependency-for-dh-addon',
$drules->pointer,$addon, "(does not satisfy $python_source)") $drules->pointer,$addon, "(does not satisfy $python_source)")

View File

@ -852,8 +852,32 @@ sub check_dep5_copyright {
next next
unless $seen; unless $seen;
# Compare and also normalize the seen and wanted license
# identifier wrt. to redundant trailing dot-zeros,
# -or-later suffix vs + suffix, -only suffix vs no
# suffix. Still display the original variant in the tag.
my $seen_normalized = $seen;
$seen_normalized = 'expat' if $seen_normalized eq 'mit';
$seen_normalized =~ s/-or-later$/+/i;
$seen_normalized =~ s/-only$//i;
my $seen_nozero = $seen_normalized;
$seen_nozero =~ s/\.0//g;
my @wanted = @{$license_identifiers_by_file{$name}}; my @wanted = @{$license_identifiers_by_file{$name}};
my @mismatched = grep { $_ ne $seen } @wanted; my @mismatched = grep {
my $want = $_;
my $want_normalized = $want;
$want_normalized = 'expat' if $want_normalized eq 'mit';
$want_normalized =~ s/-or-later$/+/i;
$want_normalized =~ s/-only$//i;
my $want_nozero = $want_normalized;
$want_nozero =~ s/\.0//g;
$want_normalized ne $seen_normalized
and $want_nozero ne $seen_normalized
and $want_normalized ne $seen_nozero
and $want_nozero ne $seen_nozero;
} @wanted;
$self->pointed_hint('inconsistent-appstream-metadata-license', $self->pointed_hint('inconsistent-appstream-metadata-license',
$copyright_file->pointer, $name, "($seen != $_)") $copyright_file->pointer, $name, "($seen != $_)")

View File

@ -93,7 +93,7 @@ sub source {
my @files = grep { defined } my @files = grep { defined }
map { $self->processable->patched->resolve_path("debian/$_") } @catalogs; map { $self->processable->patched->resolve_path("debian/$_") } @catalogs;
my @utf8 = grep { $_->is_valid_utf8 } @files; my @utf8 = grep { $_->is_valid_utf8 and $_->is_file } @files;
for my $item (@utf8) { for my $item (@utf8) {
my $deb822 = Lintian::Deb822->new; my $deb822 = Lintian::Deb822->new;

View File

@ -74,6 +74,9 @@ my $PROPERTIES = 'org.freedesktop.DBus.Properties';
sub check_policy { sub check_policy {
my ($self, $item) = @_; my ($self, $item) = @_;
$self->pointed_hint('dbus-policy-in-etc', $item->pointer)
if $item->name =~ m{^etc/};
my $xml = $item->decoded_utf8; my $xml = $item->decoded_utf8;
return return
unless length $xml; unless length $xml;

View File

@ -39,6 +39,20 @@ use namespace::clean;
with 'Lintian::Check'; with 'Lintian::Check';
# a list of regex for detecting non documentation files checked against basename (xi)
my @NOT_DOCUMENTATION_FILE_REGEXES = qw{
^dependency_links[.]txt$
^entry_points[.]txt$
^requires[.]txt$
^top_level[.]txt$
^requirements[.]txt$
^namespace_packages[.]txt$
^bindep[.]txt$
^version[.]txt$
^robots[.]txt$
^cmakelists[.]txt$
};
# a list of regex for detecting documentation file checked against basename (xi) # a list of regex for detecting documentation file checked against basename (xi)
my @DOCUMENTATION_FILE_REGEXES = qw{ my @DOCUMENTATION_FILE_REGEXES = qw{
[.]docx?$ [.]docx?$
@ -110,7 +124,9 @@ sub visit_installed_files {
=~ m{^ usr/share/doc/ (?:.+/)? (?:doxygen|html) / .* [.]map [.] $regex }sx; =~ m{^ usr/share/doc/ (?:.+/)? (?:doxygen|html) / .* [.]map [.] $regex }sx;
if ($item->is_file if ($item->is_file
&& any { $item->basename =~ m{$_}xi } @DOCUMENTATION_FILE_REGEXES) { and any { $item->basename =~ m{$_}xi } @DOCUMENTATION_FILE_REGEXES
and any { $item->basename !~ m{$_}xi } @NOT_DOCUMENTATION_FILE_REGEXES)
{
$self->pointed_hint( $self->pointed_hint(
'package-contains-documentation-outside-usr-share-doc', 'package-contains-documentation-outside-usr-share-doc',

View File

@ -67,7 +67,7 @@ sub spelling_tag_emitter {
} }
my @user_locations= qw(bin/ usr/bin/ usr/bin/X11/ usr/bin/mh/ usr/games/); my @user_locations= qw(bin/ usr/bin/ usr/bin/X11/ usr/bin/mh/ usr/games/);
my @admin_locations= qw(sbin/ usr/sbin/); my @admin_locations= qw(sbin/ usr/sbin/ usr/libexec/);
sub visit_installed_files { sub visit_installed_files {
my ($self, $item) = @_; my ($self, $item) = @_;
@ -622,11 +622,15 @@ sub installable {
&& any { $_ == $USER_COMMAND_SECTION } @sections; && any { $_ == $USER_COMMAND_SECTION } @sections;
} }
$self->pointed_hint('no-english-manual-page', $_->pointer) for (map {$local_executables{$_}} @english_missing) {
for map {$local_executables{$_}} @english_missing; $self->pointed_hint('no-english-manual-page', $_->pointer)
unless $_->name =~ m{/libexec/};
}
$self->pointed_hint('no-manual-page', $_->pointer) for (map {$local_executables{$_}} @manpage_missing) {
for map {$local_executables{$_}} @manpage_missing; $self->pointed_hint('no-manual-page', $_->pointer)
unless $_->name =~ m{/libexec/};
}
# surplus manpages only for this package; provides sorted output # surplus manpages only for this package; provides sorted output
my $local = List::Compare->new(\@related_commands, [keys %local_manpages]); my $local = List::Compare->new(\@related_commands, [keys %local_manpages]);

View File

@ -56,12 +56,13 @@ sub changes {
for my $target (@targets) { for my $target (@targets) {
my $reduced = $target; my $reduced = $target;
$reduced =~ s{- (?:backports(?:-sloppy)? $reduced =~ s{- (?:backports(?:-(?:sloppy|staging))?
|lts |lts
|proposed(?:-updates)? |proposed(?:-updates)?
|updates |updates
|security |security
|volatile)$}{}xsm; |volatile
|fasttrack)$}{}xsm;
$major{$target} = $reduced; $major{$target} = $reduced;
} }
@ -92,7 +93,7 @@ sub changes {
my $version = $self->processable->fields->value('Version'); my $version = $self->processable->fields->value('Version');
my $distnumber; my $distnumber;
my $bpoversion; my $bpoversion;
if ($version=~ /~bpo(\d+)\+(\d+)$/) { if ($version=~ /~bpo(\d+)\+(\d+)(\+salsaci(\+\d+)*)?$/) {
$distnumber = $1; $distnumber = $1;
$bpoversion = $2; $bpoversion = $2;

View File

@ -25,6 +25,7 @@ use warnings;
use utf8; use utf8;
use Const::Fast; use Const::Fast;
use List::SomeUtils qw(all);
use Path::Tiny; use Path::Tiny;
use Moo; use Moo;
@ -54,12 +55,15 @@ my @CHANGES = qw(Format Date Source Architecture Version Distribution
sub source { sub source {
my ($self) = @_; my ($self) = @_;
#my $all_udeb = 1; my $debian_control = $self->processable->debian_control;
#$all_udeb = 0
# if any { # policy 5.6.11
# $debian_control->installable_package_type($_) ne 'udeb' if (all { $debian_control->installable_package_type($_) eq 'udeb' }
# } $debian_control->installables) {
# $debian_control->installables; @DEBIAN_CONTROL_SOURCE
= grep { $_ ne 'Standards-Version' } @DEBIAN_CONTROL_SOURCE;
@DSC = grep { $_ ne 'Standards-Version' } @DSC;
}
my $fields = $self->processable->fields; my $fields = $self->processable->fields;
my @missing_dsc = grep { !$fields->declares($_) } @DSC; my @missing_dsc = grep { !$fields->declares($_) } @DSC;
@ -67,7 +71,6 @@ sub source {
my $dscfile = path($self->processable->path)->basename; my $dscfile = path($self->processable->path)->basename;
$self->hint('required-field', $dscfile, $_) for @missing_dsc; $self->hint('required-field', $dscfile, $_) for @missing_dsc;
my $debian_control = $self->processable->debian_control;
my $control_item = $debian_control->item; my $control_item = $debian_control->item;
# look at d/control source paragraph # look at d/control source paragraph

View File

@ -37,7 +37,8 @@ with 'Lintian::Check';
const my $EMPTY => q{}; const my $EMPTY => q{};
our %KNOWN_ARCHIVE_PARTS = map { $_ => 1 } qw(non-free contrib); our %KNOWN_ARCHIVE_PARTS
= map { $_ => 1 } qw(non-free contrib non-free-firmware);
sub udeb { sub udeb {
my ($self) = @_; my ($self) = @_;

View File

@ -74,7 +74,7 @@ sub source {
my $latest_standard = $policy_releases->latest_version; my $latest_standard = $policy_releases->latest_version;
my ($latest_major, $latest_minor, $latest_patch) my ($latest_major, $latest_minor, $latest_patch)
= split(/[.]/, $latest_standard, $MAXIMUM_COMPONENTS_ANALYZED); = ((split(/[.]/, $latest_standard))[0..$MAXIMUM_COMPONENTS_ANALYZED]);
# a fourth digit is a non-normative change in policy # a fourth digit is a non-normative change in policy
my $latest_normalized my $latest_normalized
@ -99,7 +99,7 @@ sub source {
if (versioncmp($compliance_standard, $latest_standard) == 1) { if (versioncmp($compliance_standard, $latest_standard) == 1) {
$self->hint('newer-standards-version', $self->hint('newer-standards-version',
"$compliance_standard (current is $latest_standard)") "$compliance_standard (current is $latest_normalized)")
unless $distribution =~ /backports/; unless $distribution =~ /backports/;
} else { } else {
@ -146,7 +146,7 @@ sub source {
= grep { $_ <= $changelog_epoch } @newer_normative_epochs; = grep { $_ <= $changelog_epoch } @newer_normative_epochs;
my $outdated_illustration my $outdated_illustration
= "$compliance_standard (released $compliance_date) (current is $latest_standard)"; = "$compliance_standard (released $compliance_date) (current is $latest_normalized)";
# use normative to prevent tag changes on minor new policy edits # use normative to prevent tag changes on minor new policy edits
$self->hint('out-of-date-standards-version', $outdated_illustration) $self->hint('out-of-date-standards-version', $outdated_illustration)

View File

@ -35,13 +35,22 @@ use namespace::clean;
with 'Lintian::Check'; with 'Lintian::Check';
# Whitelist of XS-* source fields
my %source_field_whitelist = (
'Autobuild' => 1,
'Go-Import-Path' => 1,
'Ruby-Versions' => 1,
);
sub source { sub source {
my ($self) = @_; my ($self) = @_;
my $KNOWN_SOURCE_FIELDS= $self->data->load('common/source-fields'); my $KNOWN_SOURCE_FIELDS= $self->data->load('common/source-fields');
my @unknown= $self->processable->fields->extra($KNOWN_SOURCE_FIELDS->all); my @unknown= $self->processable->fields->extra($KNOWN_SOURCE_FIELDS->all);
$self->hint('unknown-field', $_)for @unknown; # The grep filter is a workaround for #1014885 and #1029471
$self->hint('unknown-field', $_)
for grep { !exists($source_field_whitelist{$_}) } @unknown;
return; return;
} }

View File

@ -52,8 +52,9 @@ my %VCS_EXTRACT = (
# hg uri followed by optional -b branchname # hg uri followed by optional -b branchname
Hg => sub { return shift =~ /^(.+?)(?:\s+-b\s+(\S*))?$/;}, Hg => sub { return shift =~ /^(.+?)(?:\s+-b\s+(\S*))?$/;},
# git uri followed by optional "[subdir]", "-b branchname" etc. # git uri followed by optional "[subdir]", "-b branchname" etc.
Git => Git => sub {
sub { return shift =~ /^(.+?)(?:\s+\[(\S*)\])?(?:\s+-b\s+(\S*))?$/;}, return shift =~ /^(.+?)(?:(?:\s+\[(\S*)\])?(?:\s+-b\s+(\S*))?){0,2}$/;
},
Svn => sub { return @_;}, Svn => sub { return @_;},
# New "mtn://host?branch" uri or deprecated "host branch". # New "mtn://host?branch" uri or deprecated "host branch".
Mtn => sub { return shift =~ /^(.+?)(?:\s+\S+)?$/;}, Mtn => sub { return shift =~ /^(.+?)(?:\s+\S+)?$/;},
@ -203,9 +204,8 @@ sub always {
my $maintainer = $processable->fields->unfolded_value($field); my $maintainer = $processable->fields->unfolded_value($field);
my $is_list if ($maintainer =~ /\b(\S+\@lists(?:\.alioth)?\.debian\.org)\b/
= $maintainer =~ /\b(\S+\@lists(?:\.alioth)?\.debian\.org)\b/; || $maintainer =~ /\b(\S+\@tracker\.debian\.org)\b/) {
if ($is_list) {
$is_teammaintained = 1; $is_teammaintained = 1;
$team_email = $1; $team_email = $1;
$is_maintained_by_individual = 0; $is_maintained_by_individual = 0;
@ -339,14 +339,6 @@ sub always {
); );
} }
} }
$self->hint('old-dpmt-vcs', $platform)
if $maintainer =~ m{python-modules-team\@lists\.alioth\.debian\.org}
and $uri !~ m{salsa.debian.org/python-team/packages/.+};
$self->hint('old-papt-vcs', $platform)
if $maintainer =~ m{python-apps-team\@lists\.alioth\.debian\.org}
and $uri !~ m{salsa.debian.org/python-team/packages/.+};
} }
$self->hint('vcs-fields-use-more-than-one-vcs', $self->hint('vcs-fields-use-more-than-one-vcs',

View File

@ -85,6 +85,11 @@ sub visit_patched_files {
return return
unless $item->is_open_ok; unless $item->is_open_ok;
# Skip if file is a REUSE license (LICENSES/**.txt), which are
# canonically provided with long lines rather than being hard-wrapped.
return
if $item->name =~ m{^ LICENSES/ .* [.] txt $}x;
# Skip if file is detected to be an image or JSON. # Skip if file is detected to be an image or JSON.
return return
if $item->file_type =~ m{image|bitmap|JSON}; if $item->file_type =~ m{image|bitmap|JSON};

View File

@ -55,6 +55,9 @@ sub visit_patched_files {
return return
unless $item->is_file; unless $item->is_file;
return
if $item->dirname =~ m{^debian/missing-sources/};
# prebuilt-file or forbidden file type # prebuilt-file or forbidden file type
$self->pointed_hint('source-contains-prebuilt-wasm-binary', $item->pointer) $self->pointed_hint('source-contains-prebuilt-wasm-binary', $item->pointer)
if $item->file_type =~ m{^WebAssembly \s \(wasm\) \s binary \s module}x; if $item->file_type =~ m{^WebAssembly \s \(wasm\) \s binary \s module}x;

View File

@ -86,11 +86,29 @@ sub visit_installed_files {
19\d{2}[\-\s]19\d{2}\s* 19\d{2}[\-\s]19\d{2}\s*
Adobe\s*Systems\s*Incorporated\.?\s*\Z}xsmi; Adobe\s*Systems\s*Incorporated\.?\s*\Z}xsmi;
# If copy pasted from black book they are # If copy pasted from black book they are
# copyright adobe a few line before the only # copyright adobe a few line before the only
# place where the startlock is documented is # place where the startlock is documented is
# in the black book copyrighted fragment # in the black book copyrighted fragment
if ($line =~ m/startlock\s*get\s*exec/) { #
# 2023-06-05: this check has been adjusted because
# Adobe's type hint code[1] (including Flex[2]) became
# open source[3] with an Apache-2.0 license[4] as
# committed on 2014-09-19, making that check a false
# positive[7].
#
# We continue to check for copyrighted code that is not
# available under an open source license from the origin
# publication, "Adobe Type 1 Font Format"[5][6].
#
# [1] - https://github.com/adobe-type-tools/afdko/blob/2bf85cf44a64148353b24db17e0cc41ede5493b1/FDK/Tools/Programs/public/lib/source/t1write/t1write_hintothers.h
# [2] - https://github.com/adobe-type-tools/afdko/blob/2bf85cf44a64148353b24db17e0cc41ede5493b1/FDK/Tools/Programs/public/lib/source/t1write/t1write_flexothers.h
# [3] - https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1375813.html
# [4] - https://github.com/adobe-type-tools/afdko/blob/2bf85cf44a64148353b24db17e0cc41ede5493b1/LICENSE.txt
# [5] - https://adobe-type-tools.github.io/font-tech-notes/pdfs/T1_SPEC.pdf
# [6] - https://lccn.loc.gov/90042516
# [7] - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1029555
if ($line =~ m/UniqueID\s*6859/) {
$self->pointed_hint( $self->pointed_hint(
'license-problem-font-adobe-copyrighted-fragment-no-credit', 'license-problem-font-adobe-copyrighted-fragment-no-credit',

View File

@ -472,16 +472,6 @@ sub check_init {
$saw_command{$1} = 1; $saw_command{$1} = 1;
} }
if (
$line =~ m{^\s*\.\s+/lib/lsb/init-functions}
&& !$processable->relation('strong')->satisfies('lsb-base:any')
&& (none { $_->basename =~ m/\.service$/ && !$_->is_dir }
@{$processable->installed->sorted_list})
) {
$self->pointed_hint('init.d-script-needs-depends-on-lsb-base',
$item->pointer($position));
}
# nested while # nested while
} continue { } continue {
++$position; ++$position;
@ -718,25 +708,6 @@ sub check_defaults {
sub visit_installed_files { sub visit_installed_files {
my ($self, $item) = @_; my ($self, $item) = @_;
# check for missing init.d script when alternative init system is present
if ( $item =~ m{etc/sv/(?<svc>[^/]+)/run$}
|| $item =~ m{(?<usr>usr/)?lib/systemd/system/(?<svc>[^/@]+)\.service})
{
my ($usr, $service) = ($+{usr} // $EMPTY, $+{svc});
$self->pointed_hint(
'package-supports-alternative-init-but-no-init.d-script',
$item->pointer)
unless $self->processable->installed->resolve_path(
"etc/init.d/${service}")
|| $self->processable->installed->resolve_path(
"${usr}lib/systemd/system/${service}.path")
|| $self->processable->installed->resolve_path(
"${usr}lib/systemd/system/${service}.timer");
}
if ($item =~ m{etc/sv/([^/]+)/$}) { if ($item =~ m{etc/sv/([^/]+)/$}) {
my $service = $1; my $service = $1;

View File

@ -95,6 +95,14 @@ qr{(?i)/mootools(?:(?:\.v|-)[\d\.]+)?(?:-(?:(?:core(?:-server)?)|more)(?:-(?:yc|
qr{(?i)/_static/(?:doctools|language_data|searchtools)} . $JS_EXT, qr{(?i)/_static/(?:doctools|language_data|searchtools)} . $JS_EXT,
'tinymce' => qr{(?i)/tiny_mce(?:_(?:popup|src))?} 'tinymce' => qr{(?i)/tiny_mce(?:_(?:popup|src))?}
. $JS_EXT, . $JS_EXT,
'libjs-lodash' => qr{(?i)lodash} . $JS_EXT,
'node-pako' =>
qr{(?i)pako(?:_(:?de|in)flate(?:.es\d+)?)(?:-[\d\.]+)?}. $JS_EXT,
'node-jszip-utils' => qr{(?i)jszip-utils(?:-ie)?(?:-[\d\.]+)?}
. $JS_EXT,
'node-jszip' => qr{(?i)jszip(?:-ie)?(?:-[\d\.]+)?} . $JS_EXT,
'libjs-codemirror' => qr{(?i)codemirror} . $JS_EXT,
'libjs-punycode' => qr{(?i)punycode(?:\.es\d+)?} . $JS_EXT,
# not yet available in unstable # not yet available in unstable
# 'xinha' => qr{(?i)/(htmlarea|Xinha(Loader|Core))} . $JS_EXT, # 'xinha' => qr{(?i)/(htmlarea|Xinha(Loader|Core))} . $JS_EXT,
); );

View File

@ -149,7 +149,8 @@ sub source {
$self->pointed_hint('composer-package-without-pkg-php-tools-builddep', $self->pointed_hint('composer-package-without-pkg-php-tools-builddep',
$composer_json->pointer) $composer_json->pointer)
if defined $composer_json if defined $composer_json
&& !$build_depends->satisfies('pkg-php-tools') && !($build_depends->satisfies('pkg-php-tools')
|| $build_depends->satisfies('dh-sequence-phpcomposer'))
&& !defined $package_xml && !defined $package_xml
&& !defined $package2_xml; && !defined $package2_xml;

View File

@ -119,11 +119,6 @@ sub source {
if $build_all->satisfies('python-sphinx') if $build_all->satisfies('python-sphinx')
&& !$build_all->satisfies('python3-sphinx'); && !$build_all->satisfies('python3-sphinx');
my $maintainer = $self->processable->fields->value('Maintainer');
$self->hint('python-teams-merged', $maintainer)
if $maintainer =~ m{python-modules-team\@lists\.alioth\.debian\.org}
|| $maintainer =~ m{python-apps-team\@lists\.alioth\.debian\.org};
$self->hint( $self->hint(
'alternatively-build-depends-on-python-sphinx-and-python3-sphinx') 'alternatively-build-depends-on-python-sphinx-and-python3-sphinx')
if $self->processable->fields->value('Build-Depends') if $self->processable->fields->value('Build-Depends')
@ -225,7 +220,11 @@ sub source {
my %PYPROJECT_PREREQUISITES = ( my %PYPROJECT_PREREQUISITES = (
'poetry.core.masonry.api' => 'python3-poetry-core:any', 'poetry.core.masonry.api' => 'python3-poetry-core:any',
'flit_core.buildapi' => 'flit:any', 'flit_core.buildapi' => 'flit:any',
'setuptools.build_meta' => 'python3-setuptools:any' 'setuptools.build_meta' => 'python3-setuptools:any',
'pdm.pep517.api' => 'python3-pdm-pep517:any',
'hatchling.build' => 'python3-hatchling:any',
'mesonpy' => 'python3-mesonpy:any',
'sipbuild.api' => 'python3-sipbuild:any'
); );
open(my $fd, '<', $pyproject->unpacked_path) open(my $fd, '<', $pyproject->unpacked_path)
@ -236,7 +235,10 @@ sub source {
my $pointer = $pyproject->pointer($position); my $pointer = $pyproject->pointer($position);
if ($line =~ m{^ \s* build-backend \s* = \s* "([^"]+)" }x) { # In theory, TOML only uses double quotes. In practice, that's not
# true and only matching for double quotes introduce false negatives
if ($line =~ m{^ \s* build-backend \s* = \s* "([^"]+)" }x
|| $line =~ m{^ \s* build-backend \s* = \s* '([^"]+)' }x) {
my $backend = $1; my $backend = $1;
@ -245,6 +247,11 @@ sub source {
&& $build_depends->satisfies('python3-poetry:any') && $build_depends->satisfies('python3-poetry:any')
&& !$build_depends->satisfies('python3-poetry-core:any'); && !$build_depends->satisfies('python3-poetry-core:any');
$self->pointed_hint('uses-pdm-cli', $pointer)
if $backend eq 'pdm.pep517.api'
&& $build_depends->satisfies('python3-pdm:any')
&& !$build_depends->satisfies('python3-pdm-pep517:any');
if (exists $PYPROJECT_PREREQUISITES{$backend}) { if (exists $PYPROJECT_PREREQUISITES{$backend}) {
my $prerequisites = $PYPROJECT_PREREQUISITES{$backend} my $prerequisites = $PYPROJECT_PREREQUISITES{$backend}
@ -253,7 +260,7 @@ sub source {
$self->pointed_hint( $self->pointed_hint(
'missing-prerequisite-for-pyproject-backend', 'missing-prerequisite-for-pyproject-backend',
$pointer, $backend,"(does not satisfy $prerequisites)") $pointer, $backend,"(does not satisfy $prerequisites)")
if !$build_depends->satisfies($prerequisites); if !$build_all->satisfies($prerequisites);
} }
} }

View File

@ -0,0 +1,77 @@
# languages/python/distutils -- lintian check script -*- perl -*-
#
# Copyright (C) 2022 Louis-Philippe Véronneau <pollo@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, you can find it on the World Wide
# Web at https://www.gnu.org/copyleft/gpl.html, or write to the Free
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
package Lintian::Check::Languages::Python::Distutils;
use v5.20;
use warnings;
use utf8;
use Moo;
use namespace::clean;
with 'Lintian::Check';
my $PYTHON3_DEPEND
= 'python3:any | python3-dev:any | python3-all:any | python3-all-dev:any';
sub visit_patched_files {
my ($self, $item) = @_;
my $build_all = $self->processable->relation('Build-Depends-All');
# Skip if the package doesn't depend on python
return
unless $build_all->satisfies($PYTHON3_DEPEND);
# Skip if it's not a python file
return
unless $item->name =~ /\.py$/;
# Skip if we can't open the file
return
unless $item->is_open_ok;
open(my $fd, '<', $item->unpacked_path)
or die encode_utf8('Cannot open ' . $item->unpacked_path);
my $position = 1;
while (my $line = <$fd>) {
my $pointer = $item->pointer($position);
$self->pointed_hint('uses-python-distutils', $pointer)
if $line =~ m{^from distutils} || $line =~ m{^import distutils};
} continue {
++$position;
}
close $fd;
return;
}
1;
# Local Variables:
# indent-tabs-mode: nil
# cperl-indent-level: 4
# End:
# vim: syntax=perl sw=4 sts=4 sr et

View File

@ -47,7 +47,15 @@ sub visit_installed_files {
$self->pointed_hint('executable-stack-in-shared-library', $item->pointer) $self->pointed_hint('executable-stack-in-shared-library', $item->pointer)
if exists $item->elf->{PH}{STACK} if exists $item->elf->{PH}{STACK}
&& $item->elf->{PH}{STACK}{flags} ne 'rw-'; && $item->elf->{PH}{STACK}{flags} ne 'rw-'
# Once the following line is removed again, please also remove
# the Test-Architectures line in
# t/recipes/checks/libraries/shared/stack/shared-libs-exec-stack/eval/desc
# and the MIPS-related notes in
# tags/e/executable-stack-in-shared-library.tag. See
# https://bugs.debian.org/1025436 and
# https://bugs.debian.org/1022787 for details
&& $self->processable->fields->value('Architecture') !~ /mips/;
return; return;
} }

View File

@ -38,9 +38,9 @@ with 'Lintian::Check';
const my $EMPTY => q{}; const my $EMPTY => q{};
# date --date="Sat, 6 Jul 2019 20:53:14 -0400" +%s # date --date="Sat, 14 Aug 2021 17:41:41 -0400" +%s
# https://lists.debian.org/debian-announce/2019/msg00003.html # https://lists.debian.org/debian-announce/2021/msg00003.html
const my $OLDSTABLE_RELEASE_EPOCH => 1_562_460_794; const my $OLDSTABLE_RELEASE_EPOCH => 1_628_977_301;
# When detecting commands inside shell scripts, use this regex to match the # When detecting commands inside shell scripts, use this regex to match the
# beginning of the command rather than checking whether the command is at the # beginning of the command rather than checking whether the command is at the

View File

@ -102,6 +102,7 @@ sub source {
my $version_nmuness = 0; my $version_nmuness = 0;
my $version_local = 0; my $version_local = 0;
my $upload_is_backport = $version =~ m/~bpo(\d+)\+(\d+)$/; my $upload_is_backport = $version =~ m/~bpo(\d+)\+(\d+)$/;
my $upload_is_stable_update = $version =~ m/~deb(\d+)u(\d+)$/;
if ($version =~ /-[^.-]+(\.[^.-]+)?(\.[^.-]+)?$/) { if ($version =~ /-[^.-]+(\.[^.-]+)?(\.[^.-]+)?$/) {
$version_nmuness = 1 if defined $1; $version_nmuness = 1 if defined $1;
@ -158,6 +159,7 @@ sub source {
$pointer, $version) $pointer, $version)
if $upload_is_nmu if $upload_is_nmu
&& $version_nmuness != 1 && $version_nmuness != 1
&& !$upload_is_stable_update
&& !$upload_is_backport; && !$upload_is_backport;
} }

View File

@ -62,6 +62,7 @@ our $PYTHON3_ALL_DEPEND
my %KNOWN_SPECIAL_DEPENDS = map { $_ => 1 } qw( my %KNOWN_SPECIAL_DEPENDS = map { $_ => 1 } qw(
@ @
@builddeps@ @builddeps@
@recommends@
); );
sub source { sub source {

View File

@ -41,20 +41,23 @@ with 'Lintian::Check';
sub installable { sub installable {
my ($self) = @_; my ($self) = @_;
my $rules_dir foreach my $lib_dir (qw(usr/lib lib)) {
= $self->processable->installed->resolve_path('lib/udev/rules.d/'); my $rules_dir
return = $self->processable->installed->resolve_path(
unless $rules_dir; "$lib_dir/udev/rules.d/");
next
unless $rules_dir;
for my $item ($rules_dir->children) { for my $item ($rules_dir->children) {
if (!$item->is_open_ok) { if (!$item->is_open_ok) {
$self->pointed_hint('udev-rule-unreadable', $item->pointer); $self->pointed_hint('udev-rule-unreadable', $item->pointer);
next; next;
}
$self->check_udev_rules($item);
} }
$self->check_udev_rules($item);
} }
return; return;

View File

@ -81,9 +81,14 @@ sub source {
# check signatures # check signatures
my @allsigs = map { @{$signatures{$_}} } @origtar; my @allsigs = map { @{$signatures{$_}} } @origtar;
for my $signature (@allsigs) { for my $signature (@allsigs) {
my $sig_file = path($parentdir)->child($signature);
# Only try to slurp file if it exists. Otherwise Path::Tiny ≥
# 0.142 will bail out. (Returned empty string instead before
# that version.)
next unless $sig_file->is_file;
# take from location near input file # take from location near input file
my $contents = path($parentdir)->child($signature)->slurp; my $contents = $sig_file->slurp;
if ($contents =~ /^-----BEGIN PGP ARMORED FILE-----/m) { if ($contents =~ /^-----BEGIN PGP ARMORED FILE-----/m) {

View File

@ -122,7 +122,8 @@ sub all_sources {
$self->debhelper_levels,$self->fonts, $self->debhelper_levels,$self->fonts,
$self->hardening_buildflags,$self->mail_transport_agents, $self->hardening_buildflags,$self->mail_transport_agents,
$self->policy_releases,$self->sections, $self->policy_releases,$self->sections,
$self->style_sheet,$self->virtual_initd_facilities #$self->style_sheet,
$self->virtual_initd_facilities
); );
return @sources; return @sources;
@ -308,10 +309,10 @@ has style_sheet => (
default => sub { default => sub {
my ($self) = @_; my ($self) = @_;
my $releases = Lintian::Data::Stylesheet->new; my $stylesheets = Lintian::Data::Stylesheet->new;
$releases->load($self->data_paths, $self->vendor); $stylesheets->load($self->data_paths, $self->vendor);
return $releases; return $stylesheets;
} }
); );

View File

@ -72,7 +72,7 @@ sub add_file_types {
my @files = grep { $_->is_file } @{$self->sorted_list}; my @files = grep { $_->is_file } @{$self->sorted_list};
my @names = map { $_->name } @files; my @names = map { $_->name } @files;
my @command = qw(file --no-pad --print0 --print0 --); my @command = qw(file --raw --no-pad --print0 --print0 --);
my %file_types; my %file_types;

View File

@ -191,8 +191,7 @@ sub process{
next next
unless $PROFILE->display_level_for_tag($hint->tag_name); unless $PROFILE->display_level_for_tag($hint->tag_name);
if (!defined $hint->override if (!defined $hint->override) {
|| $option->{'show-overrides'}) {
++$reported_count{$tag->visibility} ++$reported_count{$tag->visibility}
if !$tag->experimental; if !$tag->experimental;

View File

@ -80,7 +80,8 @@ has is_non_free => (
$section ||= 'main'; $section ||= 'main';
return 1 return 1
if $section =~ m{^(?:non-free|restricted|multiverse)/}; if $section
=~ m{^(?:non-free|non-free-firmware|restricted|multiverse)/};
return 0; return 0;
} }

View File

@ -116,7 +116,7 @@ has orig => (
my $errors = $subindex->create_from_piped_tar(\@command); my $errors = $subindex->create_from_piped_tar(\@command);
push(@{$index->unpack_messages}, "$tarball . $_") push(@{$index->unpack_messages}, "$tarball . $_")
for uniq split(/\n/, $errors); for grep { !/^tar: Ignoring / } uniq split(/\n/, $errors);
# treat hard links like regular files # treat hard links like regular files
my @hardlinks = grep { $_->is_hardlink } @{$subindex->sorted_list}; my @hardlinks = grep { $_->is_hardlink } @{$subindex->sorted_list};

View File

@ -131,8 +131,8 @@ has patched => (
chdir($savedir) chdir($savedir)
or die encode_utf8("Cannot change to directory $savedir"); or die encode_utf8("Cannot change to directory $savedir");
my @messages my @messages = grep { !/^tar: Ignoring / }
= split(/\n/, $unpack_errors . $index_errors . $permissions_errors); split(/\n/, $unpack_errors . $index_errors . $permissions_errors);
push(@{$index->unpack_messages}, @messages); push(@{$index->unpack_messages}, @messages);
return $index; return $index;

View File

@ -81,7 +81,7 @@ relationship a superset of another relationship."
=item name =item name
=item multiarch_acceptor =item multiarch_qualifier
=item version_operator =item version_operator
@ -107,7 +107,7 @@ has name => (
coerce => sub { my ($text) = @_; return ($text // $EMPTY); } coerce => sub { my ($text) = @_; return ($text // $EMPTY); }
); );
has multiarch_acceptor => ( has multiarch_qualifier => (
is => 'rw', is => 'rw',
default => $EMPTY, default => $EMPTY,
coerce => sub { my ($text) = @_; return ($text // $EMPTY); } coerce => sub { my ($text) = @_; return ($text // $EMPTY); }
@ -190,7 +190,7 @@ sub parse {
$self->parsable($TRUE); $self->parsable($TRUE);
$self->name($1); $self->name($1);
$self->multiarch_acceptor($2); $self->multiarch_qualifier($2);
$self->version_operator($3); $self->version_operator($3);
$self->reference_version($4); $self->reference_version($4);
$self->build_architecture($5); $self->build_architecture($5);
@ -206,7 +206,7 @@ sub parse {
if $self->version_operator eq $GREATER_THAN; if $self->version_operator eq $GREATER_THAN;
unless ($with_restrictions) { unless ($with_restrictions) {
$self->multiarch_acceptor('any'); $self->multiarch_qualifier('any');
$self->version_operator($EMPTY); $self->version_operator($EMPTY);
$self->reference_version($EMPTY); $self->reference_version($EMPTY);
$self->build_architecture($EMPTY); $self->build_architecture($EMPTY);
@ -350,17 +350,17 @@ sub satisfies {
# pkg has no chance of satisfing pkg:Y unless Y is 'any' # pkg has no chance of satisfing pkg:Y unless Y is 'any'
return undef return undef
if !length $self->multiarch_acceptor if !length $self->multiarch_qualifier
&& length $other->multiarch_acceptor && length $other->multiarch_qualifier
&& $other->multiarch_acceptor ne 'any'; && $other->multiarch_qualifier ne 'any';
# TODO: Review this case. Are there cases where other cannot # TODO: Review this case. Are there cases where other cannot
# disprove self due to the ":any"-qualifier? For now, we # disprove self due to the ":any"-qualifier? For now, we
# assume there are no such cases. # assume there are no such cases.
# pkg:X has no chance of satisfying pkg # pkg:X has no chance of satisfying pkg
return undef return undef
if length $self->multiarch_acceptor if length $self->multiarch_qualifier
&& !length $other->multiarch_acceptor; && !length $other->multiarch_qualifier;
# For now assert that only the identity holds. In practise, the # For now assert that only the identity holds. In practise, the
# "pkg:X" (for any valid value of X) seems to satisfy "pkg:any", # "pkg:X" (for any valid value of X) seems to satisfy "pkg:any",
@ -368,9 +368,9 @@ sub satisfies {
# matters) # matters)
# pkg:X has no chance of satisfying pkg:Y unless X equals Y # pkg:X has no chance of satisfying pkg:Y unless X equals Y
return undef return undef
if length $self->multiarch_acceptor if length $self->multiarch_qualifier
&& length $other->multiarch_acceptor && length $other->multiarch_qualifier
&& $self->multiarch_acceptor ne $other->multiarch_acceptor; && $self->multiarch_qualifier ne $other->multiarch_qualifier;
# Now, down to version. The implication is true if self's clause is stronger # Now, down to version. The implication is true if self's clause is stronger
# than other's, or is equivalent. # than other's, or is equivalent.
@ -511,8 +511,8 @@ sub to_string {
my $text = $self->name; my $text = $self->name;
$text .= $COLON . $self->multiarch_acceptor $text .= $COLON . $self->multiarch_qualifier
if length $self->multiarch_acceptor; if length $self->multiarch_qualifier;
$text $text
.= $SPACE .= $SPACE

View File

@ -35,8 +35,7 @@ sub suppress {
return 1 return 1
if $item->dirname =~ m{ [^/] [.] dist-info / $}x if $item->dirname =~ m{ [^/] [.] dist-info / $}x
&& defined $item->parent_dir->child('METADATA') && defined $item->parent_dir->child('METADATA')
&& defined $item->parent_dir->child('WHEEL') && defined $item->parent_dir->child('WHEEL');
&& defined $item->parent_dir->child('RECORD');
return 1 return 1
if $item->dirname =~ m{ [^/] [.] egg-info / $}x if $item->dirname =~ m{ [^/] [.] egg-info / $}x

View File

@ -4,6 +4,7 @@
# Copyright (C) 2009 Russ Allbery # Copyright (C) 2009 Russ Allbery
# Copyright (C) 2004 Marc Brockschmidt # Copyright (C) 2004 Marc Brockschmidt
# Copyright (C) 1998 Richard Braakman # Copyright (C) 1998 Richard Braakman
# Copyright (C) 2023 Axel Beckert
# #
# This program is free software; you can redistribute it and/or modify it # This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free # under the terms of the GNU General Public License as published by the Free
@ -153,7 +154,8 @@ sub check_spelling {
if not $quoted if not $quoted
and not $duplicates{$word}++ and not $duplicates{$word}++
and not $ends_with_punct and not $ends_with_punct
and $text_orig !~ /\b$word\s*\($word\b/; and $text_orig !~ /\b$word\s*\($word\b/
and $text_orig !~ /\b$word\)\s*$word\b/;
} }
if ($word =~ m/^[A-Za-z]+$/ and not $ends_with_punct) { if ($word =~ m/^[A-Za-z]+$/ and not $ends_with_punct) {

View File

@ -83,15 +83,20 @@ sub version_from_git {
return $EMPTY return $EMPTY
unless -d $git_path; unless -d $git_path;
my $describe # Example outputs:
= decode_utf8(safe_qx('git', "--git-dir=$git_path", 'describe')); # 2.115.3-49-g086a9a113
# 2.115.3-49-g086a9a113-dirty
my $describe = decode_utf8(
safe_qx('git', "--git-dir=$git_path", 'describe', '--dirty'));
chomp $describe; chomp $describe;
my ($guess, $step, $commit) = split(/-/, $describe); # Modify it to make it a valid native version number and make it
return $EMPTY # look more debianish like these:
unless defined $step; # 2.115.3+49commits+git086a9a113
# 2.115.3+49commits+git086a9a113+dirty
$guess =~ s/ [.] 0 $/.$step/sx; my $guess = $describe;
$guess =~ s/ - ( \d+ ) -g /+${1}commits+git/sx;
$guess =~ s/ - /+/sxg;
return ($guess // $EMPTY); return ($guess // $EMPTY);
} }

View File

@ -95,7 +95,7 @@ if ($opt{'in-place'}) {
or die encode_utf8("Cannot open $infile"); or die encode_utf8("Cannot open $infile");
my $outfile = 'debian/changelog.tmp'; my $outfile = 'debian/changelog.tmp';
open(my $out_fd, '>:encoding(UTF-8)', $outfile) open(my $out_fd, '>', $outfile)
or die encode_utf8("Cannot open $outfile"); or die encode_utf8("Cannot open $outfile");
while (my $line = <$in_fd>) { while (my $line = <$in_fd>) {

View File

@ -0,0 +1,15 @@
#!/bin/sh
# Post-release version bump script. Not really lintian-specific, but needed here.
set -e
if head -1 debian/changelog | grep -Fq 'UNRELEASED' ; then
echo 'Most recent debian/changelog entry already sports an "UNRELEASED", doing nothing.'
exit 1;
fi
dch --increment 'WIP (generated at release time: please do not add entries below.)'
sed -e '1 s/)/~git)/' -i debian/changelog
git add debian/changelog
git commit -m "Post-release version bump" -m "Gbp-Dch: Ignore"

View File

@ -9,6 +9,9 @@ Disable-Tags:
maintainer-upload-has-incorrect-version-number maintainer-upload-has-incorrect-version-number
no-human-maintainers no-human-maintainers
no-nmu-in-changelog no-nmu-in-changelog
not-binnmuable-all-depends-any
not-binnmuable-any-depends-all
not-binnmuable-any-depends-any
qa-upload-has-incorrect-version-number qa-upload-has-incorrect-version-number
source-nmu-has-incorrect-version-number source-nmu-has-incorrect-version-number
team-upload-has-incorrect-version-number team-upload-has-incorrect-version-number

View File

@ -29,7 +29,7 @@ set yrange [ 0 : ]
set output sprintf("%s/tags/%s.svg", graph_dir, tag) set output sprintf("%s/tags/%s.svg", graph_dir, tag)
plot sprintf("%s/tags/%s.dat", history_dir, tag) \ plot sprintf("%s/tags/%s.dat", history_dir, tag) \
u 1:2 w filledcurve x1 ls 20 t 'Tags', \ u 1:2 w filledcurve x1 ls 20 t sprintf("Tag %s emitted", tag), \
'' u 1:4 w filledcurve x1 ls 21 t 'Packages', \ '' u 1:4 w filledcurve x1 ls 21 t sprintf("Packages which emitted %s", tag), \
'' u 1:3 w filledcurve x1 ls 22 t 'Overridden' '' u 1:3 w filledcurve x1 ls 22 t sprintf("Tag %s overridden", tag)

View File

@ -1 +0,0 @@
../frontend/dplint

View File

@ -18,28 +18,6 @@ Use generic- as a prefix for test cases that don't cover a specific
portion of Lintian but instead test Lintian's behavior on a useful special portion of Lintian but instead test Lintian's behavior on a useful special
case of package (such as a generic dh-make template). case of package (such as a generic dh-make template).
Sequence numbers
----------------
Each test should have a sequence number to get a more deterministic order.
You do not need to use unique numbers, only enough to make the order
deterministic and to your liking! You should use the middle of the
assigned range as default number and only divert from it if you have a
reason to.
Number ranges:
0000 - 0999 Basic test, that generally just assure that the test
suite and lintian are not completely broken
1000 - 1999 Tests for lib/ [1500]
2000 - 2999 Tests for frontend/ [2500]
3000 - 3999 Tests for unpack/ [3500]
4000 - 4999 Tests for collection/[4500]
5000 - 6999 Tests for checks/ [6000]
7000 - 8999 <unused>
9000 - 9998 Tests for reporting/ [9500]
9999 Tests from the old legacy test suite
The desc file The desc file
------------- -------------
@ -51,8 +29,8 @@ fields are:
Description: <description of the purpose of the test> Description: <description of the purpose of the test>
In addition, the tags (if any) that the test case is testing for should be In addition, the tags (if any) that the test case is testing for should be
listed in a Test-For key. The tags that the test case is testing are not listed in a Test-For key. If the test case is expecting some tags to not
issued (checking against false positives) should be listed in a be issued (checking against false positives), those tags should be listed in a
Test-Against key. In both cases, the tags should be separated by Test-Against key. In both cases, the tags should be separated by
whitespace. The following format is suggested for multiple tags: whitespace. The following format is suggested for multiple tags:
@ -69,11 +47,10 @@ For example, to test --show-overrides with the -T option, use:
Options: --show-overrides -T no-copyright-file Options: --show-overrides -T no-copyright-file
The string TESTSET is no longer replaced in the Options field. Instead,
Lintian is run in the test's directory. Please use a local, relative Lintian is run in the test's directory. Please use a local, relative
reference to the file or list the tags explicitly with '--suppress-tags'. reference to the file or list the tags explicitly with '--suppress-tags'.
By default, the Lintian output is sorted before comparing it to the tags By default, the Lintian output is sorted before comparing it to the 'hints'
file. To suppress the sort (when, for instance, checking non-standard file. To suppress the sort (when, for instance, checking non-standard
output formats), use: output formats), use:
@ -84,7 +61,7 @@ the test case as a non-native package, add:
Type: non-native Type: non-native
to the .desc file. You will also want to change the version number to to the 'desc' file. You will also want to change the version number to
be non-native unless you're testing a mismatch. be non-native unless you're testing a mismatch.
By default all tests are run with the default Lintian profile. If a By default all tests are run with the default Lintian profile. If a
@ -100,7 +77,7 @@ failing, use:
Todo: yes Todo: yes
Test cases marked as Todo will succeed if they fail _the testing step_ Test cases marked as 'Todo: yes' will succeed if they fail _the testing step_
and fail if they succeed. Although this option can be very useful to and fail if they succeed. Although this option can be very useful to
document what needs to be done, the ideal situation is to have none of document what needs to be done, the ideal situation is to have none of
them :) them :)
@ -174,7 +151,7 @@ If you notice such a case, you can use:
If any of the dependencies are unavailable or conflicts are present, If any of the dependencies are unavailable or conflicts are present,
the test will be skipped. the test will be skipped.
All other fields in the .desc file are optional and control the values All other fields in the desc file are optional and control the values
filled into the template control and changelog files by the test suite filled into the template control and changelog files by the test suite
harness. The following additional fields are currently supported: harness. The following additional fields are currently supported:

View File

@ -1,4 +1,4 @@
appstream-metadata (binary): appstream-metadata-missing-modalias-provide match rule usb:v0000p000Ad* [lib/udev/rules.d/60-appstream-metadata.rules:13] appstream-metadata (binary): appstream-metadata-missing-modalias-provide match rule usb:v0000p000Ad* [usr/lib/udev/rules.d/60-appstream-metadata.rules:13]
appstream-metadata (binary): appstream-metadata-malformed-modalias-provide include non-valid hex digit in USB matching rule 'usb:v0000p000ad*' [usr/share/metainfo/appstream-metadata.metadata.xml] appstream-metadata (binary): appstream-metadata-malformed-modalias-provide include non-valid hex digit in USB matching rule 'usb:v0000p000ad*' [usr/share/metainfo/appstream-metadata.metadata.xml]
appstream-metadata (binary): appstream-metadata-legacy-format [usr/share/appdata/appstream-metadata-obsolete.metadata.xml] appstream-metadata (binary): appstream-metadata-legacy-format [usr/share/appdata/appstream-metadata-obsolete.metadata.xml]
appstream-metadata (binary): appstream-metadata-invalid [usr/share/metainfo/appstream-metadata-invalid.metadata.xml] appstream-metadata (binary): appstream-metadata-invalid [usr/share/metainfo/appstream-metadata-invalid.metadata.xml]

View File

@ -1 +1 @@
libbasic2 (binary): binary-file-built-without-LFS-support usr/lib/libbasic.so.2 libbasic2 (binary): binary-file-built-without-LFS-support [usr/lib/libbasic.so.2]

View File

@ -1,7 +1,7 @@
#!/usr/bin/make -f #!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie
export DEB_LDFLAGS_MAINT_APPEND=-Wl,--no-as-needed export DEB_LDFLAGS_MAINT_APPEND=-Wl,--no-as-needed -fPIC
%: %:
dh $@ --buildsystem pybuild dh $@ --buildsystem pybuild

View File

@ -1 +1,3 @@
AC_INIT
AC_PATH_PROG(PKG_CONFIG, pkg-config, no) AC_PATH_PROG(PKG_CONFIG, pkg-config, no)

Some files were not shown because too many files have changed in this diff Show More