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

checkdescriptions.pl



Here's the script I use to check the presence and format of packages'
extended descriptions.

Would anyone like to take over maintaining it, running it, and
reporting bad or missing descriptions as bugs ?

Ian.

#!/usr/bin/perl --

$/="";
while (<>) {
    next if m/^Status:/ && !m/^Status:.* installed$/mi;
    m/^Package:\s*(\S+)\s*$/mi || die "no package name >$_<";
    $lpname= $pname= $1; $lpname =~ y/A-Z/a-z/;
    m/^Maintainer:\s*(\S.*\S)\s*$/mi || die "no maintainer >$_<";
    $maint= $1;
    $bad='';
    if (m/^Description:.*\n(?![ \t])/mi) {
        $bad= 'No extended description'; $badn=6;
    } elsif (m/^Description:.*\n(\t| [ \t])/mi) {
        $bad= 'Start of extended description is indented'; $badn=4;
    } elsif (m/^Description:.*\n .*\t/mi) {
        $bad= 'Extended description contains tabs'; $badn=5;
    } elsif (m/^Description:.*(\n .*)*\n[ \t]+\n/mi) {
        $bad= 'Extended description contains whitespace-only lines - very bad'; $badn=2;
    } elsif (m/^Description:.*\n \.?\n/mi) {
        $bad= 'Extended description starts with empty line'; $badn=3;
    } elsif (m/^Description:.*(\n .*)*\n.*\S  +\S.*\S  +\S/mi) {
        $bad= 'Extended description appears to be right-justified'; $badn=5;
    } elsif (m/^Description:\s*(\S+)/mi && (($w1=$1) =~ y/A-Z/a-z/, $w1 eq $lpname)) {
        $bad= 'Summary description starts with package name'; $badn=5;
    } elsif (m/^Description:.*\n \S/mi) {
        $bad= 'Extended description provided and looks good'; $badn=0;
    } elsif (!m/^Description:/mi) {
        $bad= 'No description at all'; $badn=3;
    } else {
        die ">$_<";
        $bad= "Urgle $pname"; $badn=-1;
    }
    $v='';
    if (m/^Version:\s*(\S+)$/mi) {
        $v= " (".$1;
        if (m/^(?:Package-)?Revision:\s*(\S+)$/mi) { $v .= "-$1"; }
        $v.= ")";
    }
    $this= sprintf("%-40s %-35.35s",$pname.$v,$maint);
    $badness{$this}= $bad;
    $badindex{$badn,$bad}= $bad;
}

print "Summary of number of packages in each category:\n";
for $k (sort keys %badindex) {
    $count= 0;
    for $p (sort keys %badness) {
        next if $badness{$p} ne $badindex{$k};
        $count++;
    }
    printf "%6d %s\n",$count,$badindex{$k};
    $count{$k}= 
}

for $k (sort {
    $count{$a} != $count{$b} ? $count{$a} <=> $count{$b} : $a cmp $b
    } (keys %badindex)) {
    print "\n$badindex{$k}:\n";
    for $p (sort keys %badness) {
        next if $badness{$p} ne $badindex{$k};
        print " $p\n";
    }
}


Reply to: