forked from tangled.org/core
this repo has no description

appview: fixes for xrpc migration

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

oppi.li d73d335b f76a9d68

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