X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=cgi-bin%2Fdispatcher.pl;h=6235cc5e39854b6b746d09100700d5dca287e6d4;hb=a430a7f2c477de0e9952384e896e7c78cea3f32f;hp=5ff3b675227236154e65da31e9ce4d510fcd016b;hpb=6b32484cb228479df13814cf1ba0f6667ff7148d;p=deb%2Fpackages.git diff --git a/cgi-bin/dispatcher.pl b/cgi-bin/dispatcher.pl index 5ff3b67..6235cc5 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' ); @@ -79,7 +79,10 @@ if (my $path = $input->path_info() || $input->param('PATH_INFO')) { push @components, 'index' if $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" ) ); @@ -164,9 +172,10 @@ my %params_def = ( keywords => { default => undef, 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 +185,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 +197,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});