#26 m6/readme-bug

mergedpassopened
details
branches
master ← m6/readme-bug
updated
id
cbb4c8a3-6287-4cc7-83a7-d90e6a28580f

Patch

src/build.rs+78 −3
diff --git a/src/build.rs b/src/build.rsindex 5083fa7..0cf0a67 100644--- 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-- 2.55.0

Comments (0)

No comments yet.

Reviews (0)

No reviews yet.

all pulls