Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2

appview: fixes for xrpc migration

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li d73d335b f76a9d68

verified
+35 -68
+3 -1
appview/pages/templates/repo/settings/general.html
··· 8 8 <div class="col-span-1 md:col-span-3 flex flex-col gap-6 p-2"> 9 9 {{ template "branchSettings" . }} 10 10 {{ template "deleteRepo" . }} 11 + <div id="operation-error" class="text-red-500 dark:text-red-400"></div> 11 12 </div> 12 13 </section> 13 14 {{ end }} ··· 23 22 unless you specify a different branch. 24 23 </p> 25 24 </div> 26 - <form hx-put="/{{ $.RepoInfo.FullName }}/settings/branches/default" class="col-span-1 md:col-span-1 md:justify-self-end group flex gap-2 items-stretch"> 25 + <form hx-put="/{{ $.RepoInfo.FullName }}/settings/branches/default" hx-swap="none" class="col-span-1 md:col-span-1 md:justify-self-end group flex gap-2 items-stretch"> 27 26 <select id="branch" name="branch" required class="p-1 max-w-64 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700"> 28 27 <option value="" disabled selected > 29 28 Choose a default branch ··· 55 54 <button 56 55 class="btn group text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 flex gap-2 items-center" 57 56 type="button" 57 + hx-swap="none" 58 58 hx-delete="/{{ $.RepoInfo.FullName }}/settings/delete" 59 59 hx-confirm="Are you sure you want to delete {{ $.RepoInfo.FullName }}?"> 60 60 {{ i "trash-2" "size-4" }}
+19 -43
appview/pulls/pulls.go
··· 19 19 "tangled.sh/tangled.sh/core/appview/pages" 20 20 "tangled.sh/tangled.sh/core/appview/pages/markup" 21 21 "tangled.sh/tangled.sh/core/appview/reporesolver" 22 + "tangled.sh/tangled.sh/core/appview/xrpcclient" 22 23 "tangled.sh/tangled.sh/core/idresolver" 23 24 "tangled.sh/tangled.sh/core/knotclient" 24 25 "tangled.sh/tangled.sh/core/patchutil" ··· 29 28 "github.com/bluekeyes/go-gitdiff/gitdiff" 30 29 comatproto "github.com/bluesky-social/indigo/api/atproto" 31 30 lexutil "github.com/bluesky-social/indigo/lex/util" 31 + indigoxrpc "github.com/bluesky-social/indigo/xrpc" 32 32 "github.com/go-chi/chi/v5" 33 33 "github.com/google/uuid" 34 34 ) ··· 220 218 return types.MergeCheckResponse{} 221 219 } 222 220 223 - client, err := s.oauth.ServiceClient( 224 - r, 225 - oauth.WithService(f.Knot), 226 - oauth.WithLxm(tangled.RepoMergeCheckNSID), 227 - oauth.WithDev(s.config.Core.Dev), 228 - ) 229 - if err != nil { 230 - log.Printf("failed to connect to knot server: %v", err) 231 - return types.MergeCheckResponse{ 232 - Error: "failed to check merge status: could not connect to knot server", 233 - } 221 + scheme := "https" 222 + if s.config.Core.Dev { 223 + scheme = "http" 224 + } 225 + host := fmt.Sprintf("%s://%s", scheme, f.Knot) 226 + 227 + xrpcc := indigoxrpc.Client{ 228 + Host: host, 234 229 } 235 230 236 231 patch := pull.LatestPatch() ··· 892 893 Repo: fork.RepoAt().String(), 893 894 }, 894 895 ) 895 - if err != nil { 896 - xe, parseErr := xrpcerr.Unmarshal(err.Error()) 897 - if parseErr != nil { 898 - log.Printf("failed to create hidden ref: %v", err) 899 - s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") 900 - } else { 901 - log.Printf("failed to create hidden ref: %s", xe.Error()) 902 - if xe.Tag == "AccessControl" { 903 - s.pages.Notice(w, "pull", "Branch based pull requests are not supported on this knot.") 904 - } else { 905 - s.pages.Notice(w, "pull", fmt.Sprintf("Failed to create pull request: %s", xe.Message)) 906 - } 907 - } 896 + if err := xrpcclient.HandleXrpcErr(err); err != nil { 897 + s.pages.Notice(w, "pull", err.Error()) 908 898 return 909 899 } 910 900 ··· 1489 1501 Repo: forkRepo.RepoAt().String(), 1490 1502 }, 1491 1503 ) 1492 - if err != nil || !resp.Success { 1493 - if err != nil { 1494 - log.Printf("failed to update tracking branch: %s", err) 1495 - } else { 1496 - log.Printf("failed to update tracking branch: success=false") 1497 - } 1498 - s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") 1504 + if err := xrpcclient.HandleXrpcErr(err); err != nil { 1505 + s.pages.Notice(w, "resubmit-error", err.Error()) 1506 + return 1507 + } 1508 + if !resp.Success { 1509 + log.Println("Failed to update tracking ref.", "err", resp.Error) 1510 + s.pages.Notice(w, "resubmit-error", "Failed to update tracking ref.") 1499 1511 return 1500 1512 } 1501 1513 ··· 1920 1932 } 1921 1933 1922 1934 patch := pullsToMerge.CombinedPatch() 1923 - 1924 - client, err := s.oauth.ServiceClient( 1925 - r, 1926 - oauth.WithService(f.Knot), 1927 - oauth.WithLxm(tangled.RepoMergeNSID), 1928 - oauth.WithDev(s.config.Core.Dev), 1929 - ) 1930 - if err != nil { 1931 - log.Printf("failed to connect to knot server: %v", err) 1932 - s.pages.Notice(w, "pull-merge-error", "Failed to merge pull request. Try again later.") 1933 - return 1934 - } 1935 1935 1936 1936 ident, err := s.idResolver.ResolveIdent(r.Context(), pull.OwnerDid) 1937 1937 if err != nil {
+13 -24
appview/repo/repo.go
··· 930 930 func (rp *Repo) DeleteRepo(w http.ResponseWriter, r *http.Request) { 931 931 user := rp.oauth.GetUser(r) 932 932 933 + noticeId := "operation-error" 933 934 f, err := rp.repoResolver.Resolve(r) 934 935 if err != nil { 935 936 log.Println("failed to get repo and knot", err) ··· 950 949 }) 951 950 if err != nil { 952 951 log.Printf("failed to delete record: %s", err) 953 - rp.pages.Notice(w, "settings-delete", "Failed to delete repository from PDS.") 952 + rp.pages.Notice(w, noticeId, "Failed to delete repository from PDS.") 954 953 return 955 954 } 956 955 log.Println("removed repo record ", f.RepoAt().String()) ··· 974 973 Name: f.Name, 975 974 }, 976 975 ) 977 - if err != nil { 978 - xe, parseErr := xrpcerr.Unmarshal(err.Error()) 979 - if parseErr != nil { 980 - log.Printf("failed to delete repo from knot %s: %s", f.Knot, err) 981 - } else { 982 - log.Printf("failed to delete repo from knot %s: %s", f.Knot, xe.Error()) 983 - } 984 - // Continue anyway since we want to clean up local state 985 - } else { 986 - log.Println("removed repo from knot ", f.Knot) 976 + if err := xrpcclient.HandleXrpcErr(err); err != nil { 977 + rp.pages.Notice(w, noticeId, err.Error()) 978 + return 987 979 } 980 + log.Println("deleted repo from knot") 988 981 989 982 tx, err := rp.db.BeginTx(r.Context(), nil) 990 983 if err != nil { ··· 997 1002 // remove collaborator RBAC 998 1003 repoCollaborators, err := rp.enforcer.E.GetImplicitUsersForResourceByDomain(f.DidSlashRepo(), f.Knot) 999 1004 if err != nil { 1000 - rp.pages.Notice(w, "settings-delete", "Failed to remove collaborators") 1005 + rp.pages.Notice(w, noticeId, "Failed to remove collaborators") 1001 1006 return 1002 1007 } 1003 1008 for _, c := range repoCollaborators { ··· 1009 1014 // remove repo RBAC 1010 1015 err = rp.enforcer.RemoveRepo(f.OwnerDid(), f.Knot, f.DidSlashRepo()) 1011 1016 if err != nil { 1012 - rp.pages.Notice(w, "settings-delete", "Failed to update RBAC rules") 1017 + rp.pages.Notice(w, noticeId, "Failed to update RBAC rules") 1013 1018 return 1014 1019 } 1015 1020 1016 1021 // remove repo from db 1017 1022 err = db.RemoveRepo(tx, f.OwnerDid(), f.Name) 1018 1023 if err != nil { 1019 - rp.pages.Notice(w, "settings-delete", "Failed to update appview") 1024 + rp.pages.Notice(w, noticeId, "Failed to update appview") 1020 1025 return 1021 1026 } 1022 1027 log.Println("removed repo from db") ··· 1045 1050 return 1046 1051 } 1047 1052 1053 + noticeId := "operation-error" 1048 1054 branch := r.FormValue("branch") 1049 1055 if branch == "" { 1050 1056 http.Error(w, "malformed form", http.StatusBadRequest) ··· 1078 1082 return 1079 1083 } 1080 1084 1081 - w.Write(fmt.Append(nil, "default branch set to: ", branch)) 1085 + rp.pages.HxRefresh(w) 1082 1086 } 1083 1087 1084 1088 func (rp *Repo) Secrets(w http.ResponseWriter, r *http.Request) { ··· 1340 1344 Branch: ref, 1341 1345 }, 1342 1346 ) 1343 - if err != nil { 1344 - xe, parseErr := xrpcerr.Unmarshal(err.Error()) 1345 - if parseErr != nil { 1346 - log.Printf("failed to sync repository fork: %s", err) 1347 - rp.pages.Notice(w, "repo", "Failed to sync repository fork.") 1348 - } else { 1349 - log.Printf("failed to sync repository fork: %s", xe.Error()) 1350 - rp.pages.Notice(w, "repo", fmt.Sprintf("Failed to sync repository fork: %s", xe.Message)) 1351 - } 1347 + if err := xrpcclient.HandleXrpcErr(err); err != nil { 1348 + rp.pages.Notice(w, "repo", err.Error()) 1352 1349 return 1353 1350 } 1354 1351