1package xrpc
2
3import (
4 "net/http"
5
6 "tangled.sh/tangled.sh/core/knotserver/git"
7 "tangled.sh/tangled.sh/core/types"
8 xrpcerr "tangled.sh/tangled.sh/core/xrpc/errors"
9)
10
11func (x *Xrpc) RepoDiff(w http.ResponseWriter, r *http.Request) {
12 repo := r.URL.Query().Get("repo")
13 repoPath, err := x.parseRepoParam(repo)
14 if err != nil {
15 writeError(w, err.(xrpcerr.XrpcError), http.StatusBadRequest)
16 return
17 }
18
19 ref := r.URL.Query().Get("ref")
20 // ref can be empty (git.Open handles this)
21
22 gr, err := git.Open(repoPath, ref)
23 if err != nil {
24 writeError(w, xrpcerr.RefNotFoundError, http.StatusNotFound)
25 return
26 }
27
28 diff, err := gr.Diff()
29 if err != nil {
30 x.Logger.Error("getting diff", "error", err.Error())
31 writeError(w, xrpcerr.RefNotFoundError, http.StatusInternalServerError)
32 return
33 }
34
35 response := types.RepoCommitResponse{
36 Ref: ref,
37 Diff: diff,
38 }
39
40 writeJson(w, response)
41}