With Debian packages now widely being maintained in Git repositories, there has been an uptick in the number of bulk changes made to Debian packages. Several maintainers are running commands over many packages (e.g. all packages owned by a specific team) to fix common issues in packages. Examples of changes being made include:
Most of these can be fixed with simple sed or perl one-liners. Some of these scripts are publically available, for example:
- Updating the Vcs-Git and Vcs-Browser URLs after migrating from alioth to salsa
- Stripping trailing whitespace in various control files
- Updating e.g. homepage URLs to use https rather than http
Lintian-Brush Lintian-Brush is both a simple wrapper around a set of these kinds of scripts and a repository for these scripts, with the goal of making it easy for any Debian maintainer to run them. The lintian-brush command-line tool is a simple wrapper that runs a set of "fixer scripts", and for each:
The tool also provides some basic infrastructure for testing that these scripts do what they should, and e.g. don't have unintended side-effects. The idea is that it should be safe, quick and unobtrusive to run lintian-brush, and get it to opportunistically fix lintian issues and to leave the source tree alone when it can't.
- Reverts the changes made by the script if it failed with an error
- Commits the changes to the VCS with an appropriate commit message
- Adds a changelog entry (if desired)
Example For example, running lintian-brush on the package talloc fixes two minor lintian issues:
% debcheckout talloc declared git repository at https://salsa.debian.org/samba-team/talloc.git git clone https://salsa.debian.org/samba-team/talloc.git talloc ... Cloning into 'talloc'... remote: Enumerating objects: 2702, done. remote: Counting objects: 100% (2702/2702), done. remote: Compressing objects: 100% (996/996), done. remote: Total 2702 (delta 1627), reused 2601 (delta 1550) Receiving objects: 100% (2702/2702), 1.70 MiB 565.00 KiB/s, done. Resolving deltas: 100% (1627/1627), done. % cd talloc talloc% lintian-brush Lintian tags fixed: 'insecure-copyright-format-uri', 'public-upstream-key-not-minimal' % git log commit 0ea35f4bb76f6bca3132a9506189ef7531e5c680 (HEAD -> master) Author: Jelmer Vernoo <firstname.lastname@example.org> Date: Tue Dec 4 16:42:35 2018 +0000 Re-export upstream signing key without extra signatures. Fixes lintian: public-upstream-key-not-minimal See https://lintian.debian.org/tags/public-upstream-key-not-minimal.html for more details. debian/changelog 1 + debian/upstream/signing-key.asc 102 +++++++++++++++--------------------------------------------------------------------------------------- 2 files changed, 16 insertions(+), 87 deletions(-) commit feebce3147df561aa51a385c53d8759b4520c67f Author: Jelmer Vernoo <email@example.com> Date: Tue Dec 4 16:42:28 2018 +0000 Use secure copyright file specification URI. Fixes lintian: insecure-copyright-format-uri See https://lintian.debian.org/tags/insecure-copyright-format-uri.html for more details. debian/changelog 3 +++ debian/copyright 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
Script Interface A fixer script is run in the root directory of a package, where it can make changes it deems necessary, and write a summary of what it's done for the changelog (and commit message) to standard out. If a fixer can not provide any improvements, it can simply leave the working tree untouched - lintian-brush will not create any commits for it or update the changelog. If it exits with a non-zero exit code, then it is assumed that it failed to run and it will be listed as such and its changes reset rather than committed. In addition, tests can be added for fixers by providing various before and after source package trees, to verify that a fixer script makes the expected changes. For more details, see the documentation on writing new fixers.
Availability lintian-brush is currently available in unstable and testing. See man lintian-brush(1) for an explanation of the command-line options. Fixer scripts are included that can fix (some of the instances of) 34 lintian tags. Feedback would be great if you try lintian-brush - please file bugs in the BTS, or propose pull requests with new fixers on salsa.