@@ -99,17 +99,28 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult<Response> {
99
99
// get target name
100
100
// FIXME: This is a bit inefficient but allowing us to use less code in general
101
101
let target_name: String = {
102
- let query = ctry ! ( conn. query( "SELECT target_name, default_target
102
+ fn targets_contains ( doc_targets : & Json , default_target : & str ) -> bool {
103
+ doc_targets. as_array ( ) . map_or ( false , |tgts| {
104
+ tgts. iter ( ) . any ( |t| t. as_string ( ) == Some ( default_target) )
105
+ } )
106
+ }
107
+
108
+ let query = ctry ! ( conn. query( "SELECT target_name, default_target, doc_targets
103
109
FROM releases
104
110
INNER JOIN crates ON crates.id = releases.crate_id
105
111
WHERE crates.name = $1 AND releases.version = $2" ,
106
112
& [ & crate_name, & version] ) ) ;
107
113
let row = query. get ( 0 ) ;
108
114
109
- let ( target, default) : ( String , Option < String > ) = ( row. get ( 0 ) , row. get ( 1 ) ) ;
115
+ let ( target, default, doc_targets) : ( String , Option < String > , Json ) =
116
+ ( row. get ( 0 ) , row. get ( 1 ) , row. get ( 2 ) ) ;
110
117
111
118
if let Some ( default) = default {
112
- format ! ( "{}/{}" , default , target)
119
+ if targets_contains ( & doc_targets, & default) {
120
+ format ! ( "{}/{}" , default , target)
121
+ } else {
122
+ target
123
+ }
113
124
} else {
114
125
target
115
126
}
0 commit comments