Package: qa.debian.org Tags: patch Starting with devscripts 2.15.9, the functionality from QA's copy of dd-list has been integrated. The only missing piece is automatically using the specific sources files of interest for the QA infrastructure.
Converting /srv/qa.debian.org/bin/dd-list to a wrapper around the actual dd-list, as the attached patch does, enables adding the relevant sources files to the dd-list command and doesn't break the various calls to dd-list. I've already sent a request to debian-admin to get an updated version of devscripts installed, so once that's complete this patch can be applied. Cheers, -- James GPG Key: 4096R/331BA3DB 2011-12-05 James McCoy <james...@debian.org>
From 484c5120220383ef50870e90b8a0931b61f36847 Mon Sep 17 00:00:00 2001 From: James McCoy <james...@debian.org> Date: Sat, 14 Nov 2015 20:52:50 -0500 Subject: [PATCH] Replace outdated copy of dd-list with wrapper around dd-list Starting with devscripts 2.15.9, the functionality from QA's copy of dd-list has been integrated. The only missing piece is automatically using the specific sources files of interest for the QA infrastructure. Converting /srv/qa.debian.org/bin/dd-list to a wrapper around the actual dd-list enables adding the relevant sources files to the dd-list command and doesn't break the various calls to dd-list. --- bin/dd-list | 286 ++---------------------------------------------------------- 1 file changed, 5 insertions(+), 281 deletions(-) diff --git a/bin/dd-list b/bin/dd-list index c5fc7e6..67e17a5 100755 --- a/bin/dd-list +++ b/bin/dd-list @@ -1,283 +1,7 @@ -#!/usr/bin/perl -w -# -# dd-list: Generate a list of maintainers of packages. -# -# Written by Joey Hess <jo...@debian.org> -# Based on a python implementation by Lars Wirzenius. -# Copyright 2005 Lars Wirzenius, Joey Hess -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +#!/bin/sh -# changes between dd-list 2.10.69+squeeze4 and this dd-list : -# -# Copyright (C) 2012 Bart Martens <ba...@knars.be> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +for sources in /srv/mirrors/debian/dists/unstable/*/source/Sources.gz /srv/mirrors/debian/dists/experimental/*/source/Sources.gz; do + set -- "$@" -s "$sources" +done -use strict; -use Getopt::Long; - -my $version='2.10.69+squeeze4+bartm'; - -my %arch; - -sub read_arch -{ - my $count = 0; - - foreach my $dist ( "unstable", "experimental" ) - { - my $package = undef; - my $maintainer = undef; - my $uploaders = undef; - - open INPUT, "zcat /srv/mirrors/debian/dists/$dist/*/source/Sources.gz |" or die "failed to read $dist Sources files"; - while(<INPUT>) - { - chomp; - - $package = $1 if( /^Package: (.*)/ ); - $maintainer = $1 if( /^Maintainer: (.*)/ ); - $uploaders = $1 if( /^Uploaders: (.*)/ ); - - if( /^$/ ) - { - die "$package" if( not defined $package ); - - $count++ if( not defined $arch{$package}{$dist}{"Maintainer"} ); - - delete $arch{$dist}{$package}{"Maintainer"}; - delete $arch{$dist}{$package}{"Uploaders"}; - - $arch{$dist}{$package}{"Maintainer"} = $maintainer if( defined $maintainer ); - $arch{$dist}{$package}{"Uploaders"} = $uploaders if( defined $uploaders ); - - $package = undef; - $maintainer = undef; - $uploaders = undef; - } - } - } - - die "low number of packages in Sources files: $count" if( $count < 20000 ); # 20768 on 2012-12-02 -} - -sub undef2empty -{ - my $value = shift; - return "" if( not defined $value ); - return $value; -} - -sub get_developers_given_package { - my ($package_name,$print_binary,$dist) = @_; - - my $developer; - my $uploaders; - my @uploaders = (); - my $found = 0; - - if( defined $arch{$dist}{$package_name} ) - { - if( $found - and ( undef2empty( $developer ) ne undef2empty( $arch{$dist}{$package_name}{"Maintainer"} ) - or undef2empty( $uploaders ) ne undef2empty( $arch{$dist}{$package_name}{"Uploaders"} ) ) ) - { - print STDERR "warning: package $package_name has different maintainers and/or uploaders\n"; - } - - $found = 1; - - $developer = undef; - $uploaders = undef; - @uploaders = (); - - $developer = $arch{$dist}{$package_name}{"Maintainer"} if( defined $arch{$dist}{$package_name}{"Maintainer"} ); - $uploaders = $arch{$dist}{$package_name}{"Uploaders"} if( defined $arch{$dist}{$package_name}{"Uploaders"} ); - - if( defined $uploaders ) - { - # copied from /home/bartm/src/wnpp-rfs-mentors/wnpp-rfs-mentors.pl - $uploaders =~ s/Adam C\. Powell, IV/Adam C. Powell IV/; - $uploaders =~ s/Thomas Bushnell, BSG/Thomas Bushnell BSG/; - $uploaders =~ s/TransNexus, Inc/TransNexus Inc/; - $uploaders =~ s/, *,/,/; # pandoc - $uploaders =~ s/John H\. Robinson, IV/John H. Robinson IV/; - } - - @uploaders = split /\s*,\s*/, $uploaders if( defined $uploaders ); - } - - return ($developer, \@uploaders, $package_name); -} - -sub parse_developer { - my $developer=shift; - - $developer =~ s/\s\([^\s\(\)]*\)(\s)/$1/; - - my ($name, $domain) = $developer=~/^(.*)\s+<.*@(.*)>\s*$/i; - if (defined $domain && $domain !~ /^(lists(\.alioth)?\.debian\.org|teams\.debian\.net)$/) { - return join " ", reverse split " ", $name; - } - elsif (defined $name) { - return $name; - } - else { - return $developer; - } -} - -sub sort_developers { - sort { uc(parse_developer($a)) cmp uc(parse_developer($b)) } @_; -} - -sub help { - print <<"EOF" -Usage: dd-list [options] [package ...] - - -h, --help - Print this help text. - - -i, --stdin - Read package names from the standard input. - - -d, --dctrl - Read package list in Debian control data from standard input. - - -u, --uploaders - Also list Uploaders of packages, not only the listed Maintainers - (this is the default behaviour, use --nouploaders to prevent this). - - -nou, --nouploaders - Only list package Maintainers, do not list Uploaders. - - -b, --print-binary - If binary package names are given as input, print these names - in the output instead of corresponding source packages. - - -V, --version - Print version (it\'s $version by the way). -EOF -} - -my $use_stdin=0; -my $use_dctrl=0; -my $show_uploaders=1; -my $print_binary=0; -if (! GetOptions( - "help" => sub { help(); exit }, - "stdin|i" => \$use_stdin, - "dctrl|d" => \$use_dctrl, - "uploaders|u!" => \$show_uploaders, - "print-binary|b" => \$print_binary, - "version" => sub { print "dd-list version $version\n" })) { - exit(1); -} - -my %dict; -my $errors=0; - -if ($use_dctrl) { - local $/="\n\n"; - while (<>) { - my ($package, $maintainer, $uploaders, @uploaders); - - if (/^Package:\s+(.*)$/m) { - $package=$1; - } - if (/^Source:\s+(.*)$/m && ! $print_binary ) { - $package=$1; - } - if (/^Maintainer:\s+(.*)$/m) { - $maintainer=$1; - } - if (/^Uploaders:\s+(.*)$/m) { - $uploaders=$1; - @uploaders = split /\s*,\s*/, $uploaders; - } - - if (defined $maintainer && defined $package) { - push @{$dict{$maintainer}}, $package; - if ($show_uploaders && defined $uploaders) { - foreach my $uploader (@uploaders) { - push @{$dict{$uploader}}, "$package (U)"; - } - } - } - else { - print STDERR "E: parse error in stanza $.\n"; - $errors=1; - } - } -} -else { - my @package_names; - if ($use_stdin) { - while (<>) { - chomp; - s/^\s+//; - s/\s+$//; - push @package_names, split ' ', $_; - } - } - else { - @package_names=@ARGV; - } - - read_arch; - - foreach my $package_name (@package_names) { - foreach my $dist ( "unstable", "experimental" ) - { - my ($developer, $uploaders, $print_name)=get_developers_given_package($package_name,$print_binary,$dist); - if (defined $developer) { - push @{$dict{$developer}}, $print_name; - if ($show_uploaders && @$uploaders) { - foreach my $uploader (@$uploaders) { - push @{$dict{$uploader}}, "$print_name (U)"; - } - } - } - else { - #print STDERR "E: Unknown package: $package_name\n"; - #$errors=1; - } - } - } -} - -foreach my $developer (sort_developers(keys %dict)) { - print "$developer\n"; - my %seen; - foreach my $package (sort @{$dict{$developer}}) { - next if $seen{$package}; - $seen{$package}=1; - print " $package\n"; - } - print "\n"; -} - -exit($errors); +exec /usr/bin/dd-list "$@" -- 2.6.2
signature.asc
Description: PGP signature