diff --git a/appview/pages/pages.go b/appview/pages/pages.go index f95d0211..557df4c4 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -697,6 +697,7 @@ type RepoIndexParams struct { Languages []types.RepoLanguageDetails Pipelines map[string]models.Pipeline NeedsKnotUpgrade bool + KnotUnreachable bool types.RepoIndexResponse } @@ -710,6 +711,10 @@ func (p *Pages) RepoIndexPage(w io.Writer, params RepoIndexParams) error { return p.executeRepo("repo/needsUpgrade", w, params) } + if params.KnotUnreachable { + return p.executeRepo("repo/knotUnreachable", w, params) + } + p.rctx.RepoInfo = params.RepoInfo p.rctx.RepoInfo.Ref = params.Ref p.rctx.RendererType = markup.RendererTypeRepoMarkdown diff --git a/appview/pages/templates/repo/knotUnreachable.html b/appview/pages/templates/repo/knotUnreachable.html new file mode 100644 index 00000000..13bea11d --- /dev/null +++ b/appview/pages/templates/repo/knotUnreachable.html @@ -0,0 +1,18 @@ +{{ define "title" }}{{ .RepoInfo.FullName }}{{ end }} +{{ define "extrameta" }} + {{ template "repo/fragments/meta" . }} + {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }} +{{ end }} +{{ define "repoContent" }} +
+
+
+
+ {{ i "triangle-alert" "size-5 inline-flex items-center align-middle" }} + The knot hosting this repository is unreachable. +
+
+
+
+{{ end }} + diff --git a/appview/repo/index.go b/appview/repo/index.go index 62f000b4..3ebe0744 100644 --- a/appview/repo/index.go +++ b/appview/repo/index.go @@ -64,11 +64,15 @@ func (rp *Repo) Index(w http.ResponseWriter, r *http.Request) { RepoInfo: rp.repoResolver.GetRepoInfo(r, user), }) return + } else { + l.Error("failed to build index response", "err", err) + rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ + LoggedInUser: user, + KnotUnreachable: true, + RepoInfo: rp.repoResolver.GetRepoInfo(r, user), + }) + return } - - rp.pages.Error503(w) - l.Error("failed to build index response", "err", err) - return } tagMap := make(map[string][]string) @@ -299,9 +303,7 @@ func (rp *Repo) buildIndexResponse(ctx context.Context, xrpcc *indigoxrpc.Client ) // tags - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { tagsBytes, err := tangled.RepoTags(ctx, xrpcc, "", 0, didSlashRepo) if err != nil { errs = errors.Join(errs, fmt.Errorf("failed to call repoTags: %w", err)) @@ -311,24 +313,20 @@ func (rp *Repo) buildIndexResponse(ctx context.Context, xrpcc *indigoxrpc.Client if err := json.Unmarshal(tagsBytes, &tagsResp); err != nil { errs = errors.Join(errs, fmt.Errorf("failed to unmarshal repoTags: %w", err)) } - }() + }) // tree/files - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { resp, err := tangled.RepoTree(ctx, xrpcc, "", ref, didSlashRepo) if err != nil { errs = errors.Join(errs, fmt.Errorf("failed to call repoTree: %w", err)) return } treeResp = resp - }() + }) // commits - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { logBytes, err := tangled.RepoLog(ctx, xrpcc, "", 50, "", ref, didSlashRepo) if err != nil { errs = errors.Join(errs, fmt.Errorf("failed to call repoLog: %w", err)) @@ -338,7 +336,7 @@ func (rp *Repo) buildIndexResponse(ctx context.Context, xrpcc *indigoxrpc.Client if err := json.Unmarshal(logBytes, &logResp); err != nil { errs = errors.Join(errs, fmt.Errorf("failed to unmarshal repoLog: %w", err)) } - }() + }) wg.Wait() diff --git a/appview/repo/settings.go b/appview/repo/settings.go index bb28f897..f01ae022 100644 --- a/appview/repo/settings.go +++ b/appview/repo/settings.go @@ -190,14 +190,10 @@ func (rp *Repo) generalSettings(w http.ResponseWriter, r *http.Request) { repo := fmt.Sprintf("%s/%s", f.Did, f.Name) xrpcBytes, err := tangled.RepoBranches(r.Context(), xrpcc, "", 0, repo) + var result types.RepoBranchesResponse if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { l.Error("failed to call XRPC repo.branches", "err", xrpcerr) - rp.pages.Error503(w) - return - } - - var result types.RepoBranchesResponse - if err := json.Unmarshal(xrpcBytes, &result); err != nil { + } else if err := json.Unmarshal(xrpcBytes, &result); err != nil { l.Error("failed to decode XRPC response", "err", err) rp.pages.Error503(w) return