forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 863 B view raw
1package xrpc 2 3import ( 4 "net/http" 5 6 "tangled.org/core/knotserver/git" 7 "tangled.org/core/types" 8 xrpcerr "tangled.org/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}