Skip to content

Commit 9f1a0c2

Browse files
committed
fix regression in source views when releases.files is NULL
This fixes https://sentry.io/organizations/rust-lang/issues/3796296974/ where we previouly converted any error into `None`, which was converted into `Nope::ResourceNotFound` for the whole source page. This fix re-introduces this behavior and makes it more explicit
1 parent 013508c commit 9f1a0c2

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

src/web/source.rs

+35-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ impl FileList {
9191
None => return Ok(None),
9292
};
9393

94-
let files: Value = row.try_get(5)?;
94+
let files = if let Some(files) = row.try_get::<_, Option<Value>>(5)? {
95+
files
96+
} else {
97+
return Ok(None);
98+
};
9599

96100
let mut file_list = Vec::new();
97101
if let Some(files) = files.as_array() {
@@ -306,6 +310,7 @@ mod tests {
306310
use crate::test::*;
307311
use crate::web::cache::CachePolicy;
308312
use kuchiki::traits::TendrilSink;
313+
use reqwest::StatusCode;
309314
use test_case::test_case;
310315

311316
fn get_file_list_links(body: &str) -> Vec<String> {
@@ -368,6 +373,35 @@ mod tests {
368373
});
369374
}
370375

376+
#[test_case(true)]
377+
#[test_case(false)]
378+
fn empty_file_list_dont_break_the_view(archive_storage: bool) {
379+
wrapper(|env| {
380+
let release_id = env
381+
.fake_release()
382+
.archive_storage(archive_storage)
383+
.name("fake")
384+
.version("0.1.0")
385+
.source_file("README.md", b"hello")
386+
.create()?;
387+
388+
let path = "/crate/fake/0.1.0/source/README.md";
389+
let web = env.frontend();
390+
assert_success(path, web)?;
391+
392+
env.db().conn().execute(
393+
"UPDATE releases
394+
SET files = NULL
395+
WHERE id = $1",
396+
&[&release_id],
397+
)?;
398+
399+
assert_eq!(web.get(path).send()?.status(), StatusCode::NOT_FOUND);
400+
401+
Ok(())
402+
});
403+
}
404+
371405
#[test]
372406
fn latest_contains_links_to_latest() {
373407
wrapper(|env| {

0 commit comments

Comments
 (0)