From 13f353c4c04e4d3d282b3cb118f3fb4b683141ca Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Sat, 15 Nov 2025 04:24:24 +0900 Subject: [PATCH] appview: use less `RepoInfo` for `ResolvedRepo` Change-Id: lsqlrmsywxovqotuluolzywrlvynusuv `RepoInfo` is mostly designed for rendering, don't use it for service logic. Signed-off-by: Seongmin Lee --- appview/issues/issues.go | 5 ++--- appview/pipelines/pipelines.go | 33 +++++++++++++-------------------- appview/pulls/pulls.go | 17 +++++++---------- appview/repo/compare.go | 8 ++------ appview/repo/index.go | 7 +++---- appview/repo/log.go | 9 +++------ appview/repo/repo.go | 5 ++--- appview/repo/repo_util.go | 9 ++++----- 8 files changed, 36 insertions(+), 57 deletions(-) diff --git a/appview/issues/issues.go b/appview/issues/issues.go index 3083232b..85bb4598 100644 --- a/appview/issues/issues.go +++ b/appview/issues/issues.go @@ -226,8 +226,6 @@ func (rp *Issues) DeleteIssue(w http.ResponseWriter, r *http.Request) { l := rp.logger.With("handler", "DeleteIssue") noticeId := "issue-actions-error" - user := rp.oauth.GetUser(r) - f, err := rp.repoResolver.Resolve(r) if err != nil { l.Error("failed to get repo and knot", "err", err) @@ -271,7 +269,8 @@ func (rp *Issues) DeleteIssue(w http.ResponseWriter, r *http.Request) { rp.notifier.DeleteIssue(r.Context(), issue) // return to all issues page - rp.pages.HxRedirect(w, "/"+f.RepoInfo(user).FullName()+"/issues") + ownerSlashRepo := reporesolver.GetBaseRepoPath(r, &f.Repo) + rp.pages.HxRedirect(w, "/"+ownerSlashRepo+"/issues") } func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) { diff --git a/appview/pipelines/pipelines.go b/appview/pipelines/pipelines.go index 7cfc2290..44b74753 100644 --- a/appview/pipelines/pipelines.go +++ b/appview/pipelines/pipelines.go @@ -78,14 +78,12 @@ func (p *Pipelines) Index(w http.ResponseWriter, r *http.Request) { return } - repoInfo := f.RepoInfo(user) - ps, err := db.GetPipelineStatuses( p.db, 30, - db.FilterEq("repo_owner", repoInfo.OwnerDid), - db.FilterEq("repo_name", repoInfo.Name), - db.FilterEq("knot", repoInfo.Knot), + db.FilterEq("repo_owner", f.Did), + db.FilterEq("repo_name", f.Name), + db.FilterEq("knot", f.Knot), ) if err != nil { l.Error("failed to query db", "err", err) @@ -94,7 +92,7 @@ func (p *Pipelines) Index(w http.ResponseWriter, r *http.Request) { p.pages.Pipelines(w, pages.PipelinesParams{ LoggedInUser: user, - RepoInfo: repoInfo, + RepoInfo: f.RepoInfo(user), Pipelines: ps, }) } @@ -109,8 +107,6 @@ func (p *Pipelines) Workflow(w http.ResponseWriter, r *http.Request) { return } - repoInfo := f.RepoInfo(user) - pipelineId := chi.URLParam(r, "pipeline") if pipelineId == "" { l.Error("empty pipeline ID") @@ -126,9 +122,9 @@ func (p *Pipelines) Workflow(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, 1, - db.FilterEq("repo_owner", repoInfo.OwnerDid), - db.FilterEq("repo_name", repoInfo.Name), - db.FilterEq("knot", repoInfo.Knot), + db.FilterEq("repo_owner", f.Did), + db.FilterEq("repo_name", f.Name), + db.FilterEq("knot", f.Knot), db.FilterEq("id", pipelineId), ) if err != nil { @@ -145,7 +141,7 @@ func (p *Pipelines) Workflow(w http.ResponseWriter, r *http.Request) { p.pages.Workflow(w, pages.WorkflowParams{ LoggedInUser: user, - RepoInfo: repoInfo, + RepoInfo: f.RepoInfo(user), Pipeline: singlePipeline, Workflow: workflow, }) @@ -176,7 +172,6 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { ctx, cancel := context.WithCancel(r.Context()) defer cancel() - user := p.oauth.GetUser(r) f, err := p.repoResolver.Resolve(r) if err != nil { l.Error("failed to get repo and knot", "err", err) @@ -184,8 +179,6 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { return } - repoInfo := f.RepoInfo(user) - pipelineId := chi.URLParam(r, "pipeline") workflow := chi.URLParam(r, "workflow") if pipelineId == "" || workflow == "" { @@ -196,9 +189,9 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, 1, - db.FilterEq("repo_owner", repoInfo.OwnerDid), - db.FilterEq("repo_name", repoInfo.Name), - db.FilterEq("knot", repoInfo.Knot), + db.FilterEq("repo_owner", f.Did), + db.FilterEq("repo_name", f.Name), + db.FilterEq("knot", f.Knot), db.FilterEq("id", pipelineId), ) if err != nil || len(ps) != 1 { @@ -208,8 +201,8 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { } singlePipeline := ps[0] - spindle := repoInfo.Spindle - knot := repoInfo.Knot + spindle := f.Spindle + knot := f.Knot rkey := singlePipeline.Rkey if spindle == "" || knot == "" || rkey == "" { diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 7d729366..d6968ec0 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -162,8 +162,6 @@ func (s *Pulls) RepoSinglePull(w http.ResponseWriter, r *http.Request) { resubmitResult = s.resubmitCheck(r, f, pull, stack) } - repoInfo := f.RepoInfo(user) - m := make(map[string]models.Pipeline) var shas []string @@ -180,9 +178,9 @@ func (s *Pulls) RepoSinglePull(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( s.db, len(shas), - db.FilterEq("repo_owner", repoInfo.OwnerDid), - db.FilterEq("repo_name", repoInfo.Name), - db.FilterEq("knot", repoInfo.Knot), + db.FilterEq("repo_owner", f.Did), + db.FilterEq("repo_name", f.Name), + db.FilterEq("knot", f.Knot), db.FilterIn("sha", shas), ) if err != nil { @@ -223,7 +221,7 @@ func (s *Pulls) RepoSinglePull(w http.ResponseWriter, r *http.Request) { s.pages.RepoSinglePull(w, pages.RepoSinglePullParams{ LoggedInUser: user, - RepoInfo: repoInfo, + RepoInfo: f.RepoInfo(user), Pull: pull, Stack: stack, AbandonedPulls: abandonedPulls, @@ -647,13 +645,12 @@ func (s *Pulls) RepoPulls(w http.ResponseWriter, r *http.Request) { } pulls = pulls[:n] - repoInfo := f.RepoInfo(user) ps, err := db.GetPipelineStatuses( s.db, len(shas), - db.FilterEq("repo_owner", repoInfo.OwnerDid), - db.FilterEq("repo_name", repoInfo.Name), - db.FilterEq("knot", repoInfo.Knot), + db.FilterEq("repo_owner", f.Did), + db.FilterEq("repo_name", f.Name), + db.FilterEq("knot", f.Knot), db.FilterIn("sha", shas), ) if err != nil { diff --git a/appview/repo/compare.go b/appview/repo/compare.go index ca3b73da..88b6d89e 100644 --- a/appview/repo/compare.go +++ b/appview/repo/compare.go @@ -88,11 +88,9 @@ func (rp *Repo) CompareNew(w http.ResponseWriter, r *http.Request) { return } - repoinfo := f.RepoInfo(user) - rp.pages.RepoCompareNew(w, pages.RepoCompareNewParams{ LoggedInUser: user, - RepoInfo: repoinfo, + RepoInfo: f.RepoInfo(user), Branches: branches, Tags: tags.Tags, Base: base, @@ -202,11 +200,9 @@ func (rp *Repo) Compare(w http.ResponseWriter, r *http.Request) { diff = patchutil.AsNiceDiff(formatPatch.FormatPatchRaw, base) } - repoinfo := f.RepoInfo(user) - rp.pages.RepoCompare(w, pages.RepoCompareParams{ LoggedInUser: user, - RepoInfo: repoinfo, + RepoInfo: f.RepoInfo(user), Branches: branches.Branches, Tags: tags.Tags, Base: base, diff --git a/appview/repo/index.go b/appview/repo/index.go index 209d76a9..8e989600 100644 --- a/appview/repo/index.go +++ b/appview/repo/index.go @@ -52,7 +52,6 @@ func (rp *Repo) Index(w http.ResponseWriter, r *http.Request) { } user := rp.oauth.GetUser(r) - repoInfo := f.RepoInfo(user) // Build index response from multiple XRPC calls result, err := rp.buildIndexResponse(r.Context(), xrpcc, f, ref) @@ -62,7 +61,7 @@ func (rp *Repo) Index(w http.ResponseWriter, r *http.Request) { rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ LoggedInUser: user, NeedsKnotUpgrade: true, - RepoInfo: repoInfo, + RepoInfo: f.RepoInfo(user), }) return } @@ -140,7 +139,7 @@ func (rp *Repo) Index(w http.ResponseWriter, r *http.Request) { for _, c := range commitsTrunc { shas = append(shas, c.Hash.String()) } - pipelines, err := getPipelineStatuses(rp.db, repoInfo, shas) + pipelines, err := getPipelineStatuses(rp.db, &f.Repo, shas) if err != nil { l.Error("failed to fetch pipeline statuses", "err", err) // non-fatal @@ -148,7 +147,7 @@ func (rp *Repo) Index(w http.ResponseWriter, r *http.Request) { rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ LoggedInUser: user, - RepoInfo: repoInfo, + RepoInfo: f.RepoInfo(user), TagMap: tagMap, RepoIndexResponse: *result, CommitsTrunc: commitsTrunc, diff --git a/appview/repo/log.go b/appview/repo/log.go index e340d3f5..5d2cea96 100644 --- a/appview/repo/log.go +++ b/appview/repo/log.go @@ -121,13 +121,11 @@ func (rp *Repo) Log(w http.ResponseWriter, r *http.Request) { l.Error("failed to GetVerifiedObjectCommits", "err", err) } - repoInfo := f.RepoInfo(user) - var shas []string for _, c := range xrpcResp.Commits { shas = append(shas, c.Hash.String()) } - pipelines, err := getPipelineStatuses(rp.db, repoInfo, shas) + pipelines, err := getPipelineStatuses(rp.db, &f.Repo, shas) if err != nil { l.Error("failed to getPipelineStatuses", "err", err) // non-fatal @@ -136,7 +134,7 @@ func (rp *Repo) Log(w http.ResponseWriter, r *http.Request) { rp.pages.RepoLog(w, pages.RepoLogParams{ LoggedInUser: user, TagMap: tagMap, - RepoInfo: repoInfo, + RepoInfo: f.RepoInfo(user), RepoLogResponse: xrpcResp, EmailToDid: emailToDidMap, VerifiedCommits: vc, @@ -200,8 +198,7 @@ func (rp *Repo) Commit(w http.ResponseWriter, r *http.Request) { } user := rp.oauth.GetUser(r) - repoInfo := f.RepoInfo(user) - pipelines, err := getPipelineStatuses(rp.db, repoInfo, []string{result.Diff.Commit.This}) + pipelines, err := getPipelineStatuses(rp.db, &f.Repo, []string{result.Diff.Commit.This}) if err != nil { l.Error("failed to getPipelineStatuses", "err", err) // non-fatal diff --git a/appview/repo/repo.go b/appview/repo/repo.go index cd7dbd15..069f8536 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -959,8 +959,7 @@ func (rp *Repo) SyncRepoFork(w http.ResponseWriter, r *http.Request) { return } - repoInfo := f.RepoInfo(user) - if repoInfo.Source == nil { + if f.Source == "" { rp.pages.Notice(w, "repo", "This repository is not a fork.") return } @@ -971,7 +970,7 @@ func (rp *Repo) SyncRepoFork(w http.ResponseWriter, r *http.Request) { &tangled.RepoForkSync_Input{ Did: user.Did, Name: f.Name, - Source: repoInfo.Source.RepoAt().String(), + Source: f.Source, Branch: ref, }, ) diff --git a/appview/repo/repo_util.go b/appview/repo/repo_util.go index 15262c75..f585a3a5 100644 --- a/appview/repo/repo_util.go +++ b/appview/repo/repo_util.go @@ -7,7 +7,6 @@ import ( "tangled.org/core/appview/db" "tangled.org/core/appview/models" - "tangled.org/core/appview/pages/repoinfo" "tangled.org/core/types" "github.com/go-git/go-git/v5/plumbing/object" @@ -93,7 +92,7 @@ func balanceIndexItems(commitCount, branchCount, tagCount, fileCount int) (commi // golang is so blessed that it requires 35 lines of imperative code for this func getPipelineStatuses( d *db.DB, - repoInfo repoinfo.RepoInfo, + repo *models.Repo, shas []string, ) (map[string]models.Pipeline, error) { m := make(map[string]models.Pipeline) @@ -105,9 +104,9 @@ func getPipelineStatuses( ps, err := db.GetPipelineStatuses( d, len(shas), - db.FilterEq("repo_owner", repoInfo.OwnerDid), - db.FilterEq("repo_name", repoInfo.Name), - db.FilterEq("knot", repoInfo.Knot), + db.FilterEq("repo_owner", repo.Did), + db.FilterEq("repo_name", repo.Name), + db.FilterEq("knot", repo.Knot), db.FilterIn("sha", shas), ) if err != nil { -- 2.43.0