all repos — elgit @ 59ba5ba7dd66f7bf537d1f17a9d588acce6b5e16

fork of legit: web frontend for git, written in go

feat: Add route handler for file-specific commit diffs

Alan Pearce
commit

59ba5ba7dd66f7bf537d1f17a9d588acce6b5e16

parent

13e02db54aaa6d9fc5198a884e6dd8b4bee7e13f

1 file changed, 47 insertions(+), 0 deletions(-)

changed files
M routes/routes.goroutes/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) {