File tree 1 file changed +30
-1
lines changed
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> {
561
561
return redirect_to_random_crate ( req, & mut conn) ;
562
562
}
563
563
564
- let ( krate, query) = match query. split_once ( "::" ) {
564
+ let ( krate, mut query) = match query. split_once ( "::" ) {
565
565
Some ( ( krate, query) ) => ( krate. to_string ( ) , format ! ( "?search={query}" ) ) ,
566
566
None => ( query. clone ( ) , "" . to_string ( ) ) ,
567
567
} ;
568
568
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
+
569
583
// since we never pass a version into `match_version` here, we'll never get
570
584
// `MatchVersion::Exact`, so the distinction between `Exact` and `Semver` doesn't
571
585
// matter
@@ -884,6 +898,21 @@ mod tests {
884
898
} )
885
899
}
886
900
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
+
887
916
#[ test]
888
917
fn search_result_passes_cratesio_pagination_links ( ) {
889
918
wrapper ( |env| {
You can’t perform that action at this time.
0 commit comments