[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: