Skip to content

Commit 89dc057

Browse files
committed
Support admin render_readme with Cargo.toml without optional readme field
1 parent 2c1ba64 commit 89dc057

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed

src/admin/render_readmes.rs

+42-8
Original file line numberDiff line numberDiff line change
@@ -204,18 +204,22 @@ fn render_pkg_readme<R: Read>(mut pkg: Archive<R>, pkg_name: &str) -> Option<Str
204204
.unwrap_or_else(|_| panic!("[{}] Invalid tar archive entries", pkg_name));
205205
let manifest: Manifest = {
206206
let path = format!("{}/Cargo.toml", pkg_name);
207-
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name);
207+
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name).unwrap();
208208
toml::from_str(&contents)
209209
.unwrap_or_else(|_| panic!("[{}] Syntax error in manifest file", pkg_name))
210210
};
211211

212212
let rendered = {
213-
let readme_path = manifest.package.readme.as_ref()?;
213+
let readme_path = manifest
214+
.package
215+
.readme
216+
.clone()
217+
.unwrap_or("README.md".into());
214218
let path = format!("{}/{}", pkg_name, readme_path);
215-
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name);
219+
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name)?;
216220
text_to_html(
217221
&contents,
218-
readme_path,
222+
&readme_path,
219223
manifest.package.repository.as_deref(),
220224
)
221225
};
@@ -238,7 +242,7 @@ fn find_file_by_path<R: Read>(
238242
entries: &mut tar::Entries<'_, R>,
239243
path: &Path,
240244
pkg_name: &str,
241-
) -> String {
245+
) -> Option<String> {
242246
let mut file = entries
243247
.find(|entry| match *entry {
244248
Err(_) => false,
@@ -249,13 +253,12 @@ fn find_file_by_path<R: Read>(
249253
};
250254
filepath == path
251255
}
252-
})
253-
.unwrap_or_else(|| panic!("[{}] couldn't open file: {}", pkg_name, path.display()))
256+
})?
254257
.unwrap_or_else(|_| panic!("[{}] file is not present: {}", pkg_name, path.display()));
255258
let mut contents = String::new();
256259
file.read_to_string(&mut contents)
257260
.unwrap_or_else(|_| panic!("[{}] Couldn't read file contents", pkg_name));
258-
contents
261+
Some(contents)
259262
}
260263

261264
#[cfg(test)]
@@ -290,6 +293,37 @@ readme = "README.md"
290293
assert!(result.contains("readme"))
291294
}
292295

296+
#[test]
297+
fn test_render_pkg_no_readme() {
298+
let mut pkg = tar::Builder::new(vec![]);
299+
add_file(
300+
&mut pkg,
301+
"foo-0.0.1/Cargo.toml",
302+
br#"
303+
[package]
304+
"#,
305+
);
306+
let serialized_archive = pkg.into_inner().unwrap();
307+
assert!(render_pkg_readme(tar::Archive::new(&*serialized_archive), "foo-0.0.1").is_none());
308+
}
309+
310+
#[test]
311+
fn test_render_pkg_implicit_readme() {
312+
let mut pkg = tar::Builder::new(vec![]);
313+
add_file(
314+
&mut pkg,
315+
"foo-0.0.1/Cargo.toml",
316+
br#"
317+
[package]
318+
"#,
319+
);
320+
add_file(&mut pkg, "foo-0.0.1/README.md", b"readme");
321+
let serialized_archive = pkg.into_inner().unwrap();
322+
let result =
323+
render_pkg_readme(tar::Archive::new(&*serialized_archive), "foo-0.0.1").unwrap();
324+
assert!(result.contains("readme"))
325+
}
326+
293327
#[test]
294328
fn test_render_pkg_readme_w_link() {
295329
let mut pkg = tar::Builder::new(vec![]);

0 commit comments

Comments
 (0)