From cbd86f003972dada77e7c822ad07afbb46c0c179 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 8116e446..b5582e91 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 c1cfb429..55c9d7b2 100644 --- a/appview/pipelines/pipelines.go +++ b/appview/pipelines/pipelines.go @@ -78,13 +78,11 @@ func (p *Pipelines) Index(w http.ResponseWriter, r *http.Request) { return } - repoInfo := f.RepoInfo(user) - ps, err := db.GetPipelineStatuses( p.db, - 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) @@ -93,7 +91,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, }) } @@ -108,8 +106,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") @@ -124,9 +120,9 @@ func (p *Pipelines) Workflow(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, - 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 { @@ -143,7 +139,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, }) @@ -174,7 +170,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) @@ -182,8 +177,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 == "" { @@ -193,9 +186,9 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, - 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 { @@ -205,8 +198,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 694d3b7a..574509d8 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 @@ -179,9 +177,9 @@ func (s *Pulls) RepoSinglePull(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( s.db, - 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 { @@ -222,7 +220,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, @@ -646,12 +644,11 @@ func (s *Pulls) RepoPulls(w http.ResponseWriter, r *http.Request) { } pulls = pulls[:n] - repoInfo := f.RepoInfo(user) ps, err := db.GetPipelineStatuses( s.db, - 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 ae3939c4..6577e71d 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, @@ -198,11 +196,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 97eeb0e8..534f6092 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 34bc20c6..61a12c94 100644 --- a/appview/repo/repo_util.go +++ b/appview/repo/repo_util.go @@ -9,7 +9,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" @@ -107,7 +106,7 @@ func randomString(n int) string { // 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) @@ -118,9 +117,9 @@ func getPipelineStatuses( ps, err := db.GetPipelineStatuses( d, - 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