use DB_File;
use Storable;
+use File::Path;
use Deb::Versions;
use Packages::Config qw( $TOPDIR $DBDIR @ARCHIVES @SUITES );
&Packages::Config::init( './' );
$/ = "";
-for my $archive (@ARCHIVES) {
- for my $suite (@SUITES) {
+-d $DBDIR || mkpath( $DBDIR );
- my %package_names_suite = ();
+for my $suite (@SUITES) {
+ my %package_names_suite = ();
+ my %packages_all_db;
+ tie %packages_all_db, "DB_File", "$DBDIR/packages_all_$suite.db.new",
+ O_RDWR|O_CREAT, 0666, $DB_BTREE
+ or die "Error creating DB: $!";
+
+ for my $archive (@ARCHIVES) {
print "Reading $archive/$suite...\n";
- my %packages_all_db;
- tie %packages_all_db, "DB_File", "$DBDIR/packages_all_$suite.db.new",
- O_RDWR|O_CREAT, 0666, $DB_BTREE
- or die "Error creating DB: $!";
+ if (!-d "$TOPDIR/archive/$archive/$suite/") {
+ print "\tseems not to exist, skipping...\n";
+ next;
+ }
open PKG, "zcat $TOPDIR/archive/$archive/$suite/$what/{,debian-installer/}binary-*/Packages.gz|";
while (<PKG>) {
next if /^\s*$/;
}
# Skip double package
next if exists($packages_all_db{"$data{'package'} $data{'architecture'} $data{'version'}"});
+ # Skip arch:all for amd64&kfreebsd, too often broken
+ next if ($archive eq 'amd64' or $archive eq 'kfreebsd')
+ and $data{architecture} eq 'all';
if ($data{'provides'}) {
foreach (split /\s*,\s*/, $data{'provides'}) {
$virtual_packages{$_}{$suite}{$data{'package'}}++;
+ $packages_small{$_} ||= {};
}
}
$package_names{$data{'package'}} = 1;
$data{'section'} = $section;
$data{'subsection'} = $subsection;
$data{'priority'} ||= '-';
- $sections{$suite}{$archive}{$section}++;
- $subsections{$suite}{$archive}{$subsection}++;
- $priorities{$suite}{$archive}{$data{priority}}++;
+ $sections{$suite}{$section}++;
+ $subsections{$suite}{$subsection}++;
+ $priorities{$suite}{$data{priority}}++;
my $pkgitem = "$archive $suite $data{'architecture'} ".
"$section $subsection $data{'priority'} $data{'version'} $sdescr\0";
- my $previtem = $packages_small{$data{'package'}}{$suite}{$data{'architecture'}}
- || $pkgitem;
+ my $previtem = ($packages_small{$data{'package'}}{$suite}{$data{'architecture'}}
+ ||= $pkgitem);
$packages_small{$data{'package'}}{$suite}{$data{'architecture'}} = $pkgitem
- if version_cmp($data{'version'}, (split /\s/o, $previtem)[6]) >= 0;
- $previtem = $packages_small{$data{'package'}}{$suite}{'any'}
- || $pkgitem;
+ if version_cmp($data{'version'}, (split /\s/o, $previtem)[6]) > 0;
+ $previtem = ($packages_small{$data{'package'}}{$suite}{'any'}
+ ||= $pkgitem);
$packages_small{$data{'package'}}{$suite}{'any'} = $pkgitem
- if version_cmp($data{'version'}, (split /\s/o, $previtem)[6]) >= 0;
+ if version_cmp($data{'version'}, (split /\s/o, $previtem)[6]) > 0;
$sources_packages{$src} .=
"$archive $suite $data{'package'} $data{'version'} $data{'architecture'}\000";
$data{archive} = $archive;
$packages_all_db{"$data{'package'} $data{'architecture'} $data{'version'}"}
= $data;
}
+ }
- open NAMES, '>>', "$DBDIR/package_names_$suite.txt.new"
- or die "Error creating package names list: $!";
- foreach (sort keys %package_names_suite) {
- print NAMES "$_\n";
- }
- close NAMES;
-
- untie %packages_all_db;
+ open NAMES, '>', "$DBDIR/package_names_$suite.txt.new"
+ or die "Error creating package names list: $!";
+ foreach (sort keys %package_names_suite) {
+ print NAMES "$_\n";
}
+ close NAMES;
+
+ untie %packages_all_db;
}
print "Writing databases...\n";