Monorepo for Tangled
at 8817c3ca119d07abef6871d2bd3d967e92e9bf20 49 lines 1.0 kB view raw
1package xrpc 2 3import ( 4 "net/http" 5 "strconv" 6 7 "tangled.org/core/knotserver/git" 8 "tangled.org/core/types" 9 xrpcerr "tangled.org/core/xrpc/errors" 10) 11 12func (x *Xrpc) RepoBranches(w http.ResponseWriter, r *http.Request) { 13 repo := r.URL.Query().Get("repo") 14 repoPath, err := x.parseRepoParam(repo) 15 if err != nil { 16 writeError(w, err.(xrpcerr.XrpcError), http.StatusBadRequest) 17 return 18 } 19 20 // default 21 limit := 50 22 offset := 0 23 24 if l, err := strconv.Atoi(r.URL.Query().Get("limit")); err == nil && l > 0 && l <= 100 { 25 limit = l 26 } 27 28 if o, err := strconv.Atoi(r.URL.Query().Get("cursor")); err == nil && o > 0 { 29 offset = o 30 } 31 32 gr, err := git.PlainOpen(repoPath) 33 if err != nil { 34 writeError(w, xrpcerr.RepoNotFoundError, http.StatusNoContent) 35 return 36 } 37 38 branches, _ := gr.Branches(&git.BranchesOptions{ 39 Limit: limit, 40 Offset: offset, 41 }) 42 43 // Create response using existing types.RepoBranchesResponse 44 response := types.RepoBranchesResponse{ 45 Branches: branches, 46 } 47 48 writeJson(w, response) 49}