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

[lintian] 01/01: Add support for blacklisting source packages in order to prevent some currently-problematic packages such as gcc-8-cross-ports preventing the update of https://lintian.debian.org/. (See #890873)



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

lamby pushed a commit to branch master
in repository lintian.

commit 1129cb09e0e528298f253066baca7fa27f8e6a98
Author: Chris Lamb <lamby@debian.org>
Date:   Sat Apr 7 20:21:55 2018 +0100

    Add support for blacklisting source packages in order to prevent some currently-problematic packages such as gcc-8-cross-ports preventing the update of https://lintian.debian.org/. (See #890873)
---
 commands/reporting-sync-state.pm | 46 +++++++++++++++++++++++++++++++++-------
 debian/changelog                 |  5 +++++
 reporting/config.yaml            |  4 ++++
 3 files changed, 47 insertions(+), 8 deletions(-)

diff --git a/commands/reporting-sync-state.pm b/commands/reporting-sync-state.pm
index 80741ad..2c22e69 100644
--- a/commands/reporting-sync-state.pm
+++ b/commands/reporting-sync-state.pm
@@ -88,8 +88,24 @@ sub required_cfg_non_empty_list_value {
     return $v;
 }
 
+sub optional_cfg_list_value {
+    my (@keys) = @_;
+    my $v = $CONFIG;
+    for my $key (@keys) {
+        if (not exists($v->{$key})) {
+            return [];
+        }
+        $v = $v->{$key};
+    }
+    if (ref($v) ne 'ARRAY') {
+        my $k = join('.', @keys);
+        die("Invalid configuration: ${k} must be a list (or missing)\n");
+    }
+    return $v;
+}
+
 sub main {
-    my ($state_dir, $state, $archives);
+    my ($state_dir, $state, $archives, %blacklist);
     STDOUT->autoflush;
     Getopt::Long::config('bundling', 'no_getopt_compat', 'no_auto_abbrev');
     Getopt::Long::GetOptions(%OPT_HASH) or die("error parsing options\n");
@@ -105,6 +121,7 @@ sub main {
           . (scalar(keys(%{$state->{'groups'}})))
           . ' groups');
     $archives = required_cfg_value('archives');
+    %blacklist = map { $_ => 1 } @{optional_cfg_list_value('blacklist')};
     for my $archive (sort(keys(%{$archives}))) {
         log_debug("Processing archive $archive");
         my $path = required_cfg_value('archives', $archive, 'base-dir');
@@ -117,7 +134,7 @@ sub main {
           = required_cfg_non_empty_list_value('archives', $archive,
             'distributions');
         local_mirror_manifests($state, $path, $distributions, $components,
-            $archs);
+            $archs, \%blacklist);
     }
 
     cleanup_state($state);
@@ -333,11 +350,15 @@ sub cleanup_group_state {
 
 # Helper for local_mirror_manifests - it parses a paragraph from Sources file
 sub _parse_srcs_pg {
-    my ($state, $extra_metadata, $paragraph) = @_;
+    my ($state, $blacklist, $extra_metadata, $paragraph) = @_;
     my $dir = $paragraph->{'directory'}//'';
     my $group_id = $paragraph->{'package'} . '/' . $paragraph->{'version'};
     my $member_id = "source:${group_id}";
     my (%data, %group_metadata, $group_mirror_md);
+    if (exists $blacklist->{$paragraph->{'package'}}) {
+        log_debug("Ignoring blacklisted package src:$paragraph->{'package'}");
+        return;
+    }
     # only include the source if it has any binaries to be checked.
     # - Otherwise we may end up checking a source with no binaries
     #   (happens if the architecture is "behind" in building)
@@ -369,7 +390,7 @@ sub _parse_srcs_pg {
 
 # Helper for local_mirror_manifests - it parses a paragraph from Packages file
 sub _parse_pkgs_pg {
-    my ($state, $extra_metadata, $type, $paragraph) = @_;
+    my ($state, $blacklist, $extra_metadata, $type, $paragraph) = @_;
     my ($group_id, $member_id, %data, %group_metadata, $b64_checksum);
     my $package = $paragraph->{'package'};
     my $version = $paragraph->{'version'};
@@ -380,6 +401,11 @@ sub _parse_pkgs_pg {
         $paragraph->{'source'} = $1;
         $paragraph->{'source-version'} = $2;
     }
+    if (exists $blacklist->{$paragraph->{'source'}}) {
+        log_debug("Ignoring binary package $package: it is part of "
+              . "blacklisted source package $paragraph->{'source'}");
+        return;
+    }
     if (not defined($paragraph->{'source-version'})) {
         $paragraph->{'source-version'} = $paragraph->{'version'};
     }
@@ -413,9 +439,10 @@ sub _parse_pkgs_pg {
 # $dists  - listref of dists to consider (e.g. ['unstable'])
 # $components  - listref of components to consider (e.g. ['main', 'contrib', 'non-free'])
 # $archs  - listref of archs to consider (e.g. ['i386', 'amd64'])
+# $blacklist  - hashref of source packages to ignore (e.g. {'gcc-8-cross-ports' => 1})
 #
 sub local_mirror_manifests {
-    my ($state, $mirdir, $dists, $components, $archs) = @_;
+    my ($state, $mirdir, $dists, $components, $archs, $blacklist) = @_;
     foreach my $dist (@$dists) {
         foreach my $component (@{$components}) {
             my $srcs = "$mirdir/dists/$dist/$component/source/Sources";
@@ -434,11 +461,13 @@ sub local_mirror_manifests {
                   = "${dist_path}/debian-installer/binary-$arch/Packages";
                 my $pkgfd = _open_data_file($pkgs);
                 my $binsub = sub {
-                    _parse_pkgs_pg($state, \%extra_metadata, 'binary', @_);
+                    _parse_pkgs_pg($state, $blacklist, \%extra_metadata,
+                        'binary', @_);
                 };
                 my $upkgfd;
                 my $udebsub = sub {
-                    _parse_pkgs_pg($state, \%extra_metadata, 'udeb', @_);
+                    _parse_pkgs_pg($state, $blacklist, \%extra_metadata,
+                        'udeb', @_);
                 };
                 visit_dpkg_paragraph($binsub, $pkgfd);
                 close($pkgfd);
@@ -447,7 +476,8 @@ sub local_mirror_manifests {
                 close($upkgfd);
             }
             $srcfd = _open_data_file($srcs);
-            $srcsub = sub { _parse_srcs_pg($state, \%extra_metadata, @_) };
+            $srcsub
+              = sub { _parse_srcs_pg($state, $blacklist, \%extra_metadata, @_) };
             visit_dpkg_paragraph($srcsub, $srcfd);
             close($srcfd);
         }
diff --git a/debian/changelog b/debian/changelog
index 33a7eca..ca970eb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,11 @@ lintian (2.5.82) UNRELEASED; urgency=medium
       allow (for example) "Python 2 variant" as well as "Python2
       variant".  Thanks!  (Closes: #895128)
 
+  * commands/reporting-sync-state.pm:
+    + [CL] Add support for blacklisting source packages in order to prevent
+      some currently-problematic packages such as gcc-8-cross-ports
+      preventing the update of https://lintian.debian.org/.  (See #890873)
+
  -- Chris Lamb <lamby@debian.org>  Sat, 07 Apr 2018 10:14:46 +0100
 
 lintian (2.5.81) unstable; urgency=medium
diff --git a/reporting/config.yaml b/reporting/config.yaml
index 8d878ee..87450e7 100644
--- a/reporting/config.yaml
+++ b/reporting/config.yaml
@@ -66,3 +66,7 @@ lintian:
 ## via "$config_vars{VAR}"
 template-variables:
   LINTIAN_SOURCE: https://anonscm.debian.org/git/lintian/lintian.git
+
+## Source packages to not process
+blacklist:
+- gcc-8-cross-ports # #890873

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


Reply to: