2 # Debian.pl: Frontend to debian contents and packages files
4 # Version: v0.7b (20000527)
12 # format: "alias=real".
13 my $defaultdist = "woody";
15 "unstable" => "woody",
17 "incoming" => "incoming",
21 "debian/Contents-##DIST-i386.gz" =>
22 "ftp://ftp.us.debian.org".
23 "/debian/dists/##DIST/Contents-i386.gz", #woody = BROKEN
25 "debian/Contents-##DIST-i386-non-US.gz" =>
26 "ftp://non-us.debian.org".
27 "/debian-non-US/dists/##DIST/non-US/Contents-i386.gz",
31 "debian/Packages-##DIST-main-i386.gz" =>
32 "ftp://ftp.us.debian.org".
33 "/debian/dists/##DIST/main/binary-i386/Packages.gz",
34 "debian/Packages-##DIST-contrib-i386.gz" =>
35 "ftp://ftp.us.debian.org".
36 "/debian/dists/##DIST/contrib/binary-i386/Packages.gz",
37 "debian/Packages-##DIST-non-free-i386.gz" =>
38 "ftp://ftp.us.debian.org".
39 "/debian/dists/##DIST/non-free/binary-i386/Packages.gz",
41 "debian/Packages-##DIST-non-US-main-i386.gz" =>
42 "ftp://non-us.debian.org".
43 "/debian-non-US/dists/##DIST/non-US/main/binary-i386/Packages.gz",
44 "debian/Packages-##DIST-non-US-contrib-i386.gz" =>
45 "ftp://non-us.debian.org".
46 "/debian-non-US/dists/##DIST/non-US/contrib/binary-i386/Packages.gz",
47 "debian/Packages-##DIST-non-US-non-free-i386.gz" =>
48 "ftp://non-us.debian.org".
49 "/debian-non-US/dists/##DIST/non-US/non-free/binary-i386/Packages.gz",
53 ### COMMON FUNCTION....
54 #######################
57 # Usage: &DebianDownload(%hash);
59 my ($dist, %urls) = @_;
60 my $refresh = $main::param{'debianRefreshInterval'} * 60 * 60 * 24;
65 &main::status("Debian: creating debian dir.");
66 mkdir("debian/",0755);
72 foreach $file (keys %urls) {
73 my $url = $urls{$file};
74 $url =~ s/##DIST/$dist/g;
75 $file =~ s/##DIST/$dist/g;
79 my $last_refresh = (stat($file))[9];
80 $update++ if (time() - $last_refresh > $refresh);
85 next unless ($update);
87 if ($good + $bad == 0) {
88 &main::status("Debian: Downloading files for '$dist'.");
89 &main::msg($main::who, "Updating debian files... please wait.");
92 if (exists $main::debian{$url}) {
93 &main::DEBUG("2: ".(time - $main::debian{$url})." <= $refresh");
94 next if (time() - $main::debian{$url} <= $refresh);
95 &main::DEBUG("stale for url $url; updating!");
98 if ($url =~ /^ftp:\/\/(.*?)\/(\S+)\/(\S+)$/) {
99 my ($host,$path,$thisfile) = ($1,$2,$3);
101 # error internally to ftp.
102 # hope it doesn't do anything bad.
103 if ($file =~ /Contents-woody-i386-non-US/) {
104 &main::DEBUG("Skipping Contents-woody-i386-non-US.");
105 $file =~ s/woody/potato/;
106 $path =~ s/woody/potato/;
110 if (!&main::ftpGet($host,$path,$thisfile,$file)) {
111 &main::DEBUG("deb: down: ftpGet($host,$path,$thisfile,$file) == BAD.");
117 &main::DEBUG("deb: down: ftpGet: !file");
122 if ($file =~ /Contents-potato-i386-non-US/) {
123 &main::DEBUG("hack: using potato's non-US contents for woody.");
124 system("cp debian/Contents-potato-i386-non-US.gz debian/Contents-woody-i386-non-US.gz");
127 &main::DEBUG("deb: download: good.");
130 &main::ERROR("Debian: invalid format of url => ($url).");
137 &generateIndex($dist);
140 return -1 unless ($bad); # no download.
141 &main::DEBUG("DD: !good and bad($bad). :(");
146 ###########################
147 # DEBIAN CONTENTS SEARCH FUNCTIONS.
151 # Usage: &searchContents($query);
153 my ($dist, $query) = &getDistroFromStr($_[0]);
154 &main::status("Debian: Contents search for '$query' on $dist.");
157 $dccsend++ if ($query =~ s/^dcc\s+//i);
159 # $query = $query.'(\.so\.)?([.[[:digit:]]+\.]+)?$';
161 $query =~ s/\\([\^\$])/$1/g;
162 $query =~ s/^\s+|\s+$//g;
163 $query =~ s/\*/\\S*/g; # does it even work?
165 if (!&main::validExec($query)) {
166 &main::msg($main::who, "search string looks fuzzy.");
170 if ($dist eq "incoming") { # nothing yet.
171 &main::DEBUG("sC: dist = 'incoming'. no contents yet.");
174 my %urls = &fixDist($dist, %urlcontents);
175 # download contents file.
176 &main::DEBUG("deb: download 1.");
177 if (!&DebianDownload($dist, %urls)) {
178 &main::WARN("Debian: could not download files.");
183 my $start_time = &main::gettimeofday();
187 my $search = "$query.*\[ \t]";
189 foreach (keys %urlcontents) {
192 next unless ( -f $_);
196 if (!scalar @files) {
197 &main::ERROR("sC: no files?");
198 &main::msg($main::who, "failed.");
202 my $files = join(' ', @files);
204 open(IN,"zegrep -h '$search' $files |");
206 if (/^\.?\/?(.*?)[\t\s]+(\S+)\n$/) {
207 my ($file,$package) = ("/".$1,$2);
208 if ($query =~ /\//) {
209 next unless ($file =~ /\Q$query\E/);
211 my ($basename) = $file =~ /^.*\/(.*)$/;
212 next unless ($basename =~ /\Q$query\E/);
214 next if ($query !~ /\.\d\.gz/ and $file =~ /\/man\//);
216 $contents{$package}{$file} = 1;
224 ### send results with dcc.
226 if (exists $main::dcc{'SEND'}{$main::who}) {
227 &main::msg($main::who, "DCC already active!");
231 if (!scalar %contents) {
232 &main::msg($main::who,"search returned no results.");
240 my $file = "temp/$main::who.txt";
241 if (!open(OUT,">$file")) {
242 &main::ERROR("Debian: cannot write file for dcc send.");
246 foreach $pkg (keys %contents) {
247 foreach (keys %{$contents{$pkg}}) {
248 # TODO: correct padding.
249 print OUT "$_\t\t\t$pkg\n";
254 &main::shmWrite($main::shm, "DCC SEND $main::who $file");
259 &main::status("Debian: $found contents results found.");
262 foreach $pkg (keys %contents) {
263 my @tmplist = &main::fixFileList(keys %{$contents{$pkg}});
264 my @sublist = sort { length $a <=> length $b } @tmplist;
266 pop @sublist while (scalar @sublist > 3);
268 $pkg =~ s/\,/\037\,\037/g; # underline ','.
269 push(@list, "(". join(', ',@sublist) .") in $pkg");
271 # sort the total list from shortest to longest...
272 @list = sort { length $a <=> length $b } @list;
274 # show how long it took.
275 my $delta_time = &main::gettimeofday() - $start_time;
276 &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
278 my $prefix = "Debian Search of '$query' ";
279 if (scalar @list) { # @list.
280 &main::performStrictReply( &main::formListReply(0, $prefix, @list) );
282 &main::DEBUG("ok, !\@list, searching desc for '$query'.");
288 # Usage: &searchAuthor($query);
290 my ($dist, $query) = &getDistroFromStr($_[0]);
291 &main::DEBUG("searchAuthor: dist => '$dist', query => '$query'.");
292 $query =~ s/^\s+|\s+$//g;
295 my $start_time = &main::gettimeofday();
296 &main::status("Debian: starting author search.");
299 my ($bad,$good) = (0,0);
300 my %urls = %urlpackages;
302 foreach (keys %urlpackages) {
314 &main::DEBUG("good = $good, bad = $bad...");
316 if ($good == 0 and $bad != 0) {
317 my %urls = &fixDist($dist, %urlpackages);
318 &main::DEBUG("deb: download 2.");
319 if (!&DebianDownload($dist, %urls)) {
320 &main::ERROR("Debian(sA): could not download files.");
325 my (%maint, %pkg, $package);
326 open(IN,"zegrep -h '^Package|^Maintainer' $files |");
328 if (/^Package: (\S+)$/) {
330 } elsif (/^Maintainer: (.*) \<(\S+)\>$/) {
332 $pkg{$1}{$package} = 1;
334 &main::WARN("invalid line: '$_'.");
340 # TODO: can we use 'map' here?
341 foreach (grep /\Q$query\E/i, keys %maint) {
345 # TODO: should we only search email if '@' is used?
346 if (scalar keys %hash < 15) {
348 foreach $name (keys %maint) {
350 foreach $email (keys %{$maint{$name}}) {
351 next unless ($email =~ /\Q$query\E/i);
352 next if (exists $hash{$name});
358 my @list = keys %hash;
359 if (scalar @list != 1) {
360 my $prefix = "Debian Author Search of '$query' ";
361 &main::performStrictReply( &main::formListReply(0, $prefix, @list) );
365 &main::DEBUG("showing all packages by '$list[0]'...");
367 my @pkg = sort keys %{$pkg{$list[0]}};
369 # show how long it took.
370 my $delta_time = &main::gettimeofday() - $start_time;
371 &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
373 my $email = join(', ', keys %{$maint{$list[0]}});
374 my $prefix = "Debian Packages by $list[0] \002<\002$email\002>\002 ";
375 &main::performStrictReply( &main::formListReply(0, $prefix, @pkg) );
379 # Usage: &searchDesc($query);
381 my ($dist, $query) = &getDistroFromStr($_[0]);
382 &main::DEBUG("searchDesc: dist => '$dist', query => '$query'.");
383 $query =~ s/^\s+|\s+$//g;
386 my $start_time = &main::gettimeofday();
387 &main::status("Debian: starting desc search.");
390 my ($bad,$good) = (0,0);
391 my %urls = %urlpackages;
393 foreach (keys %urlpackages) {
405 &main::DEBUG("good = $good, bad = $bad...");
407 if ($good == 0 and $bad != 0) {
408 my %urls = &fixDist($dist, %urlpackages);
409 &main::DEBUG("deb: download 2c.");
410 if (!&DebianDownload($dist, %urls)) {
411 &main::ERROR("Debian(sD): could not download files.");
416 my (%desc, $package);
417 open(IN,"zegrep -h '^Package|^Description' $files |");
419 if (/^Package: (\S+)$/) {
421 } elsif (/^Description: (.*)$/) {
423 next unless ($desc =~ /\Q$query\E/i);
424 $desc{$package} = $desc;
426 &main::WARN("invalid line: '$_'.");
431 my @list = keys %desc;
433 my $prefix = "Debian Desc Search of '$query' ";
434 &main::performStrictReply( &main::formListReply(0, $prefix, ) );
435 } elsif (scalar @list == 1) { # list = 1.
436 &main::DEBUG("list == 1; showing package info of '$query'.");
437 &infoPackages("info", $query);
439 my $prefix = "Debian Desc Search of '$query' ";
440 &main::performStrictReply( &main::formListReply(0, $prefix, @list) );
443 # show how long it took.
444 my $delta_time = &main::gettimeofday() - $start_time;
445 &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
449 # Usage: &generateIncoming();
450 sub generateIncoming {
451 my $interval = $main::param{'debianRefreshInterval'};
452 my $pkgfile = "debian/Packages-incoming";
453 my $idxfile = $pkgfile.".idx";
455 $stale++ if (&main::isStale($pkgfile.".gz", $interval));
456 $stale++ if (&main::isStale($idxfile, $interval));
457 &main::DEBUG("gI: stale => '$stale'.");
458 return 0 unless ($stale);
461 my %ftp = &main::ftpList("llug.sep.bnl.gov", "/pub/debian/Incoming/");
463 if (!open(PKG,">$pkgfile")) {
464 &main::ERROR("cannot write to pkg $pkgfile.");
467 if (!open(IDX,">$idxfile")) {
468 &main::ERROR("cannot write to idx $idxfile.");
472 print IDX "*$pkgfile.gz\n";
474 foreach $file (sort keys %ftp) {
475 next unless ($file =~ /deb$/);
477 if ($file =~ /^(\S+)\_(\S+)\_(\S+)\.deb$/) {
479 print PKG "Package: $1\n";
480 print PKG "Version: $2\n";
481 print PKG "Architecture: ", (defined $4) ? $4 : "all", "\n";
483 print PKG "Filename: $file\n";
484 print PKG "Size: $ftp{$file}\n";
490 system("gzip -9fv $pkgfile"); # lame fix.
492 &main::status("Debian: generateIncoming() complete.");
496 ##############################
497 # DEBIAN PACKAGE INFO FUNCTIONS.
500 # Usage: &getPackageInfo($query,$file);
502 my ($package, $file) = @_;
505 &main::status("gPI: file $file does not exist?");
512 open(IN, "zcat $file 2>&1 |");
518 next if (/^ \S+/); # package long description.
521 if (/^Package: (.*)\n$/) {
523 if ($pkg =~ /^$package$/i) {
524 $found++; # we can use pkg{'package'} instead.
525 $pkg{'package'} = $pkg;
534 if (/^Version: (.*)$/) {
535 $pkg{'version'} = $1;
536 } elsif (/^Priority: (.*)$/) {
537 $pkg{'priority'} = $1;
538 } elsif (/^Section: (.*)$/) {
539 $pkg{'section'} = $1;
540 } elsif (/^Size: (.*)$/) {
542 } elsif (/^Installed-Size: (.*)$/i) {
543 $pkg{'installed'} = $1;
544 } elsif (/^Description: (.*)$/) {
546 } elsif (/^Filename: (.*)$/) {
548 } elsif (/^Pre-Depends: (.*)$/) {
549 $pkg{'depends'} = "pre-depends on $1";
550 } elsif (/^Depends: (.*)$/) {
551 if (exists $pkg{'depends'}) {
552 $pkg{'depends'} .= "; depends on $1";
554 $pkg{'depends'} = "depends on $1";
556 } elsif (/^Maintainer: (.*)$/) {
558 } elsif (/^Provides: (.*)$/) {
559 $pkg{'provides'} = $1;
560 } elsif (/^Suggests: (.*)$/) {
561 $pkg{'suggests'} = $1;
562 } elsif (/^Conflicts: (.*)$/) {
563 $pkg{'conflicts'} = $1;
566 ### &main::DEBUG("=> '$_'.");
576 next if (defined $pkg);
584 # Usage: &infoPackages($query,$package);
586 my ($query,$dist,$package) = ($_[0], &getDistroFromStr($_[1]));
587 my $interval = $main::param{'debianRefreshInterval'} || 7;
589 &main::status("Debian: Searching for package '$package' in '$dist'.");
591 # download packages file.
593 my %urls = &fixDist($dist, %urlpackages);
594 if ($dist ne "incoming") {
595 &main::DEBUG("deb: download 3.");
596 if (!&DebianDownload($dist, %urls)) { # no good download.
597 &main::WARN("Debian(iP): could not download ANY files.");
601 # check if the package is valid.
603 my @files = &validPackage($package, $dist);
604 if (!scalar @files) {
605 &main::status("Debian: no valid package found; checking incoming.");
606 @files = &validPackage($package, "incoming");
608 &main::status("Debian: cool, it exists in incoming.");
611 &main::msg($main::who, "Package '$package' does not exist.");
616 if (scalar @files > 1) {
617 &main::WARN("same package in more than one file; random.");
618 &main::DEBUG("THIS SHOULD BE FIXED SOMEHOW!!!");
619 $files[0] = &main::getRandom(@files);
622 if (! -f $files[0]) {
623 &main::WARN("files[0] ($files[0]) doesn't exist.");
624 &main::msg($main::who, "WARNING: $files[0] does not exist? FIXME");
628 ### TODO: if specific package is requested, note down that a version
629 ### exists in incoming.
632 my $file = $files[0];
635 ### TODO: use fe, dump to a hash. if only one version of the package
636 ### exists. do as normal otherwise list all versions.
638 &main::ERROR("D:iP: file '$file' DOES NOT EXIST!!! should never happen.");
641 my %pkg = &getPackageInfo($package, $file);
644 if ($query eq "info") {
645 if (scalar keys %pkg > 5) {
646 $pkg{'info'} = "\002(\002". $pkg{'desc'} ."\002)\002";
647 $pkg{'info'} .= ", section ".$pkg{'section'};
648 $pkg{'info'} .= ", is ".$pkg{'priority'};
649 $pkg{'info'} .= ". Version: \002$pkg{'version'}\002";
650 $pkg{'info'} .= ", Packaged size: \002". int($pkg{'size'}/1024) ."\002 kB";
651 $pkg{'info'} .= ", Installed size: \002$pkg{'installed'}\002 kB";
654 &main::status("iP: info requested and pkg is in incoming, too.");
655 my %incpkg = &getPackageInfo($query, "debian/Packages-incoming");
657 if (scalar keys %incpkg) {
658 $pkg{'info'} .= ". Is in incoming ($incpkg{'file'}).";
660 &main::ERROR("iP: pkg $query is in incoming but we couldn't get any info?");
664 &main::DEBUG("running debianCheck() due to problems (".scalar(keys %pkg).").");
666 &main::DEBUG("end of debianCheck()");
668 &main::msg($main::who,"Debian: Package appears to exist but I could not retrieve info about it...");
673 if ($dist eq "incoming") {
674 $pkg{'info'} .= "Version: \002$pkg{'version'}\002";
675 $pkg{'info'} .= ", Packaged size: \002". int($pkg{'size'}/1024) ."\002 kB";
676 $pkg{'info'} .= ", is in incoming!!!";
679 if (!exists $pkg{$query}) {
680 if ($query eq "suggests") {
681 $pkg{$query} = "has no suggestions";
682 } elsif ($query eq "conflicts") {
683 $pkg{$query} = "does not conflict with any other package";
684 } elsif ($query eq "depends") {
685 $pkg{$query} = "does not depend on anything";
686 } elsif ($query eq "maint") {
687 $pkg{$query} = "has no maintainer";
689 $pkg{$query} = "has nothing about $query";
693 &main::performStrictReply("$package: $pkg{$query}");
696 # Usage: &infoStats($dist);
699 $dist = &getDistro($dist);
700 return unless (defined $dist);
702 &main::DEBUG("infoS: dist => '$dist'.");
703 my $interval = $main::param{'debianRefreshInterval'} || 7;
705 # download packages file if needed.
706 my %urls = &fixDist($dist, %urlpackages);
707 &main::DEBUG("deb: download 4.");
708 if (!&DebianDownload($dist, %urls)) {
709 &main::WARN("Debian(iS): could not download ANY files.");
710 &main::msg($main::who, "Debian(iS): internal error.");
717 foreach $file (keys %urlpackages) {
718 $file =~ s/##DIST/$dist/g; # won't work for incoming.
719 &main::DEBUG("file => '$file'.");
720 if (exists $stats{$file}{'count'}) {
721 &main::DEBUG("hrm... duplicate open with $file???");
725 open(IN,"zcat $file 2>&1 |");
728 &main::DEBUG("iS: $file does not exist.");
735 next if (/^ \S+/); # package long description.
737 if (/^Package: (.*)\n$/) { # counter.
738 $stats{$file}{'count'}++;
740 } elsif (/^Maintainer: .* <(\S+)>$/) {
741 $stats{$file}{'maint'}{$1}++;
742 $total{'maint'}{$1}++;
743 } elsif (/^Size: (.*)$/) { # compressed size.
744 $stats{$file}{'csize'} += $1;
745 $total{'csize'} += $1;
746 } elsif (/^i.*size: (.*)$/i) { # installed size.
747 $stats{$file}{'isize'} += $1;
748 $total{'isize'} += $1;
751 ### &main::DEBUG("=> '$_'.");
756 &main::performStrictReply(
757 "Debian Distro Stats on $dist... ".
758 "\002$total{'count'}\002 packages, ".
759 "\002".scalar(keys %{$total{'maint'}})."\002 maintainers, ".
760 "\002". int($total{'isize'}/1024)."\002 MB installed size, ".
761 "\002". int($total{'csize'}/1024/1024)."\002 MB compressed size."
764 ### TODO: do individual stats? if so, we need _another_ arg.
765 # foreach $file (keys %stats) {
766 # foreach (keys %{$stats{$file}}) {
767 # &main::DEBUG(" '$file' '$_' '$stats{$file}{$_}'.");
777 # HELPER FUNCTIONS FOR INFOPACKAGES...
780 # Usage: &generateIndex();
783 &main::status("Debian: !!! generateIndex() called !!!");
784 if (!scalar @dists) {
785 &main::ERROR("gI: no dists to generate index.");
790 my $dist = &getDistro($_); # incase the alias is returned, possible?
791 my $idx = "debian/Packages-$dist.idx";
793 # TODO: check if any of the Packages file have been updated then
794 # regenerate it, even if it's not stale.
795 # TODO: also, regenerate the index if the packages file is newer
797 next unless (&main::isStale($idx, $main::param{'debianRefreshInterval'}));
799 &main::DEBUG("gIndex: calling generateIncoming()!");
804 &main::DEBUG("gIndeX: calling DebianDownload($dist, ...).");
805 &DebianDownload($dist, %urlpackages);
807 &main::status("Debian: generating index for '$_'.");
808 if (!open(OUT,">$idx")) {
809 &main::ERROR("cannot write to $idx.");
814 foreach $packages (keys %urlpackages) {
815 $packages =~ s/##DIST/$dist/;
817 if (! -e $packages) {
818 &main::ERROR("gIndex: '$packages' does not exist?");
822 print OUT "*$packages\n";
823 open(IN,"zcat $packages |");
826 if (/^Package: (.*)\n$/) {
838 # Usage: &validPackage($package, $dist);
840 my ($package,$dist) = @_;
844 &main::DEBUG("D: validPackage($package, $dist) called.");
847 while (!open(IN, "debian/Packages-$dist.idx")) {
849 &main::ERROR("Packages-$dist.idx does not exist (#1).");
853 &generateIndex($dist);
865 if (/^$package\n$/) {
872 &main::DEBUG("vP: scanned $count items in index.");
878 my ($dist, $query) = &getDistroFromStr($_[0]);
879 my $file = "debian/Packages-$dist.idx";
883 &main::status("Debian: Search package matching '$query' in '$dist'.");
885 &main::DEBUG("sP: $file == NULL; removing, redoing.");
889 while (!open(IN, $file)) {
890 &main::ERROR("$file does not exist (#2).");
891 if ($dist eq "incoming") {
892 &main::DEBUG("sP: dist == incoming; calling gI().");
897 &main::ERROR("could not generate index!!!");
901 &generateIndex(($dist));
908 &main::DEBUG("sP: hrm => '$1'.");
910 if (&main::isStale($file, $main::param{'debianRefreshInterval'})) {
911 &main::DEBUG("STALE $file! regen.");
912 &generateIndex(($dist));
913 ### @files = searchPackage("$query $dist");
914 &main::DEBUG("EVIL HACK HACK HACK.");
934 if (!defined $dist or $dist eq "") {
935 &main::DEBUG("gD: dist == NULL; dist = defaultdist.");
936 $dist = $defaultdist;
939 if (exists $dists{$dist}) {
940 return $dists{$dist};
942 if (!grep /^\Q$dist\E$/i, %dists) {
943 &main::msg($main::who, "invalid dist '$dist'.");
951 sub getDistroFromStr {
953 my $dists = join '|', %dists;
954 my $dist = $defaultdist;
956 if ($str =~ s/\s+($dists)$//i) {
957 $dist = &getDistro(lc $1);
960 $str =~ s/\\([\$\^])/$1/g;
966 my ($dist, %urls) = @_;
970 while (($key,$val) = each %urls) {
971 $key =~ s/##DIST/$dist/;
972 $val =~ s/##DIST/$dist/;
973 ### TODO: what should we do if the sar wasn't done.
980 ### H-H-H-HACK HACK HACK :)
982 my ($dist, $query) = &getDistroFromStr($str);
983 my @results = sort &searchPackage($str);
985 if (!scalar @results) {
986 &main::Forker("debian", sub { &searchContents($str); } );
987 } elsif (scalar @results == 1) {
988 &main::status("searchPackage returned one result; getting info of package instead!");
989 &main::Forker("debian", sub { &infoPackages("info", "$results[0] $dist"); } );
991 my $prefix = "Debian Package Listing of '$str' ";
992 &main::performStrictReply( &main::formListReply(0, $prefix, @results) );
1000 &main::status("debianCheck() called.");
1002 ### TODO: remove the following loop (check if dir exists before)
1004 last if (opendir(DEBIAN, $dir));
1006 &main::ERROR("dC: cannot opendir debian.");
1015 while (defined($file = readdir DEBIAN)) {
1016 next unless ($file =~ /(gz|bz2)$/);
1018 my $exit = system("gzip -t '$dir/$file'");
1019 next unless ($exit);
1020 &main::DEBUG("hmr... => ".(time() - (stat($file))[8])."'.");
1021 next unless (time() - (stat($file))[8] > 3600);
1023 &main::DEBUG("dC: exit => '$exit'.");
1024 &main::WARN("dC: '$dir/$file' corrupted? deleting!");
1025 unlink $dir."/".$file;