X-Git-Url: https://git.deb.at/?p=deb%2Fpackages.git;a=blobdiff_plain;f=bin%2Fcreate_index_pages;h=eb797d34bb0c906bed604857e3dc92a7482143bf;hp=69b60a28b26ddf866b92f18446a5a560ddc4581d;hb=17913bc92f23cb3cd03978f24825f4f8823dfb8f;hpb=2ec757bb58907b15c43548be5601d4f2b8c7caac diff --git a/bin/create_index_pages b/bin/create_index_pages index 69b60a2..eb797d3 100755 --- a/bin/create_index_pages +++ b/bin/create_index_pages @@ -27,7 +27,9 @@ delete $ENV{'LANG'}; delete $ENV{'LC_ALL'}; delete $ENV{'LC_MESSAGES'}; bindtextdomain ( 'pdo', $LOCALES ); +bindtextdomain ( 'templates', $LOCALES ); bindtextdomain ( 'sections', $LOCALES ); +bindtextdomain ( 'langs', $LOCALES ); textdomain( 'pdo' ); my $wwwdir = "$TOPDIR/www"; @@ -41,11 +43,12 @@ tie my %src_packages, 'DB_File', "$DBDIR/sources_small.db", tie my %src2bin, 'DB_File', "$DBDIR/sources_packages.db", O_RDONLY, 0666, $DB_BTREE or die "couldn't open $DBDIR/sources_packages.db: $!"; +tie my %desctrans, 'DB_File', "$DBDIR/descriptions_translated.db", + O_RDONLY, 0666, $DB_BTREE + or die "couldn't tie DB $DBDIR/descriptions_translated.db: $!"; my $sections = retrieve "$DBDIR/sections.info"; my $subsections = retrieve "$DBDIR/subsections.info"; -# work around problems with non-US security updates -$subsections->{oldstable}{us}{'non-US'}++; my $priorities = retrieve "$DBDIR/priorities.info"; #use Data::Dumper; @@ -53,32 +56,26 @@ my $priorities = retrieve "$DBDIR/priorities.info"; my (%pages); -my $template = new Packages::Template( "$TOPDIR/templates", 'html', {} ); +my $template = new Packages::Template( "$TOPDIR/templates", 'html'); +my $txt_template = new Packages::Template( "$TOPDIR/templates", 'txt'); print "write suite index files ...\n"; foreach my $s (@SUITES) { my $key = $s; mkpath ( "$wwwdir/$key" ); + mkpath ( "$wwwdir/source/$key" ); foreach my $lang (@LANGUAGES) { my $locale = get_locale( $lang ); - my $charset = get_locale( $lang ); + my $charset = get_charset( $lang ); setlocale ( LC_ALL, $locale ) or do { warn "couldn't set locale ($lang/$locale)\n"; next; }; print "writing $key/index (lang=$lang)...\n"; - open $pages{$key}{$lang}{index}{fh}, '>', "$wwwdir/$key/index.$lang.html.new" - or die "can't open index file for output: $!"; my %content = ( subsections => [], suite => $s, - lang => $lang, charset => $charset ); - $content{make_search_url} = sub { return &Packages::CGI::make_search_url(@_) }; - $content{make_url} = sub { return &Packages::CGI::make_url(@_) }; - # needed to work around the limitations of the the FILTER syntax - $content{html_encode} = sub { return HTML::Entities::encode_entities(@_,'<>&"') }; - $content{uri_escape} = sub { return URI::Escape::uri_escape(@_) }; - $content{quotemeta} = sub { return quotemeta($_[0]) }; - + lang => $lang, charset => $charset, + used_langs => \@LANGUAGES, suites => \@SUITES ); foreach my $ssec ((keys %{$subsections->{$s}}, 'virtual')) { next if $ssec eq '-'; if ($sections_descs{$ssec}) { @@ -89,14 +86,18 @@ foreach my $s (@SUITES) { }; } } - - print {$pages{$key}{$lang}{index}{fh}} $template->page( 'suite_index', \%content ); - print {$pages{$key}{$lang}{index}{fh}} $template->trailer( 'index', $lang, \@LANGUAGES ); - close $pages{$key}{$lang}{index}{fh} or - warn "can't close index file $wwwdir/$key/index.$lang.html.new: $!"; + + $template->page( 'suite_index', \%content, + "$wwwdir/$key/index.$lang.html.new"); rename( "$wwwdir/$key/index.$lang.html.new", "$wwwdir/$key/index.$lang.html" ); - + + $content{source} = 'source'; + $template->page( 'suite_index', \%content, + "$wwwdir/source/$key/index.$lang.html.new"); + rename( "$wwwdir/source/$key/index.$lang.html.new", + "$wwwdir/source/$key/index.$lang.html" ); + } } setlocale( LC_ALL, 'C' ) or die "couldn't reset locale"; @@ -108,7 +109,7 @@ while (my ($pkg, $data) = each %packages) { my ($virt, $p_data) = split /\000/o, $data, 2; %virt = split /\01/o, $virt; foreach (split /\000/o, $p_data||'') { - my @data = split ( /\s/o, $_, 8 ); + my @data = split ( /\s/o, $_, 9 ); $pkg{$data[1]} ||= new Packages::Page( $pkg ); $pkg{$data[1]}->merge_package( { package => $pkg, archive => $data[0], @@ -118,7 +119,8 @@ while (my ($pkg, $data) = each %packages) { subsection => $data[4], priority => $data[5], version => $data[6], - description => $data[7] } ); + 'description-md5' => $data[7], + description => $data[8] } ); } foreach (keys %virt) { next if $_ eq '-'; @@ -140,6 +142,18 @@ while (my ($pkg, $data) = each %packages) { $p{section} = $entry->get_newest( 'section' ); $p{archive} = $entry->get_newest( 'archive' ); $p{desc} = $entry->get_newest( 'description' ); + my $desc_md5 = $entry->get_newest( 'description-md5' ); + my $trans_desc = $desctrans{$desc_md5}; + if ($trans_desc) { + my %sdescs; + my %trans_desc = split /\000|\001/, $trans_desc; + while (my ($l, $d) = each %trans_desc) { + $d =~ s/\n.*//os; + + $sdescs{$l} = $d; + } + $p{trans_desc} = \%sdescs; + } $p{priority} = $entry->get_newest( 'priority' ); } push @{$allpkgs{$key}}, \%p; @@ -196,64 +210,72 @@ sub write_files { foreach my $s (@SUITES) { my $key = $s; mkpath ( "$wwwdir/$source$key" ); - print "writing $source$s/allpackages...\n"; - $template->process( 'html/index.tmpl', { packages => $pkgs->{$key}, suite => $s, lang => 'en', is_source => $source }, - "$wwwdir/$source$key/allpackages.en.html.new" ) - or die "error writing allpackages for $key: ".$template->error(); - print "writing $source$s/allpackages (txt)...\n"; - my $gzfh = gzopen("$wwwdir/$source$key/allpackages.en.txt.gz.new", - 'wb9') - or die "can't open text index file for output: $!"; - my $gztxt; - $template->process( 'txt/index.tmpl', { packages => $pkgs->{$key}, suite => $s, lang => 'en', is_source => $source }, - \$gztxt ) - or die "error writing allpackages txt for $key: ".$template->error(); - $gzfh->gzwrite($gztxt); - ($gzfh->gzclose == Z_OK) or - warn "can't close text index file $wwwdir/$source$key/allpackages.en.txt.gz.new: ".$gzfh->gzerror; - - rename( "$wwwdir/$source$key/allpackages.en.html.new", - "$wwwdir/$source$key/allpackages.en.html" ); - rename( "$wwwdir/$source$key/allpackages.en.txt.gz.new", - "$wwwdir/$source$key/allpackages.en.txt.gz" ); - - foreach my $sec (keys %{$sections->{$s}}) { - mkpath ( "$wwwdir/$source$key/$sec" ); - - print "writing $source$s/$sec/index...\n"; - $template->process( 'html/index.tmpl', { packages => [ grep { $_->{section} eq $sec } @{$pkgs->{$key}} ], - suite => $s, lang => 'en', is_source => $source, - category => { id => 'section', name => $sec } }, - "$wwwdir/$source$key/$sec/index.en.html.new" ) - or die "error writing section index for $key/$sec: ".$template->error(); - rename( "$wwwdir/$source$key/$sec/index.en.html.new", - "$wwwdir/$source$key/$sec/index.en.html" ); - } - foreach my $ssec ((keys %{$subsections->{$s}}, 'virtual')) { - next if $ssec eq '-'; - mkpath ( "$wwwdir/$source$key/$ssec" ); - - print "writing $source$s/$ssec/index...\n"; - $template->process( 'html/index.tmpl', { packages => [ grep { $_->{subsection} eq $ssec } @{$pkgs->{$key}} ], - suite => $s, lang => 'en', is_source => $source, - category => { id => 'subsection', name => $ssec } }, - "$wwwdir/$source$key/$ssec/index.en.html.new" ) - or die "error writing subsection index for $key/$ssec: ".$template->error(); - rename( "$wwwdir/$source$key/$ssec/index.en.html.new", - "$wwwdir/$source$key/$ssec/index.en.html" ); - } - foreach my $prio (keys %{$priorities->{$s}}) { - next if $prio eq '-'; - mkpath ( "$wwwdir/$source$key/$prio" ); - - print "writing $source$s/$prio/index...\n"; - $template->process( 'html/index.tmpl', { packages => [ grep { $_->{priority} eq $prio } @{$pkgs->{$key}} ], - suite => $s, lang => 'en', is_source => $source, - category => { id => 'priority', name => $prio } }, - "$wwwdir/$source$key/$prio/index.en.html.new" ) - or die "error writing priority index for $key/$prio: ".$template->error(); - rename( "$wwwdir/$source$key/$prio/index.en.html.new", - "$wwwdir/$source$key/$prio/index.en.html" ); + foreach my $lang (@LANGUAGES) { + my $locale = get_locale( $lang ); + my $charset = get_charset( $lang ); + setlocale ( LC_ALL, $locale ) or do { + warn "couldn't set locale ($lang/$locale)\n"; + next; + }; + + my %lang_vars = ( lang => $lang, charset => $charset, + used_langs => \@LANGUAGES ); + print "writing $source$s/allpackages (lang=$lang)...\n"; + $template->page( 'index', { %lang_vars, packages => $pkgs->{$key}, + suite => $s, is_source => $source }, + "$wwwdir/$source$key/allpackages.$lang.html.new" ); + print "writing $source$s/allpackages (txt,lang=$lang)...\n"; + my $gzfh = gzopen("$wwwdir/$source$key/allpackages.$lang.txt.gz.new", + 'wb9') + or die "can't open text index file for output: $!"; + my $gztxt; + $gztxt = $txt_template->page( 'index', { %lang_vars, packages => $pkgs->{$key}, + suite => $s, is_source => $source }, + ); + $gzfh->gzwrite($gztxt); + ($gzfh->gzclose == Z_OK) or + warn "can't close text index file $wwwdir/$source$key/allpackages.$lang.txt.gz.new: ".$gzfh->gzerror; + + rename( "$wwwdir/$source$key/allpackages.$lang.html.new", + "$wwwdir/$source$key/allpackages.$lang.html" ); + rename( "$wwwdir/$source$key/allpackages.$lang.txt.gz.new", + "$wwwdir/$source$key/allpackages.$lang.txt.gz" ); + + foreach my $sec (keys %{$sections->{$s}}) { + mkpath ( "$wwwdir/$source$key/$sec" ); + + print "writing $source$s/$sec/index (lang=$lang)...\n"; + $template->page( 'index', { packages => [ grep { $_->{section} eq $sec } @{$pkgs->{$key}} ], + %lang_vars, suite => $s, is_source => $source, + category => { id => _g('Section'), name => $sec } }, + "$wwwdir/$source$key/$sec/index.$lang.html.new" ); + rename( "$wwwdir/$source$key/$sec/index.$lang.html.new", + "$wwwdir/$source$key/$sec/index.$lang.html" ); + } + foreach my $ssec ((keys %{$subsections->{$s}}, 'virtual')) { + next if $ssec eq '-'; + mkpath ( "$wwwdir/$source$key/$ssec" ); + + print "writing $source$s/$ssec/index (lang=$lang)...\n"; + $template->page( 'index', { packages => [ grep { $_->{subsection} eq $ssec } @{$pkgs->{$key}} ], + %lang_vars, suite => $s, is_source => $source, + category => { id => _g('Subsection'), name => $ssec } }, + "$wwwdir/$source$key/$ssec/index.$lang.html.new" ); + rename( "$wwwdir/$source$key/$ssec/index.$lang.html.new", + "$wwwdir/$source$key/$ssec/index.$lang.html" ); + } + foreach my $prio (keys %{$priorities->{$s}}) { + next if $prio eq '-'; + mkpath ( "$wwwdir/$source$key/$prio" ); + + print "writing $source$s/$prio/index (lang=$lang)...\n"; + $template->page( 'index', { packages => [ grep { $_->{priority} eq $prio } @{$pkgs->{$key}} ], + %lang_vars, suite => $s, is_source => $source, + category => { id => _g('Priority'), name => $prio } }, + "$wwwdir/$source$key/$prio/index.$lang.html.new" ); + rename( "$wwwdir/$source$key/$prio/index.$lang.html.new", + "$wwwdir/$source$key/$prio/index.$lang.html" ); + } } } }