[lintian] 01/02: c/triggers: Check for duplicated triggers
This is an automated email from the git hooks/post-receive script.
nthykier pushed a commit to branch master
in repository lintian.
commit 24a088ee88bcc4c84dc95374a3bcf0455ef25ab3
Author: Niels Thykier <niels@thykier.net>
Date: Fri Apr 21 18:09:11 2017 +0000
c/triggers: Check for duplicated triggers
Signed-off-by: Niels Thykier <niels@thykier.net>
---
checks/triggers.desc | 19 +++++++++++++++++++
checks/triggers.pm | 8 ++++++++
debian/changelog | 2 +-
t/tests/shared-libs-unversioned/debian/debian/rules | 13 +++++++++++++
t/tests/triggers-general/debian/debian/triggers | 4 ++++
t/tests/triggers-general/desc | 1 +
t/tests/triggers-general/tags | 1 +
7 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/checks/triggers.desc b/checks/triggers.desc
index 9382a0e..fba8d56 100644
--- a/checks/triggers.desc
+++ b/checks/triggers.desc
@@ -34,3 +34,22 @@ Info: The listed trigger is present in the control file of the package.
document the rationale in a comment above the trigger and use the
"-await" variant of the trigger to avoid this warning.
Ref: deb-triggers(5), #774559
+
+Tag: repeated-trigger-name
+Severity: important
+Certainty: certain
+Info: The package repeats the same trigger. There should be no reason to
+ do this and it may lead to confusing results or errors.
+ .
+ For the same "base" type of trigger (e.g. two <tt>interest</tt>-type triggers)
+ the last declaration will be the effective one.
+ .
+ This tag is also triggered if the package has an <tt>activate</tt> trigger
+ for something it also declares an <tt>interest</tt>. The only (but rather
+ unlikely) reason to do this is if another package <i>also</i> has an
+ also declares an <tt>interest</tt> and this package need to activate that
+ other package. If the package is using it for this exact purpose, then
+ please use a lintian override to state this.
+ .
+ Please remove any duplicate definitions.
+Ref: deb-triggers(5), #698723
diff --git a/checks/triggers.pm b/checks/triggers.pm
index f891634..5382b10 100644
--- a/checks/triggers.pm
+++ b/checks/triggers.pm
@@ -53,6 +53,7 @@ sub run {
my $triggers_file = $info->control_index('triggers');
return if not $triggers_file or not $triggers_file->is_open_ok;
my $fd = $triggers_file->open;
+ my %seen_triggers;
while (my $line = <$fd>) {
strip($line);
next if $line =~ m/^(?:\s*)(?:#.*)?$/;
@@ -65,6 +66,13 @@ sub run {
if ($trigger_info->{'implicit-await'}) {
tag 'uses-implicit-await-trigger', $line, "(line $.)";
}
+ if (defined(my $prev_info = $seen_triggers{$arg})) {
+ my ($prev_line, $prev_line_no) = @{$prev_info};
+ tag 'repeated-trigger-name', $line, "(line $.)", 'vs', $prev_line,
+ "(line $prev_line_no)";
+ next;
+ }
+ $seen_triggers{$arg} = [$line, $.];
}
return;
}
diff --git a/debian/changelog b/debian/changelog
index 95d698f..999dae5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -70,7 +70,7 @@ lintian (2.5.51) UNRELEASED; urgency=medium
"Tests-Directory" field is set to a single dot. Thanks to
Ian Jackson for reporting the issue. (Closes: #849880)
* checks/triggers.{desc,pm}:
- + [NT] New check.
+ + [NT] New check. (Closes: #698723)
* coll/debian-readme{,desc}:
+ [NT] Remove. Merge what little functionality it offers into the
diff --git a/t/tests/shared-libs-unversioned/debian/debian/rules b/t/tests/shared-libs-unversioned/debian/debian/rules
new file mode 100755
index 0000000..f60e347
--- /dev/null
+++ b/t/tests/shared-libs-unversioned/debian/debian/rules
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+
+export DEB_BUILD_MAINT_OPTIONS=hardening=+all
+
+%:
+ dh $@
+
+# Do this manually so it works with jessie's debhelper without
+# breaking of stretch because we get two triggers.
+# - This rules file can be removed once lintian requires
+# debhelper/9.20160403 or newer.
+override_dh_makeshlibs:
+ dh_makeshlibs -n
diff --git a/t/tests/triggers-general/debian/debian/triggers b/t/tests/triggers-general/debian/debian/triggers
index 29179a0..49656bf 100644
--- a/t/tests/triggers-general/debian/debian/triggers
+++ b/t/tests/triggers-general/debian/debian/triggers
@@ -9,3 +9,7 @@ interest /usr/share/lintian/baz
# Not known by lintian
random-trigger /bar
+
+# Repated trigger
+interest-await /usr/share/lintian/foo2
+interest-noawait /usr/share/lintian/foo2
diff --git a/t/tests/triggers-general/desc b/t/tests/triggers-general/desc
index 6e5c68a..860bc28 100644
--- a/t/tests/triggers-general/desc
+++ b/t/tests/triggers-general/desc
@@ -3,5 +3,6 @@ Sequence: 6000
Version: 1.0
Description: Test of the triggers check
Test-For:
+ repeated-trigger-name
unknown-trigger random-trigger
uses-implicit-await-trigger
diff --git a/t/tests/triggers-general/tags b/t/tests/triggers-general/tags
index a984141..b4daf7d 100644
--- a/t/tests/triggers-general/tags
+++ b/t/tests/triggers-general/tags
@@ -1,2 +1,3 @@
+E: triggers-general: repeated-trigger-name interest-noawait /usr/share/lintian/foo2 (line 15) vs interest-await /usr/share/lintian/foo2 (line 14)
E: triggers-general: unknown-trigger random-trigger /bar (line 11)
W: triggers-general: uses-implicit-await-trigger interest /usr/share/lintian/baz (line 8)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git
Reply to: