This repository has no description
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}