File tree Expand file tree Collapse file tree 1 file changed +30
-1
lines changed Expand file tree Collapse file tree 1 file changed +30
-1
lines changed Original file line number Diff line number Diff line change @@ -561,11 +561,25 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
561561 return redirect_to_random_crate ( req, & mut conn) ;
562562 }
563563
564- let ( krate, query) = match query. split_once ( "::" ) {
564+ let ( krate, mut query) = match query. split_once ( "::" ) {
565565 Some ( ( krate, query) ) => ( krate. to_string ( ) , format ! ( "?search={query}" ) ) ,
566566 None => ( query. clone ( ) , "" . to_string ( ) ) ,
567567 } ;
568568
569+ for ( k, v) in params
570+ . iter ( )
571+ . filter ( |( k, _) | !matches ! ( k. as_ref( ) , "i-am-feeling-lucky" | "query" ) )
572+ {
573+ if query. is_empty ( ) {
574+ query. push ( '?' ) ;
575+ } else {
576+ query. push ( '&' )
577+ }
578+ query. push_str ( k) ;
579+ query. push ( '=' ) ;
580+ query. push_str ( v) ;
581+ }
582+
569583 // since we never pass a version into `match_version` here, we'll never get
570584 // `MatchVersion::Exact`, so the distinction between `Exact` and `Semver` doesn't
571585 // matter
@@ -884,6 +898,21 @@ mod tests {
884898 } )
885899 }
886900
901+ #[ test]
902+ fn search_coloncolon_path_redirects_to_crate_docs_and_keeps_query ( ) {
903+ wrapper ( |env| {
904+ let web = env. frontend ( ) ;
905+ env. fake_release ( ) . name ( "some_random_crate" ) . create ( ) ?;
906+
907+ assert_redirect (
908+ "/releases/search?query=some_random_crate::somepath&go_to_first=true" ,
909+ "/some_random_crate/1.0.0/some_random_crate/?search=somepath&go_to_first=true" ,
910+ web,
911+ ) ?;
912+ Ok ( ( ) )
913+ } )
914+ }
915+
887916 #[ test]
888917 fn search_result_passes_cratesio_pagination_links ( ) {
889918 wrapper ( |env| {
You can’t perform that action at this time.
0 commit comments