X-Git-Url: https://git.deb.at/?p=deb%2Fpackages.git;a=blobdiff_plain;f=cgi-bin%2Fdispatcher.pl;h=04d5acb74273f5aabc30a916d9cce450a8f84558;hp=5ff3b675227236154e65da31e9ce4d510fcd016b;hb=06c6f30bfc4f55cecc7485fef0f0a227e32b44f0;hpb=6b32484cb228479df13814cf1ba0f6667ff7148d diff --git a/cgi-bin/dispatcher.pl b/cgi-bin/dispatcher.pl index 5ff3b67..04d5acb 100755 --- a/cgi-bin/dispatcher.pl +++ b/cgi-bin/dispatcher.pl @@ -67,7 +67,7 @@ my $acc = I18N::AcceptLanguage->new(); my $http_lang = $acc->accepts( $input->http("Accept-Language"), \@LANGUAGES ) || 'en'; debug( "LANGUAGES=@LANGUAGES header=". - $input->http("Accept-Language"). + ($input->http("Accept-Language")||''). " http_lang=$http_lang", 2 ) if DEBUG; bindtextdomain ( 'pdo', $LOCALES ); textdomain( 'pdo' ); @@ -77,9 +77,12 @@ my $source = 0; if (my $path = $input->path_info() || $input->param('PATH_INFO')) { my @components = grep { $_ } map { lc $_ } split /\/+/, $path; - push @components, 'index' if $path =~ m,/$,; + push @components, 'index' if @components && $path =~ m,/$,; - debug( "components[0]=$components[0]", 2 ) if DEBUG and @components>0; + my %LANGUAGES = map { $_ => 1 } @LANGUAGES; + if (@components > 0 and $LANGUAGES{$components[0]}) { + $input->param( 'lang', shift(@components) ); + } if (@components > 0 and $components[0] eq 'source') { shift @components; $input->param( 'source', 1 ); @@ -115,6 +118,7 @@ if (my $path = $input->path_info() || $input->param('PATH_INFO')) { my %params_set; sub set_param_once { my ($cgi, $params_set, $key, $val) = @_; + debug("set_param_once key=$key val=$val",4) if DEBUG; if ($params_set->{$key}++) { fatal_error( sprintf( _g( "%s set more than once in path" ), $key ) ); } else { @@ -122,28 +126,32 @@ if (my $path = $input->path_info() || $input->param('PATH_INFO')) { } } - my @tmp; - foreach (@components) { - if ($SUITES{$_}) { + my (@pkg, $need_pkg); + foreach (reverse @components) { + $need_pkg = !@pkg + && ($what_to_do !~ /^(index|allpackages|newpkg)$/); + debug("need_pkg=$need_pkg component=$_",4) if DEBUG; + if (!$need_pkg && $SUITES{$_}) { set_param_once( $input, \%params_set, 'suite', $_); -#possible conflicts with package names -# } elsif (my $s = $SUITES_ALIAS{$_}) { -# set_param_once( $input, \%params_set, 'suite', $s); - } elsif ($SECTIONS{$_}) { + } elsif (!$need_pkg && (my $s = $SUITES_ALIAS{$_})) { + set_param_once( $input, \%params_set, 'suite', $s); + } elsif (!$need_pkg && $SECTIONS{$_}) { set_param_once( $input, \%params_set, 'section', $_); - } elsif ($ARCHIVES{$_}) { + } elsif (!$need_pkg && $ARCHIVES{$_}) { set_param_once( $input, \%params_set, 'archive', $_); - } elsif ($ARCHITECTURES{$_}) { - set_param_once( $input, \%params_set, 'arch', $_); - } elsif ($sections_descs{$_}) { + } elsif (!$need_pkg && $sections_descs{$_}) { set_param_once( $input, \%params_set, 'subsection', $_); - } elsif ($_ eq 'source') { + } elsif (!$need_pkg && ($_ eq 'non-us')) { # non-US hack + set_param_once( $input, \%params_set, 'subsection', 'non-US'); + } elsif (!$need_pkg && ($_ eq 'source')) { set_param_once( $input, \%params_set, 'source', 1); + } elsif ($ARCHITECTURES{$_}) { + set_param_once( $input, \%params_set, 'arch', $_); } else { - push @tmp, $_; + push @pkg, $_; } } - @components = @tmp; + @components = @pkg; if (@components > 1) { fatal_error( sprintf( _g( "two or more packages specified (%s)" ), "@components" ) ); @@ -159,14 +167,16 @@ if (my $path = $input->path_info() || $input->param('PATH_INFO')) { my ( $pkg, @suites, @sections, @subsections, @archives, @archs ); my %params_def = ( keywords => { default => undef, - match => '^\s*([-+\@\s\w\/.:]+)\s*$', + array => '\s+', + match => '^([-+\@\w\/.:]+)$', }, package => { default => undef, match => '^([\w.+-]+)$', var => \$pkg }, - suite => { default => 'all', match => '^([\w-]+)$', + suite => { default => 'default', match => '^([\w-]+)$', array => ',', var => \@suites, - replace => { all => \@SUITES } }, + replace => { all => \@SUITES, + default => \@SUITES } }, archive => { default => ($what_to_do eq 'search') ? 'all' : 'default', match => '^([\w-]+)$', @@ -176,6 +186,7 @@ my %params_def = ( keywords => { default => undef, exact => { default => 0, match => '^(\w+)$', }, lang => { default => $http_lang, match => '^(\w+)$', }, source => { default => 0, match => '^(\d+)$', }, + debug => { default => 0, match => '^(\d+)$', }, searchon => { default => 'names', match => '^(\w+)$', }, section => { default => 'all', match => '^([\w-]+)$', alias => 'release', array => ',', @@ -187,11 +198,12 @@ my %params_def = ( keywords => { default => undef, arch => { default => 'any', match => '^([\w-]+)$', array => ',', var => \@archs, replace => { any => \@ARCHITECTURES } }, - format => { default => 'html', match => '^(\w+)$', }, + format => { default => 'html', match => '^([\w.]+)$', }, mode => { default => undef, match => '^(\w+)$', }, ); my %opts; -my %params = Packages::Search::parse_params( $input, \%params_def, \%opts ); +my %params = Packages::CGI::parse_params( $input, \%params_def, \%opts ); +Packages::CGI::init_url( $input, \%params, \%opts ); my $locale = get_locale($opts{lang}); my $charset = get_charset($opts{lang}); @@ -269,7 +281,6 @@ print "Total page evaluation took ".timestr($tetd)."
" if DEBUG; my $trailer = Packages::HTML::trailer( $ROOT ); -$trailer =~ s/LAST_MODIFIED_DATE/gmtime()/e; #FIXME print $trailer; # vim: ts=8 sw=4