From b7334f4ebf9d49b25aa810843bca2303bd424d76 Mon Sep 17 00:00:00 2001 From: doogie <> Date: Sat, 3 May 2003 19:01:20 -0800 Subject: [PATCH] [project @ 2003-05-03 20:01:20 by doogie] All code that reads and writes .status files now goes thru global functions. --- scripts/db2html.in | 73 ++++++++----------- scripts/errorlib.in | 107 +++++++++++++++++++++------ scripts/expire.in | 22 +++--- scripts/process.in | 173 +++++++++++++++++++++---------------------- scripts/rebuild.in | 20 ++--- scripts/service.in | 174 ++++++++++++++++++-------------------------- scripts/summary.in | 28 +++---- 7 files changed, 300 insertions(+), 297 deletions(-) diff --git a/scripts/db2html.in b/scripts/db2html.in index 2c8813a0..4fccc7be 100755 --- a/scripts/db2html.in +++ b/scripts/db2html.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: db2html.in,v 1.13 2002/12/11 02:15:15 cjwatson Exp $ +# $Id: db2html.in,v 1.14 2003/05/03 20:01:20 doogie Exp $ # usage: db2html [-diff] [-stampfile=] [-lastrun=] #load the necessary libraries/configuration @@ -122,7 +122,7 @@ for $f (@files) "sent to request@$gEmailDomain (all of which". "produce replies).\n"; $indexlink= "Messages not matched to a specific $gBug report - $week"; - $s_subject= ''; + $data->{subject}= ''; $indexentry= ''; undef $tpack; undef $tmaint; @@ -131,43 +131,32 @@ for $f (@files) $indexpart= 'unmatched'; } else { - my $hash = get_hashname($ref); - open(S,"db-h/$hash/$ref.status") || &quit("open db-h/$hash/$ref.status: $!"); - chomp($s_originator= ); - chomp($s_date= ); - chomp($s_subject= ); - chomp($s_msgid= ); - chomp($s_package= ); - chomp($s_keywords= ); - chomp($s_done= ); - chomp($s_forwarded= ); - chomp($s_mergedwith= ); - chomp($s_severity= ); - $_= $s_package; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9()]/; + $data=readbug($ref); + $_= $data->{package}; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9()]/; $tpack= $_; - if ($s_severity eq '' || $s_severity eq 'normal') + if ($data->{severity} eq '' || $data->{severity} eq 'normal') { $showseverity= ''; $addseverity= $gDefaultSeverity; - } elsif (grep($s_severity eq $_, @strongseverities)) - { $showseverity= "Severity: $s_severity;\n"; - $addseverity= $s_severity; + } elsif (grep($data->{severity} eq $_, @strongseverities)) + { $showseverity= "Severity: $data->{severity};\n"; + $addseverity= $data->{severity}; } else - { $showseverity= "Severity: $s_severity;\n"; - $addseverity= $s_severity; + { $showseverity= "Severity: $data->{severity};\n"; + $addseverity= $data->{severity}; } - $days= int(($startdate - $s_date)/86400); close(S); - $indexlink= "#$ref: ".&sani($s_subject); + $days= int(($startdate - $data->{date})/86400); close(S); + $indexlink= "#$ref: ".&sani($data->{subject}); $indexentry= ''; $packfile= length($tpack) ? "pa/l$tpack.html" : "pa/none.html"; $indexentry .= "Package: ". - &sani($s_package).";\n" - if length($s_package); + &sani($data->{package}).";\n" + if length($data->{package}); $indexentry .= $showseverity; - $indexentry .= "Reported by: ".&sani($s_originator); - $indexentry .= ";\nKeywords: ".&sani($s_keywords) - if length($s_keywords); + $indexentry .= "Reported by: ".&sani($data->{originator}); + $indexentry .= ";\nKeywords: ".&sani($data->{keywords}) + if length($data->{keywords}); $linkto= $ref; $linkto =~ s,^..,$&/$&,; - @merged= split(/ /,$s_mergedwith); + @merged= split(/ /,$data->{mergedwith}); if (@merged) { $mseparator= ";\nmerged with "; for $m (@merged) @@ -177,11 +166,11 @@ for $f (@files) } } $daysold=$submitted=''; - if (length($s_done)) - { $indexentry .= ";\nDone: ".&sani($s_done); + if (length($data->{done})) + { $indexentry .= ";\nDone: ".&sani($data->{done}); $indexpart= "done$addseverity"; - } elsif (length($s_forwarded)) - { $indexentry .= ";\nForwarded to ".&sani($s_forwarded); + } elsif (length($data->{forwarded})) + { $indexentry .= ";\nForwarded to ".&sani($data->{forwarded}); $indexpart= "forwarded$addseverity"; } else { $cmonths= int($days/30); @@ -198,12 +187,12 @@ for $f (@files) ($pad>0 ? ' 'x$pad : ''). sprintf("%d",$linkto,$ref). &sani(sprintf(" %-1.1s %-10.10s %-35.35s %-.25s\n", - $s_severity, - $s_package, - (length($s_keywords) ? $s_keywords.'/' : ''). - $s_subject, $s_originator)); + $data->{severity}, + $data->{package}, + (length($data->{keywords}) ? $data->{keywords}.'/' : ''). + $data->{subject}, $data->{originator})); $shortindex.= $thissient; - $sient{"$ref $s_package"}= $thissient; + $sient{"$ref $data->{package}"}= $thissient; if ($days >= 7) { $font= $days <= 30 ? '' : $days <= 60 ? 'em' : @@ -215,7 +204,7 @@ for $f (@files) if ($preserveonly) { $submitted= 'THIS IS A BUG IN THE BUG PROCESSOR'; } else { $submitted= `TZ=GMT LANG=C \\ - date -d '1 Jan 1970 00:00:00 + $s_date seconds' \\ + date -d '1 Jan 1970 00:00:00 + $data->{date} seconds' \\ '+ %a, %d %b %Y %T %Z'`; $? and die $?; } @@ -245,12 +234,12 @@ for $f (@files) eval("\$iiindex$indexpart = \$indexadd.\$iiindex$indexpart; 1;") || &quit("eval add to \$iiindex$indexpart failed: $@"); if (defined($tmaint)) - { $countpermaint{$tmaint} += length($s_done) ? 0 : length($s_forwarded) ? 0 : 1; + { $countpermaint{$tmaint} += length($data->{done}) ? 0 : length($data->{forwarded}) ? 0 : 1; eval("\$permaint${indexpart}{\$tmaint} .= \$indexadd; 1;") || &quit("eval add to \$permaint${indexpart}{\$tmaint} failed: $@"); } if (defined($tpack)) - { $countperpack{$tpack} += length($s_done) ? 0 : length($s_forwarded) ? 0 : 1; + { $countperpack{$tpack} += length($data->{done}) ? 0 : length($data->{forwarded}) ? 0 : 1; eval("\$perpack${indexpart}{\$tpack} .= \$indexadd; 1;") || &quit("eval add to \$perpack${indexpart}{\$tpack} failed: $@"); } @@ -352,7 +341,7 @@ for $f (@files) "$short\n". "\n". "$gHTMLStart

$gProject $gBug report logs - $short
\n". - &sani($s_subject)."

". + &sani($data->{subject})."". "$descriptivehead\n". "\n
\n". $log. diff --git a/scripts/errorlib.in b/scripts/errorlib.in index d86d8389..34c76b81 100755 --- a/scripts/errorlib.in +++ b/scripts/errorlib.in @@ -1,5 +1,5 @@ # -*- perl -*- -# $Id: errorlib.in,v 1.18 2003/02/16 15:20:26 cjwatson Exp $ +# $Id: errorlib.in,v 1.19 2003/05/03 20:01:20 doogie Exp $ sub F_SETLK { 6; } sub F_WRLCK{ 1; } $flockstruct= 'sslll'; # And there ought to be something for this too. @@ -16,35 +16,94 @@ sub unlockreadbugmerge { } sub lockreadbugmerge { - local ($lref) = @_; - if (!&lockreadbug($lref)) { return 0; } - if (!length($s_mergedwith)) { return 1; } + local ($lref, $location) = @_; + local $data; + if (!($data = &lockreadbug($lref, $location))) { return ( 0, undef ); } + if (!length($data{mergedwith})) { return ( 1, $data ); } &unfilelock; &filelock('lock/merge'); - if (!&lockreadbug($lref)) { &unfilelock; return 0; } - return 2; + if (!&lockreadbug($lref, $location)) { &unfilelock; return ( 0, undef ); } + return ( 2, $data ); } -sub lockreadbug { - local ($lref) = @_; - &filelock("lock/$lref"); +sub readbug { + local ($lref, $location) = @_; my $hash = get_hashname($lref); - if (!open(S,"db-h/$hash/$lref.status")) { &unfilelock; return 0; } - chop($s_originator= ); - chop($s_date= ); - chop($s_subject= ); - chop($s_msgid= ); - chop($s_package= ); - chop($s_keywords= ); - chop($s_done= ); - chop($s_forwarded= ); - chop($s_mergedwith= ); - chop($s_severity= ); - chop($s_versions= ); - chop($s_fixed_versions= ); + if ($location eq 'archive') { + $path = 'archive'; + } else { + $path = 'db-h'; + } + if (!open(S,"$path/$hash/$lref.status")) { &unfilelock; return undef; } + my %data; + chop($data{originator}= ); + chop($data{date}= ); + chop($data{subject}= ); + chop($data{msgid}= ); + chop($data{package}= ); + chop($data{keywords}= ); + chop($data{done}= ); + chop($data{forwarded}= ); + chop($data{mergedwith}= ); + chop($data{severity}= ); + chop($data{versions}= ); + chop($data{fixed_versions}= ); close(S); - $s_severity = 'normal' if $s_severity eq ''; - return 1; + $data{severity} = 'normal' if $data{severity} eq ''; + return \%data; +} + +sub lockreadbug { + local ($lref, $location) = @_; + &filelock("lock/$lref"); + return readbug($lref, $location); +} + +sub writebug { + local ($ref, $data, $location) = @_; + my $hash = get_hashname($ref); + my $change; + if ($location eq 'archive') { + $path = 'archive'; + } else { + $path = 'db-h'; + } + open(S,">$path/$hash/$ref.status.new") || &quit("opening $path/$hash/$ref.status.new: $!"); + print(S + "$data->{originator}\n". + "$data->{date}\n". + "$data->{subject}\n". + "$data->{msgid}\n". + "$data->{package}\n". + "$data->{keywords}\n". + "$data->{done}\n". + "$data->{forwarded}\n". + "$data->{mergedwith}\n". + "$data->{severity}\n". + "$data->{versions}\n". + "$data->{fixed_versions}\n") || &quit("writing $path/$hash/$ref.status.new: $!"); + close(S) || &quit("closing $path/$hash/$ref.status.new: $!"); + if (-e "$path/$hash/$ref.status") { + $change = 'change'; + } else { + $change = 'new'; + } + rename("$path/$hash/$ref.status.new","$path/$hash/$ref.status") || + &quit("installing new $path/$hash/$ref.status: $!"); + &bughook($change,$ref, + "$data->{originator}\n". + "$data->{date}\n". + "$data->{subject}\n". + "$data->{msgid}\n". + "$data->{package}\n". + "$data->{keywords}\n". + "$data->{done}\n". + "$data->{forwarded}\n". + "$data->{mergedwith}\n". + "$data->{severity}\n". + "$data->{versions}\n". + "$data->{fixed_versions}\n"); + &unfilelock; } sub filelock { diff --git a/scripts/expire.in b/scripts/expire.in index 3bf368b5..796f5f60 100755 --- a/scripts/expire.in +++ b/scripts/expire.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: expire.in,v 1.14 2002/11/17 22:45:16 cjwatson Exp $ +# $Id: expire.in,v 1.15 2003/05/03 20:01:20 doogie Exp $ # Load modules and set envirnment use File::Copy; @@ -30,30 +30,32 @@ foreach my $dir (@dirs) { #process each bug (ie, status file) while (length($ref=shift(@list))) { print STDERR "$ref considering\n" if $debug; - $bfound= &lockreadbugmerge($ref); + ($bfound, $data)= &lockreadbugmerge($ref); print STDERR "$ref read $bfound\n" if $debug; $bfound || next; - print "$ref read ok (done $s_done)\n" if $debug; - (&unlockreadbugmerge($bfound), next) unless length($s_done); + print "$ref read ok (done $data->{done})\n" if $debug; + (&unlockreadbugmerge($bfound), next) unless length($data->{done}); print "$ref read done\n" if $debug; @aref= ($ref); - if (length($s_mergedwith)) { push(@aref,split / /,$s_mergedwith); } + if (length($data->{mergedwith})) { push(@aref,split / /,$data->{mergedwith}); } print "$ref aref @aref\n" if $debug; $oktoremove= 1; for $mref (@aref) { print "$ref $mref check\n" if $debug; if ($mref != $ref) { print "$ref $mref reading\n" if $debug; - &lockreadbug($mref) || die "huh ?"; + $newdata = &lockreadbug($mref) || die "huh $mref ?"; print "$ref $mref read ok\n" if $debug; $bfound++; + } else { + $newdata = $data; } print "$ref $mref read/not\n" if $debug; $expectmerge= join(' ',grep($_ != $mref, sort { $a <=> $b } @aref)); - $s_mergedwith eq $expectmerge || - die "$ref -> $mref: ($s_mergedwith) vs. ($expectmerge) (@aref)"; + $newdata->{mergedwith} eq $expectmerge || + die "$ref -> $mref: ($newdata->{mergedwith}) vs. ($expectmerge) (@aref)"; print "$ref $mref merge-ok\n" if $debug; - length($s_done) || die "$ref -> $mref"; + length($newdata->{done}) || die "$ref -> $mref"; print "$ref $mref done-ok\n" if $debug; $days= -M "db-h/".get_hashname($mref)."/$mref.log"; print "ref $mref days $days\n" if $debug; @@ -71,7 +73,7 @@ while (length($ref=shift(@list))) { link( "db-h/$dir/$mref.status", "archive/$dir/$mref.status" ) || copy( "db-h/$dir/$mref.status", "archive/$dir/$mref.status" ); link( "db-h/$dir/$mref.report", "archive/$dir/$mref.report" ) || copy( "db-h/$dir/$mref.report", "archive/$dir/$mref.report" ); if ( open( IDXFILE, ">>archive/index" ) ) { - printf IDXFILE "%s %d %s\n", $s_package, $mref, $s_subject; + printf IDXFILE "%s %d %s\n", $data->{package}, $mref, $data->{subject}; close IDXFILE; } else { print "Unable to write to index file\n"; } diff --git a/scripts/process.in b/scripts/process.in index 30a58244..2d320a01 100755 --- a/scripts/process.in +++ b/scripts/process.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: process.in,v 1.65 2003/04/24 02:24:55 cjwatson Exp $ +# $Id: process.in,v 1.66 2003/05/03 20:01:20 doogie Exp $ # # Usage: process nn # Temps: incoming/Pnn @@ -179,7 +179,7 @@ if ($tryref < 0 && m/^Bug ?\#(\d+)\D/i) { if ($tryref >= 0) { - $bfound= &lockreadbugmerge($tryref); + ($bfound, $data)= &lockreadbugmerge($tryref); if ($bfound) { $ref= $tryref; } else { @@ -190,7 +190,7 @@ To: $replyto Subject: Unknown problem report $gBug#$tryref ($subject) Message-ID: In-Reply-To: $header{'message-id'} -References: $header{'message-id'} $s_msgid +References: $header{'message-id'} $data->{msgid} Precedence: bulk X-$gProject-PR-Message: error @@ -237,7 +237,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') $markedby= $header{'from'} eq $replyto ? $replyto : "$header{'from'} (reply to $replyto)"; if ($codeletter eq 'F') { - (&appendlog,&finish) if length($s_forwarded); + (&appendlog,&finish) if length($data->{forwarded}); $receivedat= "forwarded\@$gEmailDomain"; $markaswhat= 'forwarded'; $set_forwarded= $header{'to'}; @@ -247,7 +247,7 @@ if ($codeletter eq 'D' || $codeletter eq 'F') $generalcc=''; } } else { - (&appendlog,&finish) if length($s_done); + (&appendlog,&finish) if length($data->{done}); $receivedat= "done\@$gEmailDomain"; $markaswhat= 'done'; $set_done= $header{'from'}; @@ -266,7 +266,7 @@ Subject: Message with no $gBug number ignored by $receivedat ($subject) Message-ID: In-Reply-To: $header{'message-id'} -References: $header{'message-id'} $s_msgid +References: $header{'message-id'} $data->{msgid} Precedence: bulk X-$gProject-PR-Message: error @@ -311,24 +311,20 @@ END if (length($noticeccval)) { $noticecc= "Cc: $noticeccval\n"; } if (length($generalcc)) { $noticecc.= "Bcc: $generalcc\n"; } - @process= ($ref,split(/ /,$s_mergedwith)); + @process= ($ref,split(/ /,$data->{mergedwith})); $orgref= $ref; for $ref (@process) { if ($ref != $orgref) { &unfilelock; - &lockreadbug($ref) || die "huh ? $ref from $orgref out of @process"; + $data = &lockreadbug($ref) + || die "huh ? $ref from $orgref out of @process"; } - $s_done= $set_done if defined($set_done); - $s_forwarded= $set_forwarded if defined($set_forwarded); - my $hash = get_hashname($ref); - &overwrite("db-h/$hash/$ref.status", - "$s_originator\n$s_date\n$s_subject\n$s_msgid\n". - "$s_package\n$s_keywords\n$s_done\n$s_forwarded\n$s_mergedwith\n$s_severity\n"); - &bughook('change',$ref, - "$s_originator\n$s_date\n$s_subject\n$s_msgid\n". - "$s_package\n$s_keywords\n$s_done\n$s_forwarded\n$s_mergedwith\n$s_severity\n"); + $data->{done}= $set_done if defined($set_done); + $data->{forwarded}= $set_forwarded if defined($set_forwarded); + writebug($ref, $data); + my $hash = get_hashname($ref); open(O,"db-h/$hash/$ref.report") || &quit("read original report: $!"); $x= join('',); close(O); if ($codeletter eq 'F') { @@ -336,21 +332,21 @@ END &sendmessage(<{subject}) Message-ID: In-Reply-To: $header{'message-id'} -References: $header{'message-id'} $s_msgid +References: $header{'message-id'} $data->{msgid} Precedence: bulk X-$gProject-PR-Message: forwarded $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Your message dated $header{'date'} with message-id $header{'message-id'} has caused the $gProject $gBug report #$ref, -regarding $s_subject +regarding $data->{subject} to be marked as having been forwarded to the upstream software -author(s) $s_forwarded. +author(s) $data->{forwarded}. (NB: If you are a system administrator and have no idea what I am talking about this indicates a serious mail system misconfiguration @@ -366,14 +362,14 @@ END &sendmessage(<{subject}) Message-ID: In-Reply-To: $header{'message-id'} -References: $header{'message-id'} $s_msgid +References: $header{'message-id'} $data->{msgid} Precedence: bulk X-$gProject-PR-Message: closed $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Your message dated $header{'date'} with message-id $header{'message-id'} @@ -392,24 +388,24 @@ $gMaintainer (administrator, $gProject $gBugs database) END - &htmllog("Notification","sent",$s_originator, + &htmllog("Notification","sent",$data->{originator}, "$gBug acknowledged by developer."); &sendmessage(<{originator} Subject: $gBug#$ref acknowledged by developer ($header{'subject'}) Message-ID: -In-Reply-To: $s_msgid -References: $header{'message-id'} $s_msgid +In-Reply-To: $data->{msgid} +References: $header{'message-id'} $data->{msgid} X-$gProject-PR-Message: they-closed $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Reply-To: $ref\@$gEmailDomain This is an automatic notification regarding your $gBug report -#$ref: $s_subject, -which was filed against the $s_package package. +#$ref: $data->{subject}, +which was filed against the $data->{package} package. It has been closed by one of the developers, namely $markedby. @@ -438,7 +434,7 @@ Subject: Message with no $gBug number cannot be sent to submitter ! ($subject) Message-ID: In-Reply-To: $header{'message-id'} -References: $header{'message-id'} $s_msgid +References: $header{'message-id'} $data->{msgid} Precedence: bulk X-$gProject-PR-Message: error @@ -483,7 +479,7 @@ Subject: Message with no Package: tag cannot be processed! ($subject) Message-ID: In-Reply-To: $header{'message-id'} -References: $header{'message-id'} $s_msgid +References: $header{'message-id'} $data->{msgid} Precedence: bulk X-$gProject-PR-Message: error @@ -510,54 +506,54 @@ END &appendlog; &finish; } else { - $s_package= $pheader{'package'}; + $data->{package}= $pheader{'package'}; } - $s_versions= ''; + $data->{versions}= ''; if (defined($pheader{'version'})) { - $s_versions = $pheader{'version'}; - $s_versions =~ s/\s+/ /; + $data->{versions} = $pheader{'version'}; + $data->{versions} =~ s/\s+/ /; # BUG: need to bounce unknown versions back to submitter here } - $s_fixed_versions= ''; + $data->{fixed_versions}= ''; if (defined($pheader{'fixed-in-version'})) { - $s_fixed_versions = $pheader{'fixed-in-version'}; - $s_fixed_versions =~ s/\s+/ /; + $data->{fixed_versions} = $pheader{'fixed-in-version'}; + $data->{fixed_versions} =~ s/\s+/ /; } - $s_keywords= ''; + $data->{keywords}= ''; if (defined($pheader{'keywords'})) { - $s_keywords= $pheader{'keywords'}; + $data->{keywords}= $pheader{'keywords'}; } elsif (defined($pheader{'tags'})) { - $s_keywords= $pheader{'tags'}; + $data->{keywords}= $pheader{'tags'}; } - if (length($s_keywords)) { + if (length($data->{keywords})) { my @kws; my %gkws = map { ($_, 1) } @gTags; - foreach my $kw (sort split(/[,\s]+/, lc($s_keywords))) { + foreach my $kw (sort split(/[,\s]+/, lc($data->{keywords}))) { push @kws, $kw if (defined $gkws{$kw}); } - $s_keywords = join(" ", @kws); + $data->{keywords} = join(" ", @kws); } - $s_severity= ''; + $data->{severity}= ''; if (defined($pheader{'severity'}) || defined($pheader{'priority'})) { - $s_severity= $pheader{'severity'}; - $s_severity= $pheader{'priority'} unless ($s_severity); - $s_severity =~ s/^\s*(.+)\s*$/$1/; + $data->{severity}= $pheader{'severity'}; + $data->{severity}= $pheader{'priority'} unless ($data->{severity}); + $data->{severity} =~ s/^\s*(.+)\s*$/$1/; - if (!grep($_ eq $s_severity, @severities, "$gDefaultSeverity")) { + if (!grep($_ eq $data->{severity}, @severities, "$gDefaultSeverity")) { $brokenness.= <{severity} was not recognised. The default severity $gDefaultSeverity is being used instead. The recognised values are: $gShowSeverities. END # if we use @gSeverityList array in the above line, perl -c gives: # In string, @gSeverityList now must be written as \@gSeverityList at # process line 452, near "$gDefaultSeverity is being used instead. - $s_severity= ''; + $data->{severity}= ''; } } &filelock("nextnumber.lock"); @@ -568,14 +564,11 @@ END &unfilelock; my $hash = get_hashname($ref); &overwrite("db-h/$hash/$ref.log",''); - &overwrite("db-h/$hash/$ref.status", - "$replyto\n$intdate\n$subject\n$header{'message-id'}\n". - "$s_package\n$s_keywords\n\n\n\n$s_severity\n$s_versions\n". - "$s_fixed_versions\n"); - &bughook('new',$ref, - "$replyto\n$intdate\n$subject\n$header{'message-id'}\n". - "$s_package\n$s_keywords\n\n\n\n$s_severity\n$s_versions\n". - "$s_fixed_versions\n"); + $data->{originator} = $replyto; + $data->{date} = $intdate; + $data->{subject} = $subject; + $data->{msgid} = $header{'message-id'}; + writebug($ref, $data); &overwrite("db-h/$hash/$ref.report", join("\n",@msg)."\n"); } @@ -631,24 +624,24 @@ if (length($resentccval)) { } if ($codeletter eq 'U') { - &htmllog("Message", "sent on", $s_originator, "$gBug#$ref."); - &sendmessage(<{originator}, "$gBug#$ref."); + &sendmessage(<{originator},@resentccs); Subject: $gBug#$ref: $newsubject Reply-To: $replyto, $ref-quiet\@$gEmailDomain -${orgsender}Resent-To: $s_originator +${orgsender}Resent-To: $data->{originator} ${resentcc}Resent-Date: $tdate Resent-Message-ID: Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: report $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} $fwd END } elsif ($codeletter eq 'B') { &htmllog($newref ? "Report" : "Information", "forwarded", join(', ',"$gSubmitList\@$gListDomain",@resentccs), "$gBug#$ref". - (length($s_package)? "; Package ".&sani($s_package)."" : ''). + (length($data->{package})? "; Package ".&sani($data->{package})."" : ''). "."); &sendmessage(< Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: report $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} $fwd END } elsif (@resentccs) { @@ -670,7 +663,7 @@ END &htmllog($newref ? "Report" : "Information", "forwarded", $resentccval, "$gBug#$ref". - (length($s_package)? "; Package ".&sani($s_package)."" : ''). + (length($data->{package})? "; Package ".&sani($data->{package})."" : ''). "."); &sendmessage(< Resent-Sender: $gMaintainerEmail X-$gProject-PR-Message: report $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} $fwd END } @@ -708,8 +701,8 @@ In-Reply-To: $header{'message-id'} References: $header{'message-id'} Precedence: bulk X-$gProject-PR-Message: ack-quiet $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Reply-To: $ref-quiet\@$gEmailDomain Thank you for the problem report you have sent regarding $gProject. @@ -738,8 +731,8 @@ In-Reply-To: $header{'message-id'} References: $header{'message-id'} Precedence: bulk X-$gProject-PR-Message: ack-maintonly $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Reply-To: $ref-maintonly\@$gEmailDomain Thank you for the problem report you have sent regarding $gProject. @@ -765,8 +758,8 @@ In-Reply-To: $header{'message-id'} References: $header{'message-id'} Precedence: bulk X-$gProject-PR-Message: ack $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Reply-To: $ref\@$gEmailDomain Thank you for the problem report you have sent regarding $gProject. @@ -800,8 +793,8 @@ In-Reply-To: $header{'message-id'} References: $header{'message-id'} Precedence: bulk X-$gProject-PR-Message: ack-info-quiet $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Reply-To: $ref-quiet\@$gEmailDomain Thank you for the additional information you have supplied regarding @@ -828,8 +821,8 @@ In-Reply-To: $header{'message-id'} References: $header{'message-id'} Precedence: bulk X-$gProject-PR-Message: ack-info-maintonly $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Reply-To: $ref-maintonly\@$gEmailDomain Thank you for the additional information you have supplied regarding @@ -853,8 +846,8 @@ In-Reply-To: $header{'message-id'} References: $header{'message-id'} Precedence: bulk X-$gProject-PR-Message: ack-info $ref -X-$gProject-PR-Package: $s_package -X-$gProject-PR-Keywords: $s_keywords +X-$gProject-PR-Package: $data->{package} +X-$gProject-PR-Keywords: $data->{keywords} Disabled-Doogie-Reply-To: $ref\@$gEmailDomain Thank you for the additional information you have supplied regarding @@ -1001,7 +994,7 @@ sub sendmessage { sub checkmaintainers { return if $maintainerschecked++; - return if !length($s_package); + return if !length($data->{package}); open(MAINT,"$gMaintainerFile") || die &quit("maintainers open: $!"); while () { m/^\n$/ && next; @@ -1029,7 +1022,7 @@ sub checkmaintainers { } close(SOURCES); $anymaintfound=0; $anymaintnotfound=0; - for $p (split(m/[ \t?,()]+/,$s_package)) { + for $p (split(m/[ \t?,()]+/,$data->{package})) { $p =~ y/A-Z/a-z/; if (defined $gSubscriptionDomain) { if (defined($pkgsrc{$p})) { diff --git a/scripts/rebuild.in b/scripts/rebuild.in index 4ea2e9c0..d422c3d3 100755 --- a/scripts/rebuild.in +++ b/scripts/rebuild.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# $Id: rebuild.in,v 1.5 2002/11/17 22:45:16 cjwatson Exp $ +# $Id: rebuild.in,v 1.6 2003/05/03 20:01:20 doogie Exp $ # Load modules and set envirnment use File::Copy; @@ -11,23 +11,13 @@ require("$lib_path/errorlib"); $ENV{'PATH'} = $lib_path.':'.$ENV{'PATH'}; chdir("$gSpoolDir") || die "chdir spool: $!\n"; +my $data; sub readreport { my $lref = shift; my $path = shift; - open(S,"$path/$lref.status") || die "unable to open $path/$lref: $!\n"; - chop($s_originator= ); - chop($s_date= ); - chop($s_subject= ); - chop($s_msgid= ); - chop($s_package= ); - chop($s_keywords= ); - chop($s_done= ); - chop($s_forwarded= ); - chop($s_mergedwith= ); - chop($s_severity= ); - close(S); + $data = readbug($lref); return 1; } @@ -53,7 +43,7 @@ if ( $archive eq 'db' ) { my $ref = shift @list; print STDERR "$ref considering\n" if $debug; readreport($ref, $path); - printf IDXFILE "%s %d %s\n", $s_package, $ref, $s_subject; + printf IDXFILE "%s %d %s\n", $data->{package}, $ref, $data->{subject}; } } else @@ -74,7 +64,7 @@ for ($subdir=0; $subdir<100; $subdir++ ) { my $ref = shift @list; print STDERR "$ref considering\n" if $debug; readreport($ref, $path); - printf IDXFILE "%s %d %s\n", $s_package, $ref, $s_subject; + printf IDXFILE "%s %d %s\n", $data->{package}, $ref, $data->{subject}; } } diff --git a/scripts/service.in b/scripts/service.in index 8c59c419..3ac382c5 100755 --- a/scripts/service.in +++ b/scripts/service.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: service.in,v 1.72 2003/03/27 23:29:19 cjwatson Exp $ +# $Id: service.in,v 1.73 2003/05/03 20:01:20 doogie Exp $ # ^ more or less ^ # # Usage: service .nn @@ -243,29 +243,29 @@ END $ref= $1; if (&setbug) { &transcript("'close' is deprecated; see http://$gWebDomain/Developer$gHTMLSuffix#closing.\n"); - if (length($s_done)) { + if (length($data->{done})) { &transcript("$gBug is already closed, cannot re-close.\n\n"); &nochangebug; } else { - $action= "$gBug closed, send any further explanations to $s_originator"; + $action= "$gBug closed, send any further explanations to $data->{originator}"; do { - &addmaintainers($s_package); + &addmaintainers($data->{package}); if ( length( $gDoneList ) > 0 && length( $gListDomain ) > 0 ) { &addccaddress("$gDoneList\@$gListDomain"); } - $s_done= $replyto; + $data->{done}= $replyto; $message= <{originator} Subject: $gBug#$ref acknowledged by developer ($header{'subject'}) -References: $header{'message-id'} $s_msgid -In-Reply-To: $s_msgid +References: $header{'message-id'} $data->{msgid} +In-Reply-To: $data->{msgid} Message-ID: Reply-To: $ref\@$gEmailDomain This is an automatic notification regarding your $gBug report -#$ref: $s_subject, -which was filed against the $s_package package. +#$ref: $data->{subject}, +which was filed against the $data->{package} package. It has been marked as closed by one of the developers, namely $replyto. @@ -277,7 +277,7 @@ $gMaintainer (administrator, $gProject $gBugs database) END - &sendmailmessage($message,$s_originator); + &sendmailmessage($message,$data->{originator}); } while (&getnextbug); } } @@ -286,16 +286,16 @@ END $ref= $1; $newpackage= $2; $newpackage =~ y/A-Z/a-z/; if (&setbug) { - if (length($s_package)) { - $action= "$gBug reassigned from package \`$s_package'". + if (length($data->{package})) { + $action= "$gBug reassigned from package \`$data->{package}'". " to \`$newpackage'."; } else { $action= "$gBug assigned to package \`$newpackage'."; } do { - &addmaintainers($s_package); + &addmaintainers($data->{package}); &addmaintainers($newpackage); - $s_package= $newpackage; + $data->{package}= $newpackage; } while (&getnextbug); } } elsif (m/^reopen\s+\#?(-?\d+)$/i ? ($noriginator='', 1) : @@ -305,7 +305,7 @@ END $ok++; $ref= $1; if (&setbug) { - if (!length($s_done)) { + if (!length($data->{done})) { &transcript("$gBug is already open, cannot reopen.\n\n"); &nochangebug; } else { @@ -313,9 +313,9 @@ END $noriginator eq '' ? "$gBug reopened, originator not changed." : "$gBug reopened, originator set to $noriginator."; do { - &addmaintainers($s_package); - $s_originator= $noriginator eq '' ? $s_originator : $noriginator; - $s_done= ''; + &addmaintainers($data->{package}); + $data->{originator}= $noriginator eq '' ? $data->{originator} : $noriginator; + $data->{done}= ''; } while (&getnextbug); } } @@ -328,13 +328,13 @@ END } if (&getbug) { &foundbug; - &addmaintainers($s_package); - $oldsubmitter= $s_originator; - $s_originator= $newsubmitter; + &addmaintainers($data->{package}); + $oldsubmitter= $data->{originator}; + $data->{originator}= $newsubmitter; $action= "Changed $gBug submitter from $oldsubmitter to $newsubmitter."; &savebug; &transcript("$action\n"); - if (length($s_done)) { + if (length($data->{done})) { &transcript("(By the way, that $gBug is currently marked as done.)\n"); } &transcript("\n"); @@ -343,13 +343,13 @@ From: $gMaintainerEmail ($gProject $gBug Tracking System) To: $oldsubmitter Subject: $gBug#$ref submitter address changed ($header{'subject'}) -References: $header{'message-id'} $s_msgid -In-Reply-To: $s_msgid +References: $header{'message-id'} $data->{msgid} +In-Reply-To: $data->{msgid} Message-ID: Reply-To: $ref\@$gEmailDomain The submitter address recorded for your $gBug report -#$ref: $s_subject +#$ref: $data->{subject} has been changed. The new submitter address for this report is @@ -371,34 +371,34 @@ END $ok++; $ref= $1; $whereto= $2; if (&setbug) { - if (length($s_forwarded)) { - $action= "Forwarded-to-address changed from $s_forwarded to $whereto."; + if (length($data->{forwarded})) { + $action= "Forwarded-to-address changed from $data->{forwarded} to $whereto."; } else { $action= "Noted your statement that $gBug has been forwarded to $whereto."; } - if (length($s_done)) { + if (length($data->{done})) { $extramessage= "(By the way, this $gBug is currently marked as done.)\n"; } do { - &addmaintainers($s_package); + &addmaintainers($data->{package}); if (length($gFowardList)>0 && length($gListDomain)>0 ) { &addccaddress("$gFowardList\@$gListDomain"); } - $s_forwarded= $whereto; + $data->{forwarded}= $whereto; } while (&getnextbug); } } elsif (m/^notforwarded\s+\#?(-?\d+)$/i) { $ok++; $ref= $1; if (&setbug) { - if (!length($s_forwarded)) { + if (!length($data->{forwarded})) { &transcript("$gBug is not marked as having been forwarded.\n\n"); &nochangebug; } else { - $action= "Removed annotation that $gBug had been forwarded to $s_forwarded."; + $action= "Removed annotation that $gBug had been forwarded to $data->{forwarded}."; do { - &addmaintainers($s_package); - $s_forwarded= ''; + &addmaintainers($data->{package}); + $data->{forwarded}= ''; } while (&getnextbug); } } @@ -414,12 +414,12 @@ END &transcript("Severity level \`$newseverity' is obsolete. " . "$gObsoleteSeverities{$newseverity}\n\n"); } elsif (&setbug) { - $printseverity= $s_severity; + $printseverity= $data->{severity}; $printseverity= "$gDefaultSeverity" if $printseverity eq ''; $action= "Severity set to \`$newseverity'."; do { - &addmaintainers($s_package); - $s_severity= $newseverity; + &addmaintainers($data->{package}); + $data->{severity}= $newseverity; } while (&getnextbug); } } elsif (m/^tags?\s+\#?(-?\d+)\s+(([=+-])\s*)?(\S.*)?$/i) { @@ -445,10 +445,10 @@ END "Recognized are: ".join(' ', @gTags).".\n\n"); } if (&setbug) { - if ($s_keywords eq '') { + if ($data->{keywords} eq '') { &transcript("There were no tags set.\n"); } else { - &transcript("Tags were: $s_keywords\n"); + &transcript("Tags were: $data->{keywords}\n"); } if ($addsub eq "set") { $action= "Tags set to: " . join(", ", @okaytags); @@ -458,20 +458,20 @@ END $action= "Tags removed: " . join(", ", @okaytags); } do { - &addmaintainers($s_package); - $s_keywords = '' if ($addsub eq "set"); + &addmaintainers($data->{package}); + $data->{keywords} = '' if ($addsub eq "set"); if ($addsub eq "sub") { foreach my $t (@badtags) { - $s_keywords = join ' ', grep $_ ne $t, - split ' ', $s_keywords; + $data->{keywords} = join ' ', grep $_ ne $t, + split ' ', $data->{keywords}; } } foreach my $t (@okaytags) { - $s_keywords = join ' ', grep $_ ne $t, - split ' ', $s_keywords; - $s_keywords = "$t $s_keywords" unless($addsub eq "sub"); + $data->{keywords} = join ' ', grep $_ ne $t, + split ' ', $data->{keywords}; + $data->{keywords} = "$t $data->{keywords}" unless($addsub eq "sub"); } - $s_keywords =~ s/\s*$//; + $data->{keywords} =~ s/\s*$//; } while (&getnextbug); } } elsif (m/^retitle\s+\#?(-?\d+)\s+(\S.*\S)\s*$/i) { @@ -482,12 +482,12 @@ END } if (&getbug) { &foundbug; - &addmaintainers($s_package); - $s_subject= $newtitle; + &addmaintainers($data->{package}); + $data->{subject}= $newtitle; $action= "Changed $gBug title."; &savebug; &transcript("$action\n"); - if (length($s_done)) { + if (length($data->{done})) { &transcript("(By the way, that $gBug is currently marked as done.)\n"); } &transcript("\n"); @@ -498,17 +498,17 @@ END $ok++; $ref= $1; if (&setbug) { - if (!length($s_mergedwith)) { + if (!length($data->{mergedwith})) { &transcript("$gBug is not marked as being merged with any others.\n\n"); &nochangebug; } else { $mergelowstate eq 'locked' || die "$mergelowstate ?"; $action= "Disconnected #$ref from all other report(s)."; - @newmergelist= split(/ /,$s_mergedwith); + @newmergelist= split(/ /,$data->{mergedwith}); $discref= $ref; do { - &addmaintainers($s_package); - $s_mergedwith= ($ref == $discref) ? '' + &addmaintainers($data->{package}); + $data->{mergedwith}= ($ref == $discref) ? '' : join(' ',grep($_ ne $ref,@newmergelist)); } while (&getnextbug); } @@ -525,21 +525,21 @@ END next if grep($_ eq $ref,@newmergelist); if (!&getbug) { ¬foundbug; @newmergelist=(); last } &foundbug; - &transcript("D| adding $ref ($s_mergedwith)\n") if $dl; + &transcript("D| adding $ref ($data->{mergedwith})\n") if $dl; $mismatch= ''; - &checkmatch('package','m_package',$s_package); - &checkmatch('forwarded addr','m_forwarded',$s_forwarded); - $s_severity = '$gDefaultSeverity' if $s_severity eq ''; - &checkmatch('severity','m_severity',$s_severity); - &checkmatch('done mark','m_done',length($s_done) ? 'done' : 'open'); - foreach my $t (split /\s+/, $s_keywords) { $tags{$t} = 1; } + &checkmatch('package','m_package',$data->{package}); + &checkmatch('forwarded addr','m_forwarded',$data->{forwarded}); + $data->{severity} = '$gDefaultSeverity' if $data->{severity} eq ''; + &checkmatch('severity','m_severity',$data->{severity}); + &checkmatch('done mark','m_done',length($data->{done}) ? 'done' : 'open'); + foreach my $t (split /\s+/, $data->{keywords}) { $tags{$t} = 1; } if (length($mismatch)) { &transcript("Mismatch - only $gBugs in same state can be merged:\n". $mismatch."\n"); &cancelbug; @newmergelist=(); last; } push(@newmergelist,$ref); - push(@tomerge,split(/ /,$s_mergedwith)); + push(@tomerge,split(/ /,$data->{mergedwith})); &cancelbug; } if (@newmergelist) { @@ -547,9 +547,9 @@ END $action= "Merged @newmergelist."; for $ref (@newmergelist) { &getbug || die "huh ? $gBug $ref disappeared during merge"; - &addmaintainers($s_package); - $s_mergedwith= join(' ',grep($_ ne $ref,@newmergelist)); - $s_keywords= join(' ', keys %tags); + &addmaintainers($data->{package}); + $data->{mergedwith}= join(' ',grep($_ ne $ref,@newmergelist)); + $data->{keywords}= join(' ', keys %tags); &savebug; } &transcript("$action\n\n"); @@ -564,7 +564,7 @@ END $ref = $origref; if (&setbug) { - if (length($s_mergedwith)) { + if (length($data->{mergedwith})) { &transcript("$gBug is marked as being merged with others.\n\n"); &nochangebug; } else { @@ -592,7 +592,7 @@ END copy("db-h/$ohash/$origref.log", "db-h/$hash/$ref.log"); copy("db-h/$ohash/$origref.status", "db-h/$hash/$ref.status"); copy("db-h/$ohash/$origref.report", "db-h/$hash/$ref.report"); - &bughook('new', $ref, "$s_originator\n$s_date\n$s_subject\n$s_msgid\n$s_package\n$s_keywords\n$s_done\n$s_forwarded\n$s_mergedwith\n$s_severity\n"); + &bughook('new', $ref, "$data->{originator}\n$data->{date}\n$data->{subject}\n$data->{msgid}\n$data->{package}\n$data->{keywords}\n$data->{done}\n$data->{forwarded}\n$data->{mergedwith}\n$data->{severity}\n"); $ref++; } @@ -773,7 +773,7 @@ sub setbug { &dlex("setbug => 0s"); return 0; } - @thisbugmergelist= split(/ /,$s_mergedwith); + @thisbugmergelist= split(/ /,$data->{mergedwith}); if (!@thisbugmergelist) { &foundbug; $manybugs= 0; @@ -835,7 +835,7 @@ sub getnextbug { # endmerge sub notfoundbug { &transcript("$gBug number $ref not found.\n\n"); } -sub foundbug { &transcript("$gBug#$ref: $s_subject\n"); } +sub foundbug { &transcript("$gBug#$ref: $data->{subject}\n"); } sub getmerge { &dlen("getmerge"); @@ -856,7 +856,7 @@ sub endmerge { sub getbug { &dlen("getbug $ref"); $lowstate eq 'idle' || die "$state ?"; - if (&lockreadbug($ref)) { + if (($data = &lockreadbug($ref))) { $sref= $ref; $lowstate= "open"; &dlex("getbug => 1"); @@ -891,37 +891,7 @@ sub savebug { "\3\n". "\7\n",@{escapelog(@log)},"\n\3\n") || &quit("writing db-h/$hash/$ref.log: $!"); close(L) || &quit("closing db-h/$hash/$ref.log: $!"); - open(S,">db-h/$hash/$ref.status.new") || &quit("opening db-h/$hash/$ref.status.new: $!"); - print(S - "$s_originator\n". - "$s_date\n". - "$s_subject\n". - "$s_msgid\n". - "$s_package\n". - "$s_keywords\n". - "$s_done\n". - "$s_forwarded\n". - "$s_mergedwith\n". - "$s_severity\n". - "$s_versions\n". - "$s_fixed_versions\n") || &quit("writing db-h/$hash/$ref.status.new: $!"); - close(S) || &quit("closing db-h/$hash/$ref.status.new: $!"); - rename("db-h/$hash/$ref.status.new","db-h/$hash/$ref.status") || - &quit("installing new db-h/$hash/$ref.status: $!"); - &bughook('change',$ref, - "$s_originator\n". - "$s_date\n". - "$s_subject\n". - "$s_msgid\n". - "$s_package\n". - "$s_keywords\n". - "$s_done\n". - "$s_forwarded\n". - "$s_mergedwith\n". - "$s_severity\n". - "$s_versions\n". - "$s_fixed_versions\n"); - &unfilelock; + writebug($ref, $data); $lowstate= "idle"; &dlex("savebug"); } diff --git a/scripts/summary.in b/scripts/summary.in index d3108a36..2e1155b4 100755 --- a/scripts/summary.in +++ b/scripts/summary.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: summary.in,v 1.7 2003/01/08 12:47:56 cjwatson Exp $ +# $Id: summary.in,v 1.8 2003/05/03 20:01:20 doogie Exp $ $config_path = '/etc/debbugs'; $lib_path = '/usr/lib/debbugs'; @@ -49,16 +49,16 @@ $head= $mode eq 'bymaint' $amonths=-1; while (length($f=shift(@list))) { - if (!lockreadbug($f)) { next; } - $_= $s_package; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9]/; - $s_maintainer= + if (!($data = lockreadbug($f))) { next; } + $_= $data->{package}; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9]/; + $data->{maintainer}= defined($maintainer{$_}) ? $maintainer{$_} : length($_) ? "(unknown -- \`$_')" : "(unknown)"; if ($mode eq 'undone' || $mode eq 'veryold') { &unfilelock; - next if length($s_done) || length($s_forwarded); - $cmonths= int(($startdate - $s_date)/2592000); # 3600*24*30 (30 days) + next if length($data->{done}) || length($data->{forwarded}); + $cmonths= int(($startdate - $data->{date})/2592000); # 3600*24*30 (30 days) next if $mode eq 'veryold' && $cmonths < 2; if ($cmonths != $amonths) { $msg= $cmonths == 0 ? "Submitted in the last month" : @@ -68,17 +68,17 @@ while (length($f=shift(@list))) { print "\n$msg:\n$head\n"; $amonths= $cmonths; } - printf("%6d %-10.10s %-30.30s %-.31s\n", $f, $s_package, - (length($s_keywords) ? $s_keywords.'/' : '').$s_subject, - $s_maintainer) || &quit("output undone: $!"); + printf("%6d %-10.10s %-30.30s %-.31s\n", $f, $data->{package}, + (length($data->{keywords}) ? $data->{keywords}.'/' : '').$data->{subject}, + $data->{maintainer}) || &quit("output undone: $!"); } elsif ($mode eq 'bymaint') { &unfilelock; - next if length($s_done) || length($s_forwarded); + next if length($data->{done}) || length($data->{forwarded}); $string{$f}= - sprintf(" %-10.10s %6d %-.59s\n", $s_package, $f, $s_subject); - $s_maintainer= "(unknown)" if $s_maintainer =~ m/^\(unknown \-\-/; - $maintainercnt{$s_maintainer}++; - $maintainerlist{$s_maintainer}.= " $f"; + sprintf(" %-10.10s %6d %-.59s\n", $data->{package}, $f, $data->{subject}); + $data->{maintainer}= "(unknown)" if $data->{maintainer} =~ m/^\(unknown \-\-/; + $maintainercnt{$data->{maintainer}}++; + $maintainerlist{$data->{maintainer}}.= " $f"; } else { &quit("badmode $mode"); } -- 2.39.5