Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
0
fork

Configure Feed

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

appview/repo: allow viewing unreachable repos

instead of showing a 503 indiscriminately, we now indicate that the knot
is unreachable and display a warning. the user is still free to browse
issues and pulls.

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

authored by

oppiliappan and committed by tangled.org 1220020c 7615cf12

+39 -22
+5
appview/pages/pages.go
··· 697 697 Languages []types.RepoLanguageDetails 698 698 Pipelines map[string]models.Pipeline 699 699 NeedsKnotUpgrade bool 700 + KnotUnreachable bool 700 701 types.RepoIndexResponse 701 702 } 702 703 ··· 709 708 710 709 if params.NeedsKnotUpgrade { 711 710 return p.executeRepo("repo/needsUpgrade", w, params) 711 + } 712 + 713 + if params.KnotUnreachable { 714 + return p.executeRepo("repo/knotUnreachable", w, params) 712 715 } 713 716 714 717 p.rctx.RepoInfo = params.RepoInfo
+18
appview/pages/templates/repo/knotUnreachable.html
··· 1 + {{ define "title" }}{{ .RepoInfo.FullName }}{{ end }} 2 + {{ define "extrameta" }} 3 + {{ template "repo/fragments/meta" . }} 4 + {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }} 5 + {{ end }} 6 + {{ define "repoContent" }} 7 + <main> 8 + <div class="relative w-full h-96 flex items-center justify-center"> 9 + <div class="absolute inset-0 flex items-center justify-center py-12 text-red-500 dark:text-red-400 backdrop-blur"> 10 + <div class="text-center"> 11 + {{ i "triangle-alert" "size-5 inline-flex items-center align-middle" }} 12 + The knot hosting this repository is unreachable. 13 + </div> 14 + </div> 15 + </div> 16 + </main> 17 + {{ end }} 18 +
+14 -16
appview/repo/index.go
··· 64 64 RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 65 65 }) 66 66 return 67 + } else { 68 + l.Error("failed to build index response", "err", err) 69 + rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ 70 + LoggedInUser: user, 71 + KnotUnreachable: true, 72 + RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 73 + }) 74 + return 67 75 } 68 - 69 - rp.pages.Error503(w) 70 - l.Error("failed to build index response", "err", err) 71 - return 72 76 } 73 77 74 78 tagMap := make(map[string][]string) ··· 303 299 ) 304 300 305 301 // tags 306 - wg.Add(1) 307 - go func() { 308 - defer wg.Done() 302 + wg.Go(func() { 309 303 tagsBytes, err := tangled.RepoTags(ctx, xrpcc, "", 0, didSlashRepo) 310 304 if err != nil { 311 305 errs = errors.Join(errs, fmt.Errorf("failed to call repoTags: %w", err)) ··· 313 311 if err := json.Unmarshal(tagsBytes, &tagsResp); err != nil { 314 312 errs = errors.Join(errs, fmt.Errorf("failed to unmarshal repoTags: %w", err)) 315 313 } 316 - }() 314 + }) 317 315 318 316 // tree/files 319 - wg.Add(1) 320 - go func() { 321 - defer wg.Done() 317 + wg.Go(func() { 322 318 resp, err := tangled.RepoTree(ctx, xrpcc, "", ref, didSlashRepo) 323 319 if err != nil { 324 320 errs = errors.Join(errs, fmt.Errorf("failed to call repoTree: %w", err)) 325 321 return 326 322 } 327 323 treeResp = resp 328 - }() 324 + }) 329 325 330 326 // commits 331 - wg.Add(1) 332 - go func() { 333 - defer wg.Done() 327 + wg.Go(func() { 334 328 logBytes, err := tangled.RepoLog(ctx, xrpcc, "", 50, "", ref, didSlashRepo) 335 329 if err != nil { 336 330 errs = errors.Join(errs, fmt.Errorf("failed to call repoLog: %w", err)) ··· 336 338 if err := json.Unmarshal(logBytes, &logResp); err != nil { 337 339 errs = errors.Join(errs, fmt.Errorf("failed to unmarshal repoLog: %w", err)) 338 340 } 339 - }() 341 + }) 340 342 341 343 wg.Wait() 342 344
+2 -6
appview/repo/settings.go
··· 190 190 191 191 repo := fmt.Sprintf("%s/%s", f.Did, f.Name) 192 192 xrpcBytes, err := tangled.RepoBranches(r.Context(), xrpcc, "", 0, repo) 193 + var result types.RepoBranchesResponse 193 194 if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { 194 195 l.Error("failed to call XRPC repo.branches", "err", xrpcerr) 195 - rp.pages.Error503(w) 196 - return 197 - } 198 - 199 - var result types.RepoBranchesResponse 200 - if err := json.Unmarshal(xrpcBytes, &result); err != nil { 196 + } else if err := json.Unmarshal(xrpcBytes, &result); err != nil { 201 197 l.Error("failed to decode XRPC response", "err", err) 202 198 rp.pages.Error503(w) 203 199 return