diff options
author | Runxi Yu <me@runxiyu.org> | 2025-04-05 17:21:14 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-04-05 17:21:14 +0800 |
commit | 9b17278aece47aca17d32a37f67b7078708e78be (patch) | |
tree | 8badae3ed3e9594fae3f9de6e23468165a69e5d4 /http_handle_repo_index.go | |
parent | Remove the extra .gitignore in man/ (diff) | |
download | forge-9b17278aece47aca17d32a37f67b7078708e78be.tar.gz forge-9b17278aece47aca17d32a37f67b7078708e78be.tar.zst forge-9b17278aece47aca17d32a37f67b7078708e78be.zip |
Refactor git2d comms to ./git2c
Diffstat (limited to 'http_handle_repo_index.go')
-rw-r--r-- | http_handle_repo_index.go | 71 |
1 files changed, 8 insertions, 63 deletions
diff --git a/http_handle_repo_index.go b/http_handle_repo_index.go index 8f0a62b..182b5df 100644 --- a/http_handle_repo_index.go +++ b/http_handle_repo_index.go @@ -4,15 +4,10 @@ package main import ( - "encoding/hex" - "errors" - "fmt" - "io" - "net" "net/http" "strings" - "git.sr.ht/~sircmpwn/go-bare" + "go.lindenii.runxiyu.org/forge/git2c" ) type commitDisplay struct { @@ -35,72 +30,22 @@ func httpHandleRepoIndex(w http.ResponseWriter, req *http.Request, params map[st notes = append(notes, "Path contains newlines; HTTP Git access impossible") } - conn, err := net.Dial("unix", config.Git.Socket) + client, err := git2c.NewClient(config.Git.Socket) if err != nil { - errorPage500(w, params, "git2d connection failed: "+err.Error()) + errorPage500(w, params, err.Error()) return } - defer conn.Close() + defer client.Close() - writer := bare.NewWriter(conn) - reader := bare.NewReader(conn) - - if err := writer.WriteData(stringToBytes(repoPath)); err != nil { - errorPage500(w, params, "sending repo path failed: "+err.Error()) - return - } - - if err := writer.WriteUint(1); err != nil { - errorPage500(w, params, "sending command failed: "+err.Error()) - return - } - - status, err := reader.ReadUint() + commits, readme, err := client.Cmd1(repoPath) if err != nil { - errorPage500(w, params, "reading status failed: "+err.Error()) - return - } - if status != 0 { - errorPage500(w, params, fmt.Sprintf("git2d error: %d", status)) + errorPage500(w, params, err.Error()) return } - // README - readmeRaw, err := reader.ReadData() - if err != nil { - readmeRaw = nil - } - readmeFilename, readmeRendered := renderReadme(readmeRaw, "README.md") - - // Commits - var commits []commitDisplay - for { - id, err := reader.ReadData() - if err != nil { - if errors.Is(err, io.EOF) { - break - } - errorPage500(w, params, "error reading commit ID: "+err.Error()) - return - } - - title, _ := reader.ReadData() - authorName, _ := reader.ReadData() - authorEmail, _ := reader.ReadData() - authorDate, _ := reader.ReadData() - - commits = append(commits, commitDisplay{ - Hash: hex.EncodeToString(id), - Author: bytesToString(authorName), - Email: bytesToString(authorEmail), - Date: bytesToString(authorDate), - Message: bytesToString(title), - }) - } - params["commits"] = commits - params["readme_filename"] = readmeFilename - params["readme"] = readmeRendered + params["readme_filename"] = readme.Filename + _, params["readme"] = renderReadme(readme.Content, readme.Filename) params["notes"] = notes renderTemplate(w, "repo_index", params) |