From cac176daa985b032f08758ae54c83eea659f9bc3 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Tue, 11 Feb 2025 19:04:05 +0800 Subject: repo_commit: Add a commit info page --- handle_repo_commit.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 handle_repo_commit.go (limited to 'handle_repo_commit.go') diff --git a/handle_repo_commit.go b/handle_repo_commit.go new file mode 100644 index 0000000..c7bdf9f --- /dev/null +++ b/handle_repo_commit.go @@ -0,0 +1,53 @@ +package main + +import ( + "net/http" + + "github.com/go-git/go-git/v5/plumbing" +) + +func handle_repo_commit(w http.ResponseWriter, r *http.Request) { + data := make(map[string]any) + // TODO: Sanitize path values + group_name, repo_name, commit_id_string := r.PathValue("group_name"), r.PathValue("repo_name"), r.PathValue("commit_id") + data["group_name"], data["repo_name"], data["commit_id"] = group_name, repo_name, commit_id_string + repo, err := open_git_repo(group_name, repo_name) + if err != nil { + _, _ = w.Write([]byte("Error opening repo: " + err.Error())) + return + } + commit_id := plumbing.NewHash(commit_id_string) + commit_object, err := repo.CommitObject(commit_id) + if err != nil { + _, _ = w.Write([]byte("Error getting commit object: " + err.Error())) + return + } + data["commit_object"] = commit_object + + parent_commit_object, err := commit_object.Parent(0) + if err != nil { + _, _ = w.Write([]byte("Error getting parent commit object: " + err.Error())) + return + } + data["parent_commit_object"] = parent_commit_object + + patch, err := parent_commit_object.Patch(commit_object) + if err != nil { + _, _ = w.Write([]byte("Error getting patch of commit: " + err.Error())) + return + } + data["patch"] = patch + + /* + for _, file_patch := range patch.FilePatches() { + for _, chunk := range file_patch.Chunks() { + } + } + */ + + err = templates.ExecuteTemplate(w, "repo_commit", data) + if err != nil { + _, _ = w.Write([]byte("Error rendering template: " + err.Error())) + return + } +} -- cgit v1.2.3