From 97dfcc057575820a2688f7087ba7a0e4f7552d4c Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 10 Feb 2025 15:58:59 +0800 Subject: render_readme: Abstract away README rendering --- handle_repo_index.go | 23 +---------------------- handle_repo_tree.go | 20 +------------------- render_readme.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 41 deletions(-) create mode 100644 render_readme.go diff --git a/handle_repo_index.go b/handle_repo_index.go index 44ba481..8fe6b8d 100644 --- a/handle_repo_index.go +++ b/handle_repo_index.go @@ -1,15 +1,11 @@ package main import ( - "bytes" - "html/template" "net/http" "path/filepath" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing/object" - "github.com/microcosm-cc/bluemonday" - "github.com/yuin/goldmark" ) func handle_repo_index(w http.ResponseWriter, r *http.Request) { @@ -55,24 +51,7 @@ func handle_repo_index(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("Error getting file tree: " + err.Error())) return } - readme_file, err := tree.File("README.md") - if err != nil { - data["readme"] = "There is no README for this repository." - } else { - readme_file_contents, err := readme_file.Contents() - if err != nil { - data["readme"] = "There is no README for this repository." - } else { - var readme_rendered_unsafe bytes.Buffer - err = goldmark.Convert([]byte(readme_file_contents), &readme_rendered_unsafe) - if err != nil { - readme_rendered_unsafe.WriteString("Unable to render README: " + err.Error()) - return - } - readme_rendered_safe := template.HTML(bluemonday.UGCPolicy().SanitizeBytes(readme_rendered_unsafe.Bytes())) - data["readme"] = readme_rendered_safe - } - } + data["readme"] = render_readme_at_tree(tree) display_git_tree := make([]display_git_tree_entry_t, 0) for _, entry := range tree.Entries { diff --git a/handle_repo_tree.go b/handle_repo_tree.go index ea596b5..917b79b 100644 --- a/handle_repo_tree.go +++ b/handle_repo_tree.go @@ -12,8 +12,6 @@ import ( chroma_styles "github.com/alecthomas/chroma/v2/styles" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" - "github.com/microcosm-cc/bluemonday" - "github.com/yuin/goldmark" ) func handle_repo_tree(w http.ResponseWriter, r *http.Request) { @@ -83,23 +81,7 @@ func handle_repo_tree(w http.ResponseWriter, r *http.Request) { return } - readme_file, err := target.File("README.md") - if err != nil { - data["readme"] = "There is no README for this directory." - } else { - readme_file_contents, err := readme_file.Contents() - if err != nil { - data["readme"] = "There is no README for this directory." - } else { - var readme_rendered_unsafe bytes.Buffer - err = goldmark.Convert([]byte(readme_file_contents), &readme_rendered_unsafe) - if err != nil { - readme_rendered_unsafe.WriteString("Unable to render README: " + err.Error()) - } - readme_rendered_safe := template.HTML(bluemonday.UGCPolicy().SanitizeBytes(readme_rendered_unsafe.Bytes())) - data["readme"] = readme_rendered_safe - } - } + data["readme"] = render_readme_at_tree(tree) display_git_tree := make([]display_git_tree_entry_t, 0) for _, entry := range target.Entries { diff --git a/render_readme.go b/render_readme.go new file mode 100644 index 0000000..21e0aeb --- /dev/null +++ b/render_readme.go @@ -0,0 +1,28 @@ +package main + +import ( + "bytes" + "html/template" + + "github.com/go-git/go-git/v5/plumbing/object" + "github.com/microcosm-cc/bluemonday" + "github.com/yuin/goldmark" +) + + +func render_readme_at_tree(tree *object.Tree) any { + readme_file, err := tree.File("README.md") + if err != nil { + return "There is no README available." + } + readme_file_contents, err := readme_file.Contents() + if err != nil { + return "Unable to fetch contents of README: " + err.Error() + } + var readme_rendered_unsafe bytes.Buffer + err = goldmark.Convert([]byte(readme_file_contents), &readme_rendered_unsafe) + if err != nil { + return "Unable to render README: " + err.Error() + } + return template.HTML(bluemonday.UGCPolicy().SanitizeBytes(readme_rendered_unsafe.Bytes())) +} -- cgit v1.2.3