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

[lintian] 02/05: Check files as we detect them, and discard invalid files



This is an automated email from the git hooks/post-receive script.

nthykier pushed a commit to branch master
in repository lintian.

commit e10c185c11f2d4c2840b239d3584ca6c01241770
Author: Felipe Sateler <fsateler@debian.org>
Date:   Sat Jun 27 21:56:11 2015 -0300

    Check files as we detect them, and discard invalid files
    
    prevents duplicate service-file-is-not-a-file
    
    Signed-off-by: Niels Thykier <niels@thykier.net>
---
 checks/systemd.pm            | 30 ++++++++++++++++--------------
 t/tests/systemd-general/tags |  1 -
 2 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/checks/systemd.pm b/checks/systemd.pm
index 1411322..79b413e 100644
--- a/checks/systemd.pm
+++ b/checks/systemd.pm
@@ -51,16 +51,12 @@ sub run {
     # This includes Alias= directives, so after parsing
     # NetworkManager.service, it will contain NetworkManager and
     # network-manager.
-    my $services = get_systemd_service_names($info);
+    my $services = get_systemd_service_names($info, \@service_files);
 
     for my $script (@init_scripts) {
         check_init_script($info, $script, $services);
     }
 
-    for my $service (@service_files) {
-        check_systemd_service_file($info, $service);
-    }
-
     check_maintainer_scripts($info);
     return;
 }
@@ -121,12 +117,18 @@ sub check_init_script {
 
 sub get_systemd_service_files {
     my ($info) = @_;
+    my @res;
+    my @potential
+      = grep { m,/systemd/system/.*\.service$, } $info->sorted_index;
 
-    return grep { m,/systemd/system/.*\.service$, } $info->sorted_index;
+    for my $file (@potential) {
+        push(@res, $file) if check_systemd_service_file($info, $file);
+    }
+    return @res;
 }
 
 sub get_systemd_service_names {
-    my ($info) = @_;
+    my ($info,$files_ref) = @_;
     my %services;
 
     my $safe_add_service = sub {
@@ -138,7 +140,7 @@ sub get_systemd_service_names {
         $services{$name} = 1;
     };
 
-    for my $file (get_systemd_service_files($info)) {
+    for my $file (@{$files_ref}) {
         my $name = $file->basename;
         $name =~ s/\.service$//;
         $safe_add_service->($name, $file);
@@ -161,11 +163,16 @@ sub check_systemd_service_file {
     tag 'systemd-service-file-outside-lib', $file
       if ($file =~ m,^usr/lib/systemd/system/,);
 
+    unless ($file->is_open_ok
+        || ($file->is_symlink && $file->link eq '/dev/null')) {
+        tag 'service-file-is-not-a-file', $file;
+        return 0;
+    }
     my @values = extract_service_file_values($info, $file, 'Unit', 'After');
     my @obsolete = grep { /^(?:syslog|dbus)\.target$/ } @values;
     tag 'systemd-service-file-refers-to-obsolete-target', $file, $_
       for @obsolete;
-    return;
+    return 1;
 }
 
 sub service_file_lines {
@@ -207,11 +214,6 @@ sub extract_service_file_values {
 
     my (@values, $section);
 
-    unless ($file->is_open_ok
-        || ($file->is_symlink && $file->link eq '/dev/null')) {
-        tag 'service-file-is-not-a-file', $file;
-        return;
-    }
     my @lines = service_file_lines($file);
     my $key_ws = first_index { /^[[:alnum:]]+(\s*=\s|\s+=)/ } @lines;
     if ($key_ws > -1) {
diff --git a/t/tests/systemd-general/tags b/t/tests/systemd-general/tags
index 47fe757..3223f6a 100644
--- a/t/tests/systemd-general/tags
+++ b/t/tests/systemd-general/tags
@@ -1,6 +1,5 @@
 E: systemd-general: init-script-is-not-a-file etc/init.d/fifo-pipe-as-init
 E: systemd-general: service-file-is-not-a-file etc/systemd/system/fifo-pipe-as-init.service
-E: systemd-general: service-file-is-not-a-file etc/systemd/system/fifo-pipe-as-init.service
 E: systemd-general: service-key-has-whitespace etc/systemd/system/test.service at line 3
 E: systemd-general: service-key-has-whitespace etc/systemd/system/test.service at line 3
 E: systemd-general: service-key-has-whitespace usr/lib/systemd/system/test.service at line 3

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git


Reply to: