Monorepo for Tangled
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}