Skip to content

Commit 6d22138

Browse files
nipunn1313Turbo87
authored andcommitted
Support admin render_readme with Cargo.toml without optional readme field
1 parent 489fcb6 commit 6d22138

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed

src/admin/render_readmes.rs

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -203,18 +203,22 @@ fn render_pkg_readme<R: Read>(mut archive: Archive<R>, pkg_name: &str) -> Option
203203

204204
let manifest: Manifest = {
205205
let path = format!("{}/Cargo.toml", pkg_name);
206-
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name);
206+
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name).unwrap();
207207
toml::from_str(&contents)
208208
.unwrap_or_else(|_| panic!("[{}] Syntax error in manifest file", pkg_name))
209209
};
210210

211211
let rendered = {
212-
let readme_path = manifest.package.readme.as_ref()?;
212+
let readme_path = manifest
213+
.package
214+
.readme
215+
.clone()
216+
.unwrap_or_else(|| "README.md".into());
213217
let path = format!("{}/{}", pkg_name, readme_path);
214-
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name);
218+
let contents = find_file_by_path(&mut entries, Path::new(&path), pkg_name)?;
215219
text_to_html(
216220
&contents,
217-
readme_path,
221+
&readme_path,
218222
manifest.package.repository.as_deref(),
219223
)
220224
};
@@ -237,7 +241,7 @@ fn find_file_by_path<R: Read>(
237241
entries: &mut tar::Entries<'_, R>,
238242
path: &Path,
239243
pkg_name: &str,
240-
) -> String {
244+
) -> Option<String> {
241245
let mut file = entries
242246
.find(|entry| match *entry {
243247
Err(_) => false,
@@ -248,14 +252,13 @@ fn find_file_by_path<R: Read>(
248252
};
249253
filepath == path
250254
}
251-
})
252-
.unwrap_or_else(|| panic!("[{}] couldn't open file: {}", pkg_name, path.display()))
255+
})?
253256
.unwrap_or_else(|_| panic!("[{}] file is not present: {}", pkg_name, path.display()));
254257

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)