Skip to content

Commit f133bb7

Browse files
nipunn1313Turbo87
authored andcommitted
cargo-registry-markdown: Support pkg_path_in_vcs in markdown renderer
1 parent b07754a commit f133bb7

File tree

4 files changed

+40
-13
lines changed

4 files changed

+40
-13
lines changed

cargo-registry-markdown/lib.rs

+25-12
Original file line numberDiff line numberDiff line change
@@ -245,18 +245,23 @@ static MARKDOWN_EXTENSIONS: [&str; 7] =
245245
/// use cargo_registry_markdown::text_to_html;
246246
///
247247
/// let text = "[Rust](https://rust-lang.org/) is an awesome *systems programming* language!";
248-
/// let rendered = text_to_html(text, "README.md", None);
248+
/// let rendered = text_to_html(text, "README.md", None, None);
249249
/// assert_eq!(rendered, "<p><a href=\"https://rust-lang.org/\" rel=\"nofollow noopener noreferrer\">Rust</a> is an awesome <em>systems programming</em> language!</p>\n");
250250
/// ```
251-
pub fn text_to_html(text: &str, path: &str, base_url: Option<&str>) -> String {
252-
let path = Path::new(path);
253-
let base_dir = path.parent().and_then(|p| p.to_str()).unwrap_or("");
254-
255-
if path.extension().is_none() {
251+
pub fn text_to_html(
252+
text: &str,
253+
readme_path_in_pkg: &str,
254+
base_url: Option<&str>,
255+
pkg_path_in_vcs: Option<&str>,
256+
) -> String {
257+
let path_in_vcs = Path::new(pkg_path_in_vcs.unwrap_or("")).join(readme_path_in_pkg);
258+
let base_dir = path_in_vcs.parent().and_then(|p| p.to_str()).unwrap_or("");
259+
260+
if path_in_vcs.extension().is_none() {
256261
return markdown_to_html(text, base_url, base_dir);
257262
}
258263

259-
if let Some(ext) = path.extension().and_then(|ext| ext.to_str()) {
264+
if let Some(ext) = path_in_vcs.extension().and_then(|ext| ext.to_str()) {
260265
if MARKDOWN_EXTENSIONS.contains(&ext.to_lowercase().as_str()) {
261266
return markdown_to_html(text, base_url, base_dir);
262267
}
@@ -477,30 +482,38 @@ mod tests {
477482
"s1/s2/readme.md",
478483
] {
479484
assert_eq!(
480-
text_to_html("*lobster*", f, None),
485+
text_to_html("*lobster*", f, None, None),
481486
"<p><em>lobster</em></p>\n"
482487
);
483488
}
484489

485490
assert_eq!(
486-
text_to_html("*[lobster](docs/lobster)*", "readme.md", Some("https://github.com/rust-lang/test")),
491+
text_to_html("*[lobster](docs/lobster)*", "readme.md", Some("https://github.com/rust-lang/test"), None),
487492
"<p><em><a href=\"https://github.com/rust-lang/test/blob/HEAD/docs/lobster\" rel=\"nofollow noopener noreferrer\">lobster</a></em></p>\n"
488493
);
489494
assert_eq!(
490-
text_to_html("*[lobster](docs/lobster)*", "s/readme.md", Some("https://github.com/rust-lang/test")),
495+
text_to_html("*[lobster](docs/lobster)*", "s/readme.md", Some("https://github.com/rust-lang/test"), None),
491496
"<p><em><a href=\"https://github.com/rust-lang/test/blob/HEAD/s/docs/lobster\" rel=\"nofollow noopener noreferrer\">lobster</a></em></p>\n"
492497
);
493498
assert_eq!(
494-
text_to_html("*[lobster](docs/lobster)*", "s1/s2/readme.md", Some("https://github.com/rust-lang/test")),
499+
text_to_html("*[lobster](docs/lobster)*", "s1/s2/readme.md", Some("https://github.com/rust-lang/test"), None),
495500
"<p><em><a href=\"https://github.com/rust-lang/test/blob/HEAD/s1/s2/docs/lobster\" rel=\"nofollow noopener noreferrer\">lobster</a></em></p>\n"
496501
);
502+
assert_eq!(
503+
text_to_html("*[lobster](docs/lobster)*", "s1/s2/readme.md", Some("https://github.com/rust-lang/test"), Some("path/in/vcs/")),
504+
"<p><em><a href=\"https://github.com/rust-lang/test/blob/HEAD/path/in/vcs/s1/s2/docs/lobster\" rel=\"nofollow noopener noreferrer\">lobster</a></em></p>\n"
505+
);
506+
assert_eq!(
507+
text_to_html("*[lobster](docs/lobster)*", "s1/s2/readme.md", Some("https://github.com/rust-lang/test"), Some("path/in/vcs")),
508+
"<p><em><a href=\"https://github.com/rust-lang/test/blob/HEAD/path/in/vcs/s1/s2/docs/lobster\" rel=\"nofollow noopener noreferrer\">lobster</a></em></p>\n"
509+
);
497510
}
498511

499512
#[test]
500513
fn text_to_html_renders_other_things() {
501514
for f in &["readme.exe", "readem.org", "blah.adoc"] {
502515
assert_eq!(
503-
text_to_html("<script>lobster</script>\n\nis my friend\n", f, None),
516+
text_to_html("<script>lobster</script>\n\nis my friend\n", f, None, None),
504517
"&lt;script&gt;lobster&lt;/script&gt;<br>\n<br>\nis my friend<br>\n"
505518
);
506519
}

src/admin/render_readmes.rs

+5
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,15 @@ fn render_pkg_readme<R: Read>(mut archive: Archive<R>, pkg_name: &str) -> anyhow
205205
let contents = find_file_by_path(&mut entries, Path::new(&path))
206206
.with_context(|| format!("Failed to read {} file", readme_path))?;
207207

208+
// pkg_path_in_vcs Unsupported from admin::render_readmes. See #4095
209+
// Would need access to cargo_vcs_info
210+
let pkg_path_in_vcs = None;
211+
208212
text_to_html(
209213
&contents,
210214
&readme_path,
211215
manifest.package.repository.as_deref(),
216+
pkg_path_in_vcs,
212217
)
213218
};
214219
return Ok(rendered);

src/controllers/krate/publish.rs

+3
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ pub fn publish(req: &mut dyn RequestExt) -> EndpointResult {
197197
let pkg_name = format!("{}-{}", krate.name, vers);
198198
verify_tarball(&pkg_name, &tarball, maximums.max_unpack_size)?;
199199

200+
let pkg_path_in_vcs = None;
201+
200202
if let Some(readme) = new_crate.readme {
201203
worker::render_and_upload_readme(
202204
version.id,
@@ -205,6 +207,7 @@ pub fn publish(req: &mut dyn RequestExt) -> EndpointResult {
205207
.readme_file
206208
.unwrap_or_else(|| String::from("README.md")),
207209
repo,
210+
pkg_path_in_vcs,
208211
)
209212
.enqueue(&conn)?;
210213
}

src/worker/readmes.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,17 @@ pub fn render_and_upload_readme(
1414
text: String,
1515
readme_path: String,
1616
base_url: Option<String>,
17+
pkg_path_in_vcs: Option<String>,
1718
) -> Result<(), PerformError> {
1819
use crate::schema::*;
1920
use diesel::prelude::*;
2021

21-
let rendered = text_to_html(&text, &readme_path, base_url.as_deref());
22+
let rendered = text_to_html(
23+
&text,
24+
&readme_path,
25+
base_url.as_deref(),
26+
pkg_path_in_vcs.as_deref(),
27+
);
2228

2329
conn.transaction(|| {
2430
Version::record_readme_rendering(version_id, conn)?;

0 commit comments

Comments
 (0)