···617617 r.Get("/commit/{ref}", s.RepoCommit)618618 r.Get("/branches", s.RepoBranches)619619 r.Get("/tags", s.RepoTags)620620+ r.Get("/blob/{ref}/*", s.RepoBlob)620621621622 // These routes get proxied to the knot622623 r.Get("/info/refs", s.InfoRefs)
+4-20
knotserver/file.go
···4343 }4444}45454646-func (h *Handle) showFile(content string, data map[string]any, w http.ResponseWriter, l *slog.Logger) {4747- lc, err := countLines(strings.NewReader(content))4646+func (h *Handle) showFile(resp types.RepoBlobResponse, w http.ResponseWriter, l *slog.Logger) {4747+ lc, err := countLines(strings.NewReader(resp.Contents))4848 if err != nil {4949 // Non-fatal, we'll just skip showing line numbers in the template.5050 l.Warn("counting lines", "error", err)5151 }52525353- lines := make([]int, lc)5454- if lc > 0 {5555- for i := range lines {5656- lines[i] = i + 15757- }5858- }5959-6060- data["linecount"] = lines6161- data["content"] = content6262-6363- writeJSON(w, data)6464- return6565-}6666-6767-func (h *Handle) showRaw(content string, w http.ResponseWriter) {6868- w.WriteHeader(http.StatusOK)6969- w.Header().Set("Content-Type", "text/plain")7070- w.Write([]byte(content))5353+ resp.Lines = lc5454+ writeJSON(w, resp)7155 return7256}