#26 m6/readme-bug
Patch
src/build.rs+78 −3--- a/src/build.rs+++ b/src/build.rs@@ -147,8 +147,9 @@ pub fn resolve_clone_url(repo: &Path, flag: Option<&str>) -> Option<String> {147147 }148148 149149 /// README lookup chain (f0rge convention): repo-root `README.md` >150-/// `readme.md` > `README`, else `.forge/wiki/README.md` >151-/// `.forge/wiki/readme.md`, else none.150+/// `readme.md` > `README` > `readme`, else `.forge/wiki/README.md` >151+/// `.forge/wiki/readme.md` > `.forge/wiki/README` > `.forge/wiki/readme`,152+/// else none.152153 ///153154 /// Returns the winning path plus its blob.154155 pub fn find_readme(repo: &Path, branch: &str) -> Option<(String, gitx::Blob)> {@@ -156,8 +157,11 @@ pub fn find_readme(repo: &Path, branch: &str) -> Option<(String, gitx::Blob)> {156157 "README.md",157158 "readme.md",158159 "README",160+ "readme",159161 ".forge/wiki/README.md",160162 ".forge/wiki/readme.md",163+ ".forge/wiki/README",164+ ".forge/wiki/readme",161165 ] {162166 if let Ok(blob) = gitx::show(repo, branch, Path::new(candidate)) {163167 return Some((candidate.to_string(), blob));@@ -946,6 +950,78 @@ mod tests {946950 assert_eq!(path, "README.md");947951 }948952 953+ #[test]954+ fn readme_chain_shows_extensionless_wiki_readme() {955+ let dir = mktemp("readme-extless");956+ git(&dir, &["init", "-b", "main"]);957+ git(&dir, &["config", "user.name", "hu13-test"]);958+ git(&dir, &["config", "user.email", "[email protected]"]);959+ git(&dir, &["config", "commit.gpgsign", "false"]);960+ // Extensionless wiki README only (f0rge issue #35).961+ std::fs::create_dir_all(dir.join(".forge").join("wiki")).unwrap();962+ std::fs::write(963+ dir.join(".forge").join("wiki").join("README"),964+ "# Wiki extless\n",965+ )966+ .unwrap();967+ std::fs::write(dir.join("notes.txt"), "x\n").unwrap();968+ git(&dir, &["add", "-A"]);969+ git(&dir, &["commit", "-m", "wiki extless only"]);970+ let (path, _) = find_readme(&dir, "main").expect("wiki extless fallback");971+ assert_eq!(path, ".forge/wiki/README");972+ // Code tab renders it.973+ let out = mktemp("out-extless");974+ run_build(&dir, &out, &opts()).expect("build");975+ let index = std::fs::read_to_string(out.join("index.html")).expect("index");976+ assert!(index.contains("Wiki extless"), "code tab shows wiki README");977+ assert!(978+ index.contains("from <code>.forge/wiki/README</code>"),979+ "code tab names source"980+ );981+ }982+983+ #[test]984+ fn readme_chain_full_priority_order() {985+ let dir = mktemp("readme-priority");986+ git(&dir, &["init", "-b", "main"]);987+ git(&dir, &["config", "user.name", "hu13-test"]);988+ git(&dir, &["config", "user.email", "[email protected]"]);989+ git(&dir, &["config", "commit.gpgsign", "false"]);990+ let chain = [991+ "README.md",992+ "readme.md",993+ "README",994+ "readme",995+ ".forge/wiki/README.md",996+ ".forge/wiki/readme.md",997+ ".forge/wiki/README",998+ ".forge/wiki/readme",999+ ];1000+ std::fs::create_dir_all(dir.join(".forge").join("wiki")).unwrap();1001+ for (i, cand) in chain.iter().enumerate() {1002+ std::fs::write(dir.join(cand), format!("# marker {i}\n")).unwrap();1003+ }1004+ std::fs::write(dir.join("notes.txt"), "x\n").unwrap();1005+ git(&dir, &["add", "-A"]);1006+ git(&dir, &["commit", "-m", "all readmes"]);1007+ for (i, want) in chain.iter().enumerate() {1008+ let (path, blob) = find_readme(&dir, "main").expect("readme present");1009+ assert_eq!(&path, want, "priority position {i}");1010+ assert!(1011+ blob.display.contains(&format!("marker {i}")),1012+ "winning body at {want}"1013+ );1014+ // Root extensionless beats wiki once wiki-only remains.1015+ if *want == "readme" {1016+ let (p, _) = find_readme(&dir, "main").expect("root extless");1017+ assert_eq!(p, "readme");1018+ }1019+ git(&dir, &["rm", "-q", want]);1020+ git(&dir, &["commit", "-m", &format!("drop {want}")]);1021+ }1022+ assert!(find_readme(&dir, "main").is_none(), "none when chain empty");1023+ }1024+9491025 #[test]9501026 fn build_emits_commits_and_wiki() {9511027 let repo = fixture_repo();952--
Comments (0)
No comments yet.
Reviews (0)
No reviews yet.