use strict;
# format: "alias=real".
-my $defaultdist = "woody";
+my $announce = 0;
+my $defaultdist = "sid";
+my $refresh = &::getChanConfDefault("debianRefreshInterval",7)
+ * 60 * 60 * 24;
+my $debug = 1;
+
+### ... old
+#my %dists = (
+# "sid" => "unstable",
+# "woody" => "testing", # new since 20001219.
+# "potato" => "stable",
+# "incoming" => "incoming",
+#);
+
+### new... the right way.
my %dists = (
- "unstable" => "woody",
+ "unstable" => "sid",
+ "testing" => "woody", # new since 20001219.
"stable" => "potato",
"incoming" => "incoming",
- "slink" => "archive-2.1",
- "hamm" => "archive-2.0",
- "rex" => "archive-1.?",
- "bo" => "archive-1.?",
);
my %urlcontents = (
"debian/Contents-##DIST-i386.gz" =>
"ftp://ftp.us.debian.org".
- "/debian/dists/##DIST/Contents-i386.gz", #woody = BROKEN
-
+ "/debian/dists/##DIST/Contents-i386.gz",
"debian/Contents-##DIST-i386-non-US.gz" =>
"ftp://non-us.debian.org".
"/debian-non-US/dists/##DIST/non-US/Contents-i386.gz",
# Usage: &DebianDownload(%hash);
sub DebianDownload {
my ($dist, %urls) = @_;
- my $refresh = $main::param{'debianRefreshInterval'} * 60 * 60 * 24;
my $bad = 0;
my $good = 0;
if (! -d "debian/") {
- &main::status("Debian: creating debian dir.");
+ &::status("Debian: creating debian dir.");
mkdir("debian/",0755);
}
my $update = 0;
if ( -f $file) {
- my $last_refresh = (stat($file))[9];
+ my $last_refresh = (stat $file)[9];
$update++ if (time() - $last_refresh > $refresh);
} else {
$update++;
next unless ($update);
- if ($good + $bad == 0) {
- &main::status("Debian: Downloading files for '$dist'.");
- &main::msg($main::who, "Updating debian files... please wait.");
+ &::DEBUG("announce == $announce.") if ($debug);
+ if ($good + $bad == 0 and !$announce) {
+ &::status("Debian: Downloading files for '$dist'.");
+ &::msg($::who, "Updating debian files... please wait.");
+ $announce++;
}
- if (exists $main::debian{$url}) {
- &main::DEBUG("2: ".(time - $main::debian{$url})." <= $refresh");
- next if (time() - $main::debian{$url} <= $refresh);
- &main::DEBUG("stale for url $url; updating!");
+ if (exists $::debian{$url}) {
+ &::DEBUG("2: ".(time - $::debian{$url})." <= $refresh") if ($debug);
+ next if (time() - $::debian{$url} <= $refresh);
+ &::DEBUG("stale for url $url; updating!") if ($debug);
}
if ($url =~ /^ftp:\/\/(.*?)\/(\S+)\/(\S+)$/) {
my ($host,$path,$thisfile) = ($1,$2,$3);
- # error internally to ftp.
- # hope it doesn't do anything bad.
- if ($file =~ /Contents-woody-i386-non-US/) {
- &main::DEBUG("Skipping Contents-woody-i386-non-US.");
- $file =~ s/woody/potato/;
- $path =~ s/woody/potato/;
-### next;
- }
+### HACK 1
+# if ($file =~ /Contents-woody-i386-non-US/) {
+# &::DEBUG("Skipping Contents-woody-i386-non-US.");
+# $file =~ s/woody/potato/;
+# $path =~ s/woody/potato/;
+# next;
+# }
- if (!&main::ftpGet($host,$path,$thisfile,$file)) {
- &main::DEBUG("deb: down: ftpGet($host,$path,$thisfile,$file) == BAD.");
+ if (!&::ftpGet($host,$path,$thisfile,$file)) {
+ &::WARN("deb: down: $file == BAD.");
$bad++;
next;
}
if (! -f $file) {
- &main::DEBUG("deb: down: ftpGet: !file");
+ &::WARN("deb: down: ftpGet: !file");
$bad++;
next;
}
- if ($file =~ /Contents-potato-i386-non-US/) {
- &main::DEBUG("hack: using potato's non-US contents for woody.");
- system("cp debian/Contents-potato-i386-non-US.gz debian/Contents-woody-i386-non-US.gz");
- }
+### HACK2
+# if ($file =~ /Contents-potato-i386-non-US/) {
+# &::DEBUG("hack: using potato's non-US contents for woody.");
+# system("cp debian/Contents-potato-i386-non-US.gz debian/Contents-woody-i386-non-US.gz");
+# }
- &main::DEBUG("deb: download: good.");
+ &::DEBUG("deb: download: good.") if ($debug);
$good++;
} else {
- &main::ERROR("Debian: invalid format of url => ($url).");
+ &::ERROR("Debian: invalid format of url => ($url).");
$bad++;
next;
}
return 1;
} else {
return -1 unless ($bad); # no download.
- &main::DEBUG("DD: !good and bad($bad). :(");
+ &::DEBUG("DD: !good and bad($bad). :(");
return 0;
}
}
# Usage: &searchContents($query);
sub searchContents {
my ($dist, $query) = &getDistroFromStr($_[0]);
- &main::status("Debian: Contents search for '$query' on $dist.");
+ &::status("Debian: Contents search for '$query' on $dist.");
my $dccsend = 0;
$dccsend++ if ($query =~ s/^dcc\s+//i);
- ### larne's regex.
- # $query = $query.'(\.so\.)?([.[[:digit:]]+\.]+)?$';
- $query =~ s/\\([\^\$])/$1/g;
+ $query =~ s/\\([\^\$])/$1/g; # hrm?
$query =~ s/^\s+|\s+$//g;
- $query =~ s/\*/\\S*/g; # does it even work?
- if (!&main::validExec($query)) {
- &main::msg($main::who, "search string looks fuzzy.");
+ if (!&::validExec($query)) {
+ &::msg($::who, "search string looks fuzzy.");
return;
}
if ($dist eq "incoming") { # nothing yet.
- &main::DEBUG("sC: dist = 'incoming'. no contents yet.");
+ &::DEBUG("sC: dist = 'incoming'. no contents yet.");
return;
} else {
my %urls = &fixDist($dist, %urlcontents);
# download contents file.
- &main::DEBUG("deb: download 1.");
+ &::DEBUG("deb: download 1.");
if (!&DebianDownload($dist, %urls)) {
- &main::WARN("Debian: could not download files.");
+ &::WARN("Debian: could not download files.");
}
}
# start of search.
- my $start_time = &main::gettimeofday();
+ my $start_time = &::timeget();
- my $found = 0;
+ my $found = 0;
+ my $front = 0;
my %contents;
- my $search = "$query.*\[ \t]";
+ my $grepRE;
+ ### TODO: search properly if /usr/bin/blah is done.
+ if ($query =~ s/\$$//) {
+ &::DEBUG("search-regex found.");
+ $grepRE = "$query\[ \t]";
+ } elsif ($query =~ s/^\^//) {
+ &::DEBUG("front marker regex found.");
+ $front = 1;
+ $grepRE = $query;
+ } else {
+ $grepRE = "$query*\[ \t]";
+ }
+
+ # fix up grepRE for "*".
+ $grepRE =~ s/\*/.*/g;
+
my @files;
foreach (keys %urlcontents) {
s/##DIST/$dist/g;
}
if (!scalar @files) {
- &main::ERROR("sC: no files?");
- &main::msg($main::who, "failed.");
+ &::ERROR("sC: no files?");
+ &::msg($::who, "failed.");
return;
}
my $files = join(' ', @files);
- open(IN,"zegrep -h '$search' $files |");
+ my $regex = $query;
+ $regex =~ s/\./\\./g;
+ $regex =~ s/\*/\\S*/g;
+ $regex =~ s/\?/./g;
+
+ open(IN,"zegrep -h '$grepRE' $files |");
while (<IN>) {
if (/^\.?\/?(.*?)[\t\s]+(\S+)\n$/) {
my ($file,$package) = ("/".$1,$2);
- if ($query =~ /\//) {
- next unless ($file =~ /\Q$query\E/);
+ if ($query =~ /[\/\*\\]/) {
+ next unless (eval { $file =~ /$regex/ });
+ return unless &checkEval($@);
} else {
my ($basename) = $file =~ /^.*\/(.*)$/;
- next unless ($basename =~ /\Q$query\E/);
+ next unless (eval { $basename =~ /$regex/ });
+ return unless &checkEval($@);
}
next if ($query !~ /\.\d\.gz/ and $file =~ /\/man\//);
+ next if ($front and eval { $file !~ /^\/$query/ });
+ return unless &checkEval($@);
$contents{$package}{$file} = 1;
$found++;
}
+
+ last if ($found > 100);
}
close IN;
### send results with dcc.
if ($dccsend) {
- if (exists $main::dcc{'SEND'}{$main::who}) {
- &main::msg($main::who, "DCC already active!");
+ if (exists $::dcc{'SEND'}{$::who}) {
+ &::msg($::who, "DCC already active!");
return;
}
if (!scalar %contents) {
- &main::msg($main::who,"search returned no results.");
+ &::msg($::who,"search returned no results.");
return;
}
- if (! -d "Temp/") {
- mkdir("Temp",0755);
- }
-
- my $file = "temp/$main::who.txt";
+ my $file = "$::param{tempDir}/$::who.txt";
if (!open(OUT,">$file")) {
- &main::ERROR("Debian: cannot write file for dcc send.");
+ &::ERROR("Debian: cannot write file for dcc send.");
return;
}
foreach $pkg (keys %contents) {
- foreach (keys %{$contents{$pkg}}) {
+ foreach (keys %{ $contents{$pkg} }) {
# TODO: correct padding.
print OUT "$_\t\t\t$pkg\n";
}
}
close OUT;
- &main::shmWrite($main::shm, "DCC SEND $main::who $file");
+ &::shmWrite($::shm, "DCC SEND $::who $file");
return;
}
- &main::status("Debian: $found contents results found.");
+ &::status("Debian: $found contents results found.");
my @list;
foreach $pkg (keys %contents) {
- my @tmplist = &main::fixFileList(keys %{$contents{$pkg}});
+ my @tmplist = &::fixFileList(keys %{ $contents{$pkg} });
my @sublist = sort { length $a <=> length $b } @tmplist;
pop @sublist while (scalar @sublist > 3);
@list = sort { length $a <=> length $b } @list;
# show how long it took.
- my $delta_time = &main::gettimeofday() - $start_time;
- &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
+ my $delta_time = &::timedelta($start_time);
+ &::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
my $prefix = "Debian Search of '$query' ";
if (scalar @list) { # @list.
- &main::performStrictReply( &main::formListReply(0, $prefix, @list) );
+ &::pSReply( &::formListReply(0, $prefix, @list) );
+
} else { # !@list.
- &main::DEBUG("ok, !\@list, searching desc for '$query'.");
- &searchDesc($query);
+ &::DEBUG("ok, !\@list, searching desc for '$query'.");
+ my @list = &searchDesc($query);
+
+ if (!scalar @list) {
+ my $prefix = "Debian Package/File/Desc Search of '$query' ";
+ &::pSReply( &::formListReply(0, $prefix, ) );
+
+ } elsif (scalar @list == 1) { # list = 1.
+ &::DEBUG("list == 1; showing package info of '$list[0]'.");
+ &infoPackages("info", $list[0]);
+
+ } else { # list > 1.
+ my $prefix = "Debian Desc Search of '$query' ";
+ &::pSReply( &::formListReply(0, $prefix, @list) );
+ }
}
}
# Usage: &searchAuthor($query);
sub searchAuthor {
my ($dist, $query) = &getDistroFromStr($_[0]);
- &main::DEBUG("searchAuthor: dist => '$dist', query => '$query'.");
+ &::DEBUG("searchAuthor: dist => '$dist', query => '$query'.");
$query =~ s/^\s+|\s+$//g;
# start of search.
- my $start_time = &main::gettimeofday();
- &main::status("Debian: starting author search.");
+ my $start_time = &::timeget();
+ &::status("Debian: starting author search.");
my $files;
my ($bad,$good) = (0,0);
$files .= " ".$_;
}
- &main::DEBUG("good = $good, bad = $bad...");
+ &::DEBUG("good = $good, bad = $bad...");
if ($good == 0 and $bad != 0) {
my %urls = &fixDist($dist, %urlpackages);
- &main::DEBUG("deb: download 2.");
+ &::DEBUG("deb: download 2.");
+
if (!&DebianDownload($dist, %urls)) {
- &main::ERROR("Debian(sA): could not download files.");
+ &::ERROR("Debian(sA): could not download files.");
return;
}
}
while (<IN>) {
if (/^Package: (\S+)$/) {
$package = $1;
+
} elsif (/^Maintainer: (.*) \<(\S+)\>$/) {
my($name,$email) = ($1,$2);
if ($package eq "") {
- &main::DEBUG("sA: package == NULL.");
+ &::DEBUG("sA: package == NULL.");
next;
}
$maint{$name}{$email} = 1;
$pkg{$name}{$package} = 1;
$package = "";
+
} else {
- &main::WARN("invalid line: '$_'.");
+ &::WARN("invalid line: '$_'.");
}
}
close IN;
# TODO: should we only search email if '@' is used?
if (scalar keys %hash < 15) {
my $name;
+
foreach $name (keys %maint) {
my $email;
- foreach $email (keys %{$maint{$name}}) {
+
+ foreach $email (keys %{ $maint{$name} }) {
next unless ($email =~ /\Q$query\E/i);
next if (exists $hash{$name});
$hash{$name} = 1;
my @list = keys %hash;
if (scalar @list != 1) {
my $prefix = "Debian Author Search of '$query' ";
- &main::performStrictReply( &main::formListReply(0, $prefix, @list) );
+ &::pSReply( &::formListReply(0, $prefix, @list) );
return 1;
}
- &main::DEBUG("showing all packages by '$list[0]'...");
+ &::DEBUG("showing all packages by '$list[0]'...");
- my @pkg = sort keys %{$pkg{$list[0]}};
+ my @pkg = sort keys %{ $pkg{$list[0]} };
# show how long it took.
- my $delta_time = &main::gettimeofday() - $start_time;
- &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
+ my $delta_time = &::timedelta($start_time);
+ &::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
- my $email = join(', ', keys %{$maint{$list[0]}});
+ my $email = join(', ', keys %{ $maint{$list[0]} });
my $prefix = "Debian Packages by $list[0] \002<\002$email\002>\002 ";
- &main::performStrictReply( &main::formListReply(0, $prefix, @pkg) );
+ &::pSReply( &::formListReply(0, $prefix, @pkg) );
}
####
# Usage: &searchDesc($query);
sub searchDesc {
my ($dist, $query) = &getDistroFromStr($_[0]);
- &main::DEBUG("searchDesc: dist => '$dist', query => '$query'.");
+ &::DEBUG("searchDesc: dist => '$dist', query => '$query'.");
$query =~ s/^\s+|\s+$//g;
# start of search.
- my $start_time = &main::gettimeofday();
- &main::status("Debian: starting desc search.");
+ my $start_time = &::timeget();
+ &::status("Debian: starting desc search.");
my $files;
my ($bad,$good) = (0,0);
$files .= " ".$_;
}
- &main::DEBUG("good = $good, bad = $bad...");
+ &::DEBUG("good = $good, bad = $bad...");
if ($good == 0 and $bad != 0) {
my %urls = &fixDist($dist, %urlpackages);
- &main::DEBUG("deb: download 2c.");
+ &::DEBUG("deb: download 2c.");
+
if (!&DebianDownload($dist, %urls)) {
- &main::ERROR("Debian(sD): could not download files.");
+ &::ERROR("Debian(sD): could not download files.");
return;
}
}
+ my $regex = $query;
+ $regex =~ s/\./\\./g;
+ $regex =~ s/\*/\\S*/g;
+ $regex =~ s/\?/./g;
+
my (%desc, $package);
open(IN,"zegrep -h '^Package|^Description' $files |");
while (<IN>) {
$package = $1;
} elsif (/^Description: (.*)$/) {
my $desc = $1;
- next unless ($desc =~ /\Q$query\E/i);
+ next unless (eval { $desc =~ /$regex/i });
+ return unless &checkEval($@);
+
if ($package eq "") {
- &main::WARN("sD: package == NULL?");
+ &::WARN("sD: package == NULL?");
next;
}
$desc{$package} = $desc;
$package = "";
} else {
- &main::WARN("invalid line: '$_'.");
+ &::WARN("invalid line: '$_'.");
}
}
close IN;
- my @list = keys %desc;
- if (!scalar @list) {
- my $prefix = "Debian Desc Search of '$query' ";
- &main::performStrictReply( &main::formListReply(0, $prefix, ) );
- } elsif (scalar @list == 1) { # list = 1.
- &main::DEBUG("list == 1; showing package info of '$query'.");
- &infoPackages("info", $query);
- } else { # list > 1.
- my $prefix = "Debian Desc Search of '$query' ";
- &main::performStrictReply( &main::formListReply(0, $prefix, @list) );
- }
-
# show how long it took.
- my $delta_time = &main::gettimeofday() - $start_time;
- &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
+ my $delta_time = &::timedelta($start_time);
+ &::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0);
+
+ return keys %desc;
}
####
# Usage: &generateIncoming();
sub generateIncoming {
- my $interval = $main::param{'debianRefreshInterval'};
my $pkgfile = "debian/Packages-incoming";
my $idxfile = $pkgfile.".idx";
my $stale = 0;
- $stale++ if (&main::isStale($pkgfile.".gz", $interval));
- $stale++ if (&main::isStale($idxfile, $interval));
- &main::DEBUG("gI: stale => '$stale'.");
+ $stale++ if (&::isStale($pkgfile.".gz", $refresh));
+ $stale++ if (&::isStale($idxfile, $refresh));
+ &::DEBUG("gI: stale => '$stale'.");
return 0 unless ($stale);
### STATIC URL.
- my %ftp = &main::ftpList("llug.sep.bnl.gov", "/pub/debian/Incoming/");
+ my %ftp = &::ftpList("llug.sep.bnl.gov", "/pub/debian/Incoming/");
if (!open(PKG,">$pkgfile")) {
- &main::ERROR("cannot write to pkg $pkgfile.");
+ &::ERROR("cannot write to pkg $pkgfile.");
return 0;
}
if (!open(IDX,">$idxfile")) {
- &main::ERROR("cannot write to idx $idxfile.");
+ &::ERROR("cannot write to idx $idxfile.");
return 0;
}
system("gzip -9fv $pkgfile"); # lame fix.
- &main::status("Debian: generateIncoming() complete.");
+ &::status("Debian: generateIncoming() complete.");
}
my ($package, $file) = @_;
if (! -f $file) {
- &main::status("gPI: file $file does not exist?");
+ &::status("gPI: file $file does not exist?");
return 'NULL';
}
$pkg{'conflicts'} = $1;
}
-### &main::DEBUG("=> '$_'.");
+### &::DEBUG("=> '$_'.");
}
# blank line.
# Usage: &infoPackages($query,$package);
sub infoPackages {
my ($query,$dist,$package) = ($_[0], &getDistroFromStr($_[1]));
- my $interval = $main::param{'debianRefreshInterval'} || 7;
- &main::status("Debian: Searching for package '$package' in '$dist'.");
+ &::status("Debian: Searching for package '$package' in '$dist'.");
# download packages file.
# hrm...
my %urls = &fixDist($dist, %urlpackages);
if ($dist ne "incoming") {
- &main::DEBUG("deb: download 3.");
+ &::DEBUG("deb: download 3.") if ($debug);
+
if (!&DebianDownload($dist, %urls)) { # no good download.
- &main::WARN("Debian(iP): could not download ANY files.");
+ &::WARN("Debian(iP): could not download ANY files.");
}
}
my $incoming = 0;
my @files = &validPackage($package, $dist);
if (!scalar @files) {
- &main::status("Debian: no valid package found; checking incoming.");
+ &::status("Debian: no valid package found; checking incoming.");
@files = &validPackage($package, "incoming");
if (scalar @files) {
- &main::status("Debian: cool, it exists in incoming.");
+ &::status("Debian: cool, it exists in incoming.");
$incoming++;
} else {
- &main::msg($main::who, "Package '$package' does not exist.");
+ &::msg($::who, "Package '$package' does not exist.");
return 0;
}
}
if (scalar @files > 1) {
- &main::WARN("same package in more than one file; random.");
- &main::DEBUG("THIS SHOULD BE FIXED SOMEHOW!!!");
- $files[0] = &main::getRandom(@files);
+ &::WARN("same package in more than one file; random.");
+ &::DEBUG("THIS SHOULD BE FIXED SOMEHOW!!!");
+ $files[0] = &::getRandom(@files);
}
if (! -f $files[0]) {
- &main::WARN("files[0] ($files[0]) doesn't exist.");
- &main::msg($main::who, "WARNING: $files[0] does not exist? FIXME");
+ &::WARN("files[0] ($files[0]) doesn't exist.");
+ &::msg($::who, "WARNING: $files[0] does not exist? FIXME");
return 'NULL';
}
### TODO: use fe, dump to a hash. if only one version of the package
### exists. do as normal otherwise list all versions.
if (! -f $file) {
- &main::ERROR("D:iP: file '$file' DOES NOT EXIST!!! should never happen.");
+ &::ERROR("D:iP: file '$file' DOES NOT EXIST!!! should never happen.");
return 0;
}
my %pkg = &getPackageInfo($package, $file);
$pkg{'info'} = "\002(\002". $pkg{'desc'} ."\002)\002";
$pkg{'info'} .= ", section ".$pkg{'section'};
$pkg{'info'} .= ", is ".$pkg{'priority'};
- $pkg{'info'} .= ". Version: \002$pkg{'version'}\002";
+# $pkg{'info'} .= ". Version: \002$pkg{'version'}\002";
+ $pkg{'info'} .= ". Version: \002$pkg{'version'}\002 ($dist)";
$pkg{'info'} .= ", Packaged size: \002". int($pkg{'size'}/1024) ."\002 kB";
$pkg{'info'} .= ", Installed size: \002$pkg{'installed'}\002 kB";
if ($incoming) {
- &main::status("iP: info requested and pkg is in incoming, too.");
+ &::status("iP: info requested and pkg is in incoming, too.");
my %incpkg = &getPackageInfo($query, "debian/Packages-incoming");
if (scalar keys %incpkg) {
$pkg{'info'} .= ". Is in incoming ($incpkg{'file'}).";
} else {
- &main::ERROR("iP: pkg $query is in incoming but we couldn't get any info?");
+ &::ERROR("iP: pkg $query is in incoming but we couldn't get any info?");
}
}
} else {
- &main::DEBUG("running debianCheck() due to problems (".scalar(keys %pkg).").");
+ &::DEBUG("running debianCheck() due to problems (".scalar(keys %pkg).").");
&debianCheck();
- &main::DEBUG("end of debianCheck()");
+ &::DEBUG("end of debianCheck()");
- &main::msg($main::who,"Debian: Package appears to exist but I could not retrieve info about it...");
+ &::msg($::who,"Debian: Package appears to exist but I could not retrieve info about it...");
return;
}
}
}
}
- &main::performStrictReply("$package: $pkg{$query}");
+ &::pSReply("$package: $pkg{$query}");
}
# Usage: &infoStats($dist);
$dist = &getDistro($dist);
return unless (defined $dist);
- &main::DEBUG("infoS: dist => '$dist'.");
- my $interval = $main::param{'debianRefreshInterval'} || 7;
+ &::DEBUG("infoS: dist => '$dist'.");
# download packages file if needed.
my %urls = &fixDist($dist, %urlpackages);
- &main::DEBUG("deb: download 4.");
+ &::DEBUG("deb: download 4.");
if (!&DebianDownload($dist, %urls)) {
- &main::WARN("Debian(iS): could not download ANY files.");
- &main::msg($main::who, "Debian(iS): internal error.");
+ &::WARN("Debian(iS): could not download ANY files.");
+ &::msg($::who, "Debian(iS): internal error.");
return;
}
my $file;
foreach $file (keys %urlpackages) {
$file =~ s/##DIST/$dist/g; # won't work for incoming.
- &main::DEBUG("file => '$file'.");
+ &::DEBUG("file => '$file'.");
if (exists $stats{$file}{'count'}) {
- &main::DEBUG("hrm... duplicate open with $file???");
+ &::DEBUG("hrm... duplicate open with $file???");
next;
}
open(IN,"zcat $file 2>&1 |");
if (! -e $file) {
- &main::DEBUG("iS: $file does not exist.");
+ &::DEBUG("iS: $file does not exist.");
next;
}
$total{'isize'} += $1;
}
-### &main::DEBUG("=> '$_'.");
+### &::DEBUG("=> '$_'.");
}
close IN;
}
- &main::performStrictReply(
+ ### TODO: don't count ppl with multiple email addresses.
+
+ &::pSReply(
"Debian Distro Stats on $dist... ".
"\002$total{'count'}\002 packages, ".
- "\002".scalar(keys %{$total{'maint'}})."\002 maintainers, ".
+ "\002".scalar(keys %{ $total{'maint'} })."\002 maintainers, ".
"\002". int($total{'isize'}/1024)."\002 MB installed size, ".
"\002". int($total{'csize'}/1024/1024)."\002 MB compressed size."
);
### TODO: do individual stats? if so, we need _another_ arg.
# foreach $file (keys %stats) {
-# foreach (keys %{$stats{$file}}) {
-# &main::DEBUG(" '$file' '$_' '$stats{$file}{$_}'.");
+# foreach (keys %{ $stats{$file} }) {
+# &::DEBUG(" '$file' '$_' '$stats{$file}{$_}'.");
# }
# }
# Usage: &generateIndex();
sub generateIndex {
my (@dists) = @_;
- &main::status("Debian: !!! generateIndex() called !!!");
- if (!scalar @dists) {
- &main::ERROR("gI: no dists to generate index.");
+ &::status("Debian: !!! generateIndex($dists[0]) called !!!");
+ if (!scalar @dists or $dists[0] eq '') {
+ &::ERROR("gI: no dists to generate index.");
return 1;
}
foreach (@dists) {
my $dist = &getDistro($_); # incase the alias is returned, possible?
my $idx = "debian/Packages-$dist.idx";
+ &::DEBUG("gI: dist => $dist.");
+ &::DEBUG("gI: idx => $idx.");
+ &::DEBUG("gI: r => $refresh.");
# TODO: check if any of the Packages file have been updated then
# regenerate it, even if it's not stale.
# TODO: also, regenerate the index if the packages file is newer
# than the index.
- next unless (&main::isStale($idx, $main::param{'debianRefreshInterval'}));
+ next unless (&::isStale($idx, $refresh));
+
if (/^incoming$/i) {
- &main::DEBUG("gIndex: calling generateIncoming()!");
+ &::DEBUG("gIndex: calling generateIncoming()!");
&generateIncoming();
next;
}
- &main::DEBUG("gIndeX: calling DebianDownload($dist, ...).");
+ if (/^woody$/i) {
+ &::DEBUG("Copying old index of woody to -old");
+ system("cp $idx $idx-old");
+ }
+
+ &::DEBUG("gIndeX: calling DebianDownload($dist, ...).");
&DebianDownload($dist, %urlpackages);
- &main::status("Debian: generating index for '$_'.");
+ &::status("Debian: generating index for '$dist'.");
if (!open(OUT,">$idx")) {
- &main::ERROR("cannot write to $idx.");
+ &::ERROR("cannot write to $idx.");
return 0;
}
$packages =~ s/##DIST/$dist/;
if (! -e $packages) {
- &main::ERROR("gIndex: '$packages' does not exist?");
+ &::ERROR("gIndex: '$packages' does not exist?");
next;
}
open(IN,"zcat $packages |");
while (<IN>) {
- if (/^Package: (.*)\n$/) {
- print OUT $1."\n";
- }
+ next unless (/^Package: (.*)\n$/);
+ print OUT $1."\n";
}
close IN;
}
my @files;
my $file;
- &main::DEBUG("D: validPackage($package, $dist) called.");
+ ### this majorly sucks, we need some standard in place.
+ # why is this needed... need to investigate later.
+ my $olddist = $dist;
+ $dist = &getDistro($dist);
+
+ &::DEBUG("D: validPackage($package, $dist) called.") if ($debug);
my $error = 0;
while (!open(IN, "debian/Packages-$dist.idx")) {
if ($error) {
- &main::ERROR("Packages-$dist.idx does not exist (#1).");
+ &::ERROR("Packages-$dist.idx does not exist (#1).");
return;
}
next;
}
- if (/^$package\n$/) {
+ if (/^\Q$package\E\n$/) {
push(@files,$file);
}
$count++;
}
close IN;
- &main::DEBUG("vP: scanned $count items in index.");
+ &::VERB("vP: scanned $count items in index.",2);
return @files;
}
my ($dist, $query) = &getDistroFromStr($_[0]);
my $file = "debian/Packages-$dist.idx";
my @files;
- my $error = 0;
+ my $error = 0;
+ my $warn = 0;
- &main::status("Debian: Search package matching '$query' in '$dist'.");
- if ( -z $file) {
- &main::DEBUG("sP: $file == NULL; removing, redoing.");
- unlink $file;
+ if ($query =~ tr/A-Z/a-z/) {
+ $warn++;
}
+ &::status("Debian: Search package matching '$query' in '$dist'.");
+ unlink $file if ( -z $file);
+
while (!open(IN, $file)) {
- &main::ERROR("$file does not exist (#2).");
if ($dist eq "incoming") {
- &main::DEBUG("sP: dist == incoming; calling gI().");
+ &::DEBUG("sP: dist == incoming; calling gI().");
&generateIncoming();
}
if ($error) {
- &main::ERROR("could not generate index!!!");
+ &::ERROR("could not generate index ($file)!!!");
return;
}
+
$error++;
+ &::DEBUG("should we be doing this?");
&generateIndex(($dist));
}
chop;
if (/^\*(.*)$/) {
- &main::DEBUG("sP: hrm => '$1'.");
+ $file = $1;
- if (&main::isStale($file, $main::param{'debianRefreshInterval'})) {
- &main::DEBUG("STALE $file! regen.");
+ if (&::isStale($file, $refresh)) {
+ &::DEBUG("STALE $file! regen.");
&generateIndex(($dist));
### @files = searchPackage("$query $dist");
- &main::DEBUG("EVIL HACK HACK HACK.");
+ &::DEBUG("EVIL HACK HACK HACK.");
last;
}
- $file = $1;
next;
}
}
close IN;
+ if (scalar @files and $warn) {
+ &::msg($::who, "searching for package name should be fully lowercase!");
+ }
+
return @files;
}
my $dist = $_[0];
if (!defined $dist or $dist eq "") {
- &main::DEBUG("gD: dist == NULL; dist = defaultdist.");
+ &::DEBUG("gD: dist == NULL; dist = defaultdist.");
$dist = $defaultdist;
}
if ($dist =~ /^(slink|hamm|rex|bo)$/i) {
- &main::DEBUG("Debian: deprecated version ($dist).");
- &main::msg($main::who, "Debian: deprecated distribution version.");
+ &::DEBUG("Debian: deprecated version ($dist).");
+ &::msg($::who, "Debian: deprecated distribution version.");
return;
}
if (exists $dists{$dist}) {
+ &::VERB("gD: returning dists{$dist} ($dists{$dist})",2);
return $dists{$dist};
+
} else {
if (!grep /^\Q$dist\E$/i, %dists) {
- &main::msg($main::who, "invalid dist '$dist'.");
+ &::msg($::who, "invalid dist '$dist'.");
return;
}
+ &::VERB("gD: returning $dist (no change or conversion)",2);
return $dist;
}
}
my @results = sort &searchPackage($str);
if (!scalar @results) {
- &main::Forker("debian", sub { &searchContents($str); } );
+ &::Forker("debian", sub { &searchContents($str); } );
} elsif (scalar @results == 1) {
- &main::status("searchPackage returned one result; getting info of package instead!");
- &main::Forker("debian", sub { &infoPackages("info", "$results[0] $dist"); } );
+ &::status("searchPackage returned one result; getting info of package instead!");
+ &::Forker("debian", sub { &infoPackages("info", "$results[0] $dist"); } );
} else {
- my $prefix = "Debian Package Listing of '$str' ";
- &main::performStrictReply( &main::formListReply(0, $prefix, @results) );
+ my $prefix = "Debian Package Listing of '$query' ";
+ &::pSReply( &::formListReply(0, $prefix, @results) );
}
}
my $dir = "debian/";
my $error = 0;
- &main::status("debianCheck() called.");
+ &::status("debianCheck() called.");
### TODO: remove the following loop (check if dir exists before)
while (1) {
last if (opendir(DEBIAN, $dir));
if ($error) {
- &main::ERROR("dC: cannot opendir debian.");
+ &::ERROR("dC: cannot opendir debian.");
return;
}
mkdir $dir, 0755;
my $exit = system("gzip -t '$dir/$file'");
next unless ($exit);
- &main::DEBUG("hmr... => ".(time() - (stat($file))[8])."'.");
+ &::DEBUG("hmr... => ".(time() - (stat($file))[8])."'.");
next unless (time() - (stat($file))[8] > 3600);
- &main::DEBUG("dC: exit => '$exit'.");
- &main::WARN("dC: '$dir/$file' corrupted? deleting!");
+ &::DEBUG("dC: exit => '$exit'.");
+ &::WARN("dC: '$dir/$file' corrupted? deleting!");
unlink $dir."/".$file;
$retval++;
}
return $retval;
}
+sub checkEval {
+ my($str) = @_;
+
+ if ($str) {
+ &::WARN("cE: $str");
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+sub searchDescFE {
+ &::DEBUG("FE called for searchDesc");
+ my ($query) = @_;
+ my @list = &searchDesc($query);
+
+ if (!scalar @list) {
+ my $prefix = "Debian Desc Search of '$query' ";
+ &::pSReply( &::formListReply(0, $prefix, ) );
+ } elsif (scalar @list == 1) { # list = 1.
+ &::DEBUG("list == 1; showing package info of '$list[0]'.");
+ &infoPackages("info", $list[0]);
+ } else { # list > 1.
+ my $prefix = "Debian Desc Search of '$query' ";
+ &::pSReply( &::formListReply(0, $prefix, @list) );
+ }
+}
+
1;