Skip to content

Commit 049c3e7

Browse files
check that default-target had a working build before redirecting
1 parent d84959d commit 049c3e7

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/web/rustdoc.rs

+14-3
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,28 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult<Response> {
9999
// get target name
100100
// FIXME: This is a bit inefficient but allowing us to use less code in general
101101
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
103109
FROM releases
104110
INNER JOIN crates ON crates.id = releases.crate_id
105111
WHERE crates.name = $1 AND releases.version = $2",
106112
&[&crate_name, &version]));
107113
let row = query.get(0);
108114

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));
110117

111118
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+
}
113124
} else {
114125
target
115126
}

0 commit comments

Comments
 (0)