Monorepo for Tangled
at 62df028f2b0cc9f1d32515aed04d65473249c734 94 lines 2.5 kB view raw
1package repo 2 3import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 8 "tangled.org/core/api/tangled" 9 "tangled.org/core/appview/oauth" 10 "tangled.org/core/appview/pages" 11 xrpcclient "tangled.org/core/appview/xrpcclient" 12 "tangled.org/core/types" 13 14 indigoxrpc "github.com/bluesky-social/indigo/xrpc" 15) 16 17func (rp *Repo) Branches(w http.ResponseWriter, r *http.Request) { 18 l := rp.logger.With("handler", "RepoBranches") 19 f, err := rp.repoResolver.Resolve(r) 20 if err != nil { 21 l.Error("failed to get repo and knot", "err", err) 22 return 23 } 24 scheme := "http" 25 if !rp.config.Core.Dev { 26 scheme = "https" 27 } 28 host := fmt.Sprintf("%s://%s", scheme, f.Knot) 29 xrpcc := &indigoxrpc.Client{ 30 Host: host, 31 } 32 xrpcBytes, err := tangled.RepoBranches(r.Context(), xrpcc, "", 0, f.RepoIdentifier()) 33 if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { 34 l.Error("failed to call XRPC repo.branches", "err", xrpcerr) 35 rp.pages.Error503(w) 36 return 37 } 38 var result types.RepoBranchesResponse 39 if err := json.Unmarshal(xrpcBytes, &result); err != nil { 40 l.Error("failed to decode XRPC response", "err", err) 41 rp.pages.Error503(w) 42 return 43 } 44 sortBranches(result.Branches) 45 user := rp.oauth.GetMultiAccountUser(r) 46 rp.pages.RepoBranches(w, pages.RepoBranchesParams{ 47 LoggedInUser: user, 48 RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 49 RepoBranchesResponse: result, 50 }) 51} 52 53func (rp *Repo) DeleteBranch(w http.ResponseWriter, r *http.Request) { 54 l := rp.logger.With("handler", "DeleteBranch") 55 f, err := rp.repoResolver.Resolve(r) 56 if err != nil { 57 l.Error("failed to get repo and knot", "err", err) 58 return 59 } 60 noticeId := "delete-branch-error" 61 fail := func(msg string, err error) { 62 l.Error(msg, "err", err) 63 rp.pages.Notice(w, noticeId, msg) 64 } 65 branch := r.FormValue("branch") 66 if branch == "" { 67 fail("No branch provided.", nil) 68 return 69 } 70 client, err := rp.oauth.ServiceClient( 71 r, 72 oauth.WithService(f.Knot), 73 oauth.WithLxm(tangled.RepoDeleteBranchNSID), 74 oauth.WithDev(rp.config.Core.Dev), 75 ) 76 if err != nil { 77 fail("Failed to connect to knotserver", nil) 78 return 79 } 80 err = tangled.RepoDeleteBranch( 81 r.Context(), 82 client, 83 &tangled.RepoDeleteBranch_Input{ 84 Branch: branch, 85 Repo: f.RepoAt().String(), 86 }, 87 ) 88 if err := xrpcclient.HandleXrpcErr(err); err != nil { 89 fail(fmt.Sprintf("Failed to delete branch: %s", err), err) 90 return 91 } 92 l.Error("deleted branch from knot", "branch", branch, "repo", f.RepoAt()) 93 rp.pages.HxRefresh(w) 94}