Monorepo for Tangled tangled.org

appview: use less `RepoInfo` for `ResolvedRepo`

`RepoInfo` is mostly designed for rendering, don't use it for service
logic.

Signed-off-by: Seongmin Lee <git@boltless.me>

boltless.me bd3d57bf f8e1e20f

verified
Changed files
+36 -57
appview
+2 -3
appview/issues/issues.go
··· 226 226 l := rp.logger.With("handler", "DeleteIssue") 227 227 noticeId := "issue-actions-error" 228 228 229 - user := rp.oauth.GetUser(r) 230 - 231 229 f, err := rp.repoResolver.Resolve(r) 232 230 if err != nil { 233 231 l.Error("failed to get repo and knot", "err", err) ··· 271 269 rp.notifier.DeleteIssue(r.Context(), issue) 272 270 273 271 // return to all issues page 274 - rp.pages.HxRedirect(w, "/"+f.RepoInfo(user).FullName()+"/issues") 272 + ownerSlashRepo := reporesolver.GetBaseRepoPath(r, &f.Repo) 273 + rp.pages.HxRedirect(w, "/"+ownerSlashRepo+"/issues") 275 274 } 276 275 277 276 func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) {
+13 -20
appview/pipelines/pipelines.go
··· 78 78 return 79 79 } 80 80 81 - repoInfo := f.RepoInfo(user) 82 - 83 81 ps, err := db.GetPipelineStatuses( 84 82 p.db, 85 - db.FilterEq("repo_owner", repoInfo.OwnerDid), 86 - db.FilterEq("repo_name", repoInfo.Name), 87 - db.FilterEq("knot", repoInfo.Knot), 83 + db.FilterEq("repo_owner", f.Did), 84 + db.FilterEq("repo_name", f.Name), 85 + db.FilterEq("knot", f.Knot), 88 86 ) 89 87 if err != nil { 90 88 l.Error("failed to query db", "err", err) ··· 93 91 94 92 p.pages.Pipelines(w, pages.PipelinesParams{ 95 93 LoggedInUser: user, 96 - RepoInfo: repoInfo, 94 + RepoInfo: f.RepoInfo(user), 97 95 Pipelines: ps, 98 96 }) 99 97 } ··· 108 106 return 109 107 } 110 108 111 - repoInfo := f.RepoInfo(user) 112 - 113 109 pipelineId := chi.URLParam(r, "pipeline") 114 110 if pipelineId == "" { 115 111 l.Error("empty pipeline ID") ··· 124 120 125 121 ps, err := db.GetPipelineStatuses( 126 122 p.db, 127 - db.FilterEq("repo_owner", repoInfo.OwnerDid), 128 - db.FilterEq("repo_name", repoInfo.Name), 129 - db.FilterEq("knot", repoInfo.Knot), 123 + db.FilterEq("repo_owner", f.Did), 124 + db.FilterEq("repo_name", f.Name), 125 + db.FilterEq("knot", f.Knot), 130 126 db.FilterEq("id", pipelineId), 131 127 ) 132 128 if err != nil { ··· 143 139 144 140 p.pages.Workflow(w, pages.WorkflowParams{ 145 141 LoggedInUser: user, 146 - RepoInfo: repoInfo, 142 + RepoInfo: f.RepoInfo(user), 147 143 Pipeline: singlePipeline, 148 144 Workflow: workflow, 149 145 }) ··· 174 170 ctx, cancel := context.WithCancel(r.Context()) 175 171 defer cancel() 176 172 177 - user := p.oauth.GetUser(r) 178 173 f, err := p.repoResolver.Resolve(r) 179 174 if err != nil { 180 175 l.Error("failed to get repo and knot", "err", err) ··· 182 177 return 183 178 } 184 179 185 - repoInfo := f.RepoInfo(user) 186 - 187 180 pipelineId := chi.URLParam(r, "pipeline") 188 181 workflow := chi.URLParam(r, "workflow") 189 182 if pipelineId == "" || workflow == "" { ··· 193 186 194 187 ps, err := db.GetPipelineStatuses( 195 188 p.db, 196 - db.FilterEq("repo_owner", repoInfo.OwnerDid), 197 - db.FilterEq("repo_name", repoInfo.Name), 198 - db.FilterEq("knot", repoInfo.Knot), 189 + db.FilterEq("repo_owner", f.Did), 190 + db.FilterEq("repo_name", f.Name), 191 + db.FilterEq("knot", f.Knot), 199 192 db.FilterEq("id", pipelineId), 200 193 ) 201 194 if err != nil || len(ps) != 1 { ··· 205 198 } 206 199 207 200 singlePipeline := ps[0] 208 - spindle := repoInfo.Spindle 209 - knot := repoInfo.Knot 201 + spindle := f.Spindle 202 + knot := f.Knot 210 203 rkey := singlePipeline.Rkey 211 204 212 205 if spindle == "" || knot == "" || rkey == "" {
+7 -10
appview/pulls/pulls.go
··· 162 162 resubmitResult = s.resubmitCheck(r, f, pull, stack) 163 163 } 164 164 165 - repoInfo := f.RepoInfo(user) 166 - 167 165 m := make(map[string]models.Pipeline) 168 166 169 167 var shas []string ··· 179 177 180 178 ps, err := db.GetPipelineStatuses( 181 179 s.db, 182 - db.FilterEq("repo_owner", repoInfo.OwnerDid), 183 - db.FilterEq("repo_name", repoInfo.Name), 184 - db.FilterEq("knot", repoInfo.Knot), 180 + db.FilterEq("repo_owner", f.Did), 181 + db.FilterEq("repo_name", f.Name), 182 + db.FilterEq("knot", f.Knot), 185 183 db.FilterIn("sha", shas), 186 184 ) 187 185 if err != nil { ··· 222 220 223 221 s.pages.RepoSinglePull(w, pages.RepoSinglePullParams{ 224 222 LoggedInUser: user, 225 - RepoInfo: repoInfo, 223 + RepoInfo: f.RepoInfo(user), 226 224 Pull: pull, 227 225 Stack: stack, 228 226 AbandonedPulls: abandonedPulls, ··· 646 644 } 647 645 pulls = pulls[:n] 648 646 649 - repoInfo := f.RepoInfo(user) 650 647 ps, err := db.GetPipelineStatuses( 651 648 s.db, 652 - db.FilterEq("repo_owner", repoInfo.OwnerDid), 653 - db.FilterEq("repo_name", repoInfo.Name), 654 - db.FilterEq("knot", repoInfo.Knot), 649 + db.FilterEq("repo_owner", f.Did), 650 + db.FilterEq("repo_name", f.Name), 651 + db.FilterEq("knot", f.Knot), 655 652 db.FilterIn("sha", shas), 656 653 ) 657 654 if err != nil {
+2 -6
appview/repo/compare.go
··· 88 88 return 89 89 } 90 90 91 - repoinfo := f.RepoInfo(user) 92 - 93 91 rp.pages.RepoCompareNew(w, pages.RepoCompareNewParams{ 94 92 LoggedInUser: user, 95 - RepoInfo: repoinfo, 93 + RepoInfo: f.RepoInfo(user), 96 94 Branches: branches, 97 95 Tags: tags.Tags, 98 96 Base: base, ··· 198 196 diff = patchutil.AsNiceDiff(formatPatch.FormatPatchRaw, base) 199 197 } 200 198 201 - repoinfo := f.RepoInfo(user) 202 - 203 199 rp.pages.RepoCompare(w, pages.RepoCompareParams{ 204 200 LoggedInUser: user, 205 - RepoInfo: repoinfo, 201 + RepoInfo: f.RepoInfo(user), 206 202 Branches: branches.Branches, 207 203 Tags: tags.Tags, 208 204 Base: base,
+3 -4
appview/repo/index.go
··· 52 52 } 53 53 54 54 user := rp.oauth.GetUser(r) 55 - repoInfo := f.RepoInfo(user) 56 55 57 56 // Build index response from multiple XRPC calls 58 57 result, err := rp.buildIndexResponse(r.Context(), xrpcc, f, ref) ··· 62 61 rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ 63 62 LoggedInUser: user, 64 63 NeedsKnotUpgrade: true, 65 - RepoInfo: repoInfo, 64 + RepoInfo: f.RepoInfo(user), 66 65 }) 67 66 return 68 67 } ··· 140 139 for _, c := range commitsTrunc { 141 140 shas = append(shas, c.Hash.String()) 142 141 } 143 - pipelines, err := getPipelineStatuses(rp.db, repoInfo, shas) 142 + pipelines, err := getPipelineStatuses(rp.db, &f.Repo, shas) 144 143 if err != nil { 145 144 l.Error("failed to fetch pipeline statuses", "err", err) 146 145 // non-fatal ··· 148 147 149 148 rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ 150 149 LoggedInUser: user, 151 - RepoInfo: repoInfo, 150 + RepoInfo: f.RepoInfo(user), 152 151 TagMap: tagMap, 153 152 RepoIndexResponse: *result, 154 153 CommitsTrunc: commitsTrunc,
+3 -6
appview/repo/log.go
··· 121 121 l.Error("failed to GetVerifiedObjectCommits", "err", err) 122 122 } 123 123 124 - repoInfo := f.RepoInfo(user) 125 - 126 124 var shas []string 127 125 for _, c := range xrpcResp.Commits { 128 126 shas = append(shas, c.Hash.String()) 129 127 } 130 - pipelines, err := getPipelineStatuses(rp.db, repoInfo, shas) 128 + pipelines, err := getPipelineStatuses(rp.db, &f.Repo, shas) 131 129 if err != nil { 132 130 l.Error("failed to getPipelineStatuses", "err", err) 133 131 // non-fatal ··· 136 134 rp.pages.RepoLog(w, pages.RepoLogParams{ 137 135 LoggedInUser: user, 138 136 TagMap: tagMap, 139 - RepoInfo: repoInfo, 137 + RepoInfo: f.RepoInfo(user), 140 138 RepoLogResponse: xrpcResp, 141 139 EmailToDid: emailToDidMap, 142 140 VerifiedCommits: vc, ··· 200 198 } 201 199 202 200 user := rp.oauth.GetUser(r) 203 - repoInfo := f.RepoInfo(user) 204 - pipelines, err := getPipelineStatuses(rp.db, repoInfo, []string{result.Diff.Commit.This}) 201 + pipelines, err := getPipelineStatuses(rp.db, &f.Repo, []string{result.Diff.Commit.This}) 205 202 if err != nil { 206 203 l.Error("failed to getPipelineStatuses", "err", err) 207 204 // non-fatal
+2 -3
appview/repo/repo.go
··· 959 959 return 960 960 } 961 961 962 - repoInfo := f.RepoInfo(user) 963 - if repoInfo.Source == nil { 962 + if f.Source == "" { 964 963 rp.pages.Notice(w, "repo", "This repository is not a fork.") 965 964 return 966 965 } ··· 971 970 &tangled.RepoForkSync_Input{ 972 971 Did: user.Did, 973 972 Name: f.Name, 974 - Source: repoInfo.Source.RepoAt().String(), 973 + Source: f.Source, 975 974 Branch: ref, 976 975 }, 977 976 )
+4 -5
appview/repo/repo_util.go
··· 9 9 10 10 "tangled.org/core/appview/db" 11 11 "tangled.org/core/appview/models" 12 - "tangled.org/core/appview/pages/repoinfo" 13 12 "tangled.org/core/types" 14 13 15 14 "github.com/go-git/go-git/v5/plumbing/object" ··· 107 106 // golang is so blessed that it requires 35 lines of imperative code for this 108 107 func getPipelineStatuses( 109 108 d *db.DB, 110 - repoInfo repoinfo.RepoInfo, 109 + repo *models.Repo, 111 110 shas []string, 112 111 ) (map[string]models.Pipeline, error) { 113 112 m := make(map[string]models.Pipeline) ··· 118 117 119 118 ps, err := db.GetPipelineStatuses( 120 119 d, 121 - db.FilterEq("repo_owner", repoInfo.OwnerDid), 122 - db.FilterEq("repo_name", repoInfo.Name), 123 - db.FilterEq("knot", repoInfo.Knot), 120 + db.FilterEq("repo_owner", repo.Did), 121 + db.FilterEq("repo_name", repo.Name), 122 + db.FilterEq("knot", repo.Knot), 124 123 db.FilterIn("sha", shas), 125 124 ) 126 125 if err != nil {