feat: Add route handler for file-specific commit diffs
1 file changed, 47 insertions(+), 0 deletions(-)
changed files
M routes/routes.go → routes/routes.go
@@ -347,6 +347,53 @@ return } } +// FileDiff shows the changes to a specific file in a commit +func (d *deps) FileDiff(w http.ResponseWriter, r *http.Request, params map[string]string) { + name := path.Join(params["category"], params["name"]) + if d.isNotAllowed(name) { + d.Write404(w) + return + } + ref := params["ref"] + filePath := strings.TrimSuffix(params["file"], "/") + + path, err := d.GetCleanPath(name) + if err != nil { + log.Printf("getcleanpath error: %v", err) + d.Write404(w) + return + } + + g, err := git.Open(path, ref) + if err != nil { + log.Printf("git open error: %v", err) + d.Write404(w) + return + } + + diff, err := g.DiffFile(filePath) + if err != nil { + log.Printf("git diff error: %v", err) + d.Write500(w) + return + } + + pageData := templates.PageData{ + Meta: d.c.Meta, + DisplayName: getDisplayName(name), + Name: name, + Ref: ref, + Description: getDescription(path), + Path: filePath, + Diff: diff.Diff, + } + + if err := templates.CommitPage(pageData, diff).Render(w); err != nil { + log.Printf("diff template: %s", err) + d.Write500(w) + } +} + func (d *deps) Refs(w http.ResponseWriter, r *http.Request, params map[string]string) { name := path.Join(params["category"], params["name"]) if d.isNotAllowed(name) {