This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / repo / branches.go
2.4 kB 84 lines
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 "tangled.org/core/types" 12 xrpcclient "tangled.org/core/xrpc/xrpcclient" 13) 14 15func (rp *Repo) Branches(w http.ResponseWriter, r *http.Request) { 16 l := rp.logger.With("handler", "RepoBranches") 17 f, err := rp.repoResolver.Resolve(r) 18 if err != nil { 19 l.Error("failed to get repo and knot", "err", err) 20 return 21 } 22 xrpcc := rp.knotMirrorXRPCClient() 23 24 xrpcBytes, err := tangled.GitTempListBranches(r.Context(), xrpcc, "", 0, f.RepoDid) 25 if err != nil { 26 l.Error("failed to call XRPC repo.branches", "err", err) 27 rp.pages.Error503(w) 28 return 29 } 30 var result types.RepoBranchesResponse 31 if err := json.Unmarshal(xrpcBytes, &result); err != nil { 32 l.Error("failed to decode XRPC response", "err", err) 33 rp.pages.Error503(w) 34 return 35 } 36 sortBranches(result.Branches) 37 user := rp.oauth.GetMultiAccountUser(r) 38 rp.pages.RepoBranches(w, pages.RepoBranchesParams{ 39 BaseParams: pages.BaseParamsFromContext(r.Context()), 40 RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 41 RepoBranchesResponse: result, 42 }) 43} 44 45func (rp *Repo) DeleteBranch(w http.ResponseWriter, r *http.Request) { 46 l := rp.logger.With("handler", "DeleteBranch") 47 f, err := rp.repoResolver.Resolve(r) 48 if err != nil { 49 l.Error("failed to get repo and knot", "err", err) 50 return 51 } 52 noticeId := "delete-branch-error" 53 branch := r.FormValue("branch") 54 if branch == "" { 55 rp.pages.Notice(w, noticeId, "No branch provided.") 56 return 57 } 58 client, err := rp.oauth.ServiceClient( 59 r, 60 oauth.WithService(f.Knot), 61 oauth.WithLxm(tangled.RepoDeleteBranchNSID), 62 oauth.WithDev(rp.config.Core.Dev), 63 ) 64 if err != nil { 65 l.Warn("Failed to connect to knotserver", "err", err) 66 rp.pages.Notice(w, noticeId, "Failed to connect to knotserver") 67 return 68 } 69 err = tangled.RepoDeleteBranch( 70 r.Context(), 71 client, 72 &tangled.RepoDeleteBranch_Input{ 73 Branch: branch, 74 Repo: f.RepoAt().String(), 75 }, 76 ) 77 if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { 78 l.Error("Failed to delete branch", "xrpcerr", xrpcerr, "err", err) 79 rp.pages.Notice(w, noticeId, fmt.Sprintf("Failed to delete branch: %s", xrpcerr)) 80 return 81 } 82 l.Error("deleted branch from knot", "branch", branch, "repo", f.RepoAt()) 83 rp.pages.HxRefresh(w) 84}