Monorepo for Tangled tangled.org
6

Configure Feed

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

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