From e33a63e748e520cf54a2b6289d4c895d9810dc38 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Wed, 30 Jul 2025 01:03:48 +0900 Subject: [PATCH] appview: reporesolver: pass entire `Repo` object through context Change-Id: ovmluwsrpullzyxvrzxmsxtzslnztptr There is no reason for `ResolvedRepo` to not directly inherit `Repo` Signed-off-by: Seongmin Lee --- appview/issues/issues.go | 38 ++++++------- appview/middleware/middleware.go | 11 ++-- appview/pulls/pulls.go | 42 +++++++-------- appview/repo/artifact.go | 12 ++--- appview/repo/index.go | 10 ++-- appview/repo/repo.go | 91 ++++++++++++++++---------------- appview/reporesolver/resolver.go | 83 +++++++++-------------------- 7 files changed, 124 insertions(+), 163 deletions(-) diff --git a/appview/issues/issues.go b/appview/issues/issues.go index 7693078..62ee292 100644 --- a/appview/issues/issues.go +++ b/appview/issues/issues.go @@ -73,7 +73,7 @@ func (rp *Issues) RepoSingleIssue(w http.ResponseWriter, r *http.Request) { return } - issue, comments, err := db.GetIssueWithComments(rp.db, f.RepoAt, issueIdInt) + issue, comments, err := db.GetIssueWithComments(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue and comments", err) rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.") @@ -127,7 +127,7 @@ func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) { return } - issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt) + issue, err := db.GetIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue", err) rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.") @@ -171,7 +171,7 @@ func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) { return } - err = db.CloseIssue(rp.db, f.RepoAt, issueIdInt) + err = db.CloseIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to close issue", err) rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.") @@ -203,7 +203,7 @@ func (rp *Issues) ReopenIssue(w http.ResponseWriter, r *http.Request) { return } - issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt) + issue, err := db.GetIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue", err) rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.") @@ -220,7 +220,7 @@ func (rp *Issues) ReopenIssue(w http.ResponseWriter, r *http.Request) { isIssueOwner := user.Did == issue.OwnerDid if isCollaborator || isIssueOwner { - err := db.ReopenIssue(rp.db, f.RepoAt, issueIdInt) + err := db.ReopenIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to reopen issue", err) rp.pages.Notice(w, "issue-action", "Failed to reopen issue. Try again later.") @@ -264,7 +264,7 @@ func (rp *Issues) NewIssueComment(w http.ResponseWriter, r *http.Request) { err := db.NewIssueComment(rp.db, &db.Comment{ OwnerDid: user.Did, - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Issue: issueIdInt, CommentId: commentId, Body: body, @@ -279,14 +279,14 @@ func (rp *Issues) NewIssueComment(w http.ResponseWriter, r *http.Request) { createdAt := time.Now().Format(time.RFC3339) commentIdInt64 := int64(commentId) ownerDid := user.Did - issueAt, err := db.GetIssueAt(rp.db, f.RepoAt, issueIdInt) + issueAt, err := db.GetIssueAt(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue at", err) rp.pages.Notice(w, "issue-comment", "Failed to create comment.") return } - atUri := f.RepoAt.String() + atUri := f.RepoAt().String() client, err := rp.oauth.AuthorizedClient(r) if err != nil { log.Println("failed to get authorized client", err) @@ -343,14 +343,14 @@ func (rp *Issues) IssueComment(w http.ResponseWriter, r *http.Request) { return } - issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt) + issue, err := db.GetIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue", err) rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.") return } - comment, err := db.GetComment(rp.db, f.RepoAt, issueIdInt, commentIdInt) + comment, err := db.GetComment(rp.db, f.RepoAt(), issueIdInt, commentIdInt) if err != nil { http.Error(w, "bad comment id", http.StatusBadRequest) return @@ -388,14 +388,14 @@ func (rp *Issues) EditIssueComment(w http.ResponseWriter, r *http.Request) { return } - issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt) + issue, err := db.GetIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue", err) rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.") return } - comment, err := db.GetComment(rp.db, f.RepoAt, issueIdInt, commentIdInt) + comment, err := db.GetComment(rp.db, f.RepoAt(), issueIdInt, commentIdInt) if err != nil { http.Error(w, "bad comment id", http.StatusBadRequest) return @@ -506,7 +506,7 @@ func (rp *Issues) DeleteIssueComment(w http.ResponseWriter, r *http.Request) { return } - issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt) + issue, err := db.GetIssue(rp.db, f.RepoAt(), issueIdInt) if err != nil { log.Println("failed to get issue", err) rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.") @@ -521,7 +521,7 @@ func (rp *Issues) DeleteIssueComment(w http.ResponseWriter, r *http.Request) { return } - comment, err := db.GetComment(rp.db, f.RepoAt, issueIdInt, commentIdInt) + comment, err := db.GetComment(rp.db, f.RepoAt(), issueIdInt, commentIdInt) if err != nil { http.Error(w, "bad comment id", http.StatusBadRequest) return @@ -539,7 +539,7 @@ func (rp *Issues) DeleteIssueComment(w http.ResponseWriter, r *http.Request) { // optimistic deletion deleted := time.Now() - err = db.DeleteComment(rp.db, f.RepoAt, issueIdInt, commentIdInt) + err = db.DeleteComment(rp.db, f.RepoAt(), issueIdInt, commentIdInt) if err != nil { log.Println("failed to delete comment") rp.pages.Notice(w, fmt.Sprintf("comment-%s-status", commentId), "failed to delete comment") @@ -603,7 +603,7 @@ func (rp *Issues) RepoIssues(w http.ResponseWriter, r *http.Request) { return } - issues, err := db.GetIssues(rp.db, f.RepoAt, isOpen, page) + issues, err := db.GetIssues(rp.db, f.RepoAt(), isOpen, page) if err != nil { log.Println("failed to get issues", err) rp.pages.Notice(w, "issues", "Failed to load issues. Try again later.") @@ -650,7 +650,7 @@ func (rp *Issues) NewIssue(w http.ResponseWriter, r *http.Request) { } issue := &db.Issue{ - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Title: title, Body: body, OwnerDid: user.Did, @@ -668,7 +668,7 @@ func (rp *Issues) NewIssue(w http.ResponseWriter, r *http.Request) { rp.pages.Notice(w, "issues", "Failed to create issue.") return } - atUri := f.RepoAt.String() + atUri := f.RepoAt().String() resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.RepoIssueNSID, Repo: user.Did, @@ -689,7 +689,7 @@ func (rp *Issues) NewIssue(w http.ResponseWriter, r *http.Request) { return } - err = db.SetIssueAt(rp.db, f.RepoAt, issue.IssueId, resp.Uri) + err = db.SetIssueAt(rp.db, f.RepoAt(), issue.IssueId, resp.Uri) if err != nil { log.Println("failed to set issue at", err) rp.pages.Notice(w, "issues", "Failed to create issue.") diff --git a/appview/middleware/middleware.go b/appview/middleware/middleware.go index b5532e3..64175bb 100644 --- a/appview/middleware/middleware.go +++ b/appview/middleware/middleware.go @@ -8,7 +8,6 @@ import ( "slices" "strconv" "strings" - "time" "github.com/bluesky-social/indigo/atproto/identity" "github.com/go-chi/chi/v5" @@ -214,11 +213,7 @@ func (mw Middleware) ResolveRepo() middlewareFunc { return } - ctx := context.WithValue(req.Context(), "knot", repo.Knot) - ctx = context.WithValue(ctx, "repoAt", repo.AtUri) - ctx = context.WithValue(ctx, "repoDescription", repo.Description) - ctx = context.WithValue(ctx, "repoSpindle", repo.Spindle) - ctx = context.WithValue(ctx, "repoAddedAt", repo.Created.Format(time.RFC3339)) + ctx := context.WithValue(req.Context(), "repo", repo) next.ServeHTTP(w, req.WithContext(ctx)) }) } @@ -243,7 +238,7 @@ func (mw Middleware) ResolvePull() middlewareFunc { return } - pr, err := db.GetPull(mw.db, f.RepoAt, prIdInt) + pr, err := db.GetPull(mw.db, f.RepoAt(), prIdInt) if err != nil { log.Println("failed to get pull and comments", err) return @@ -284,7 +279,7 @@ func (mw Middleware) GoImport() middlewareFunc { return } - fullName := f.OwnerHandle() + "/" + f.RepoName + fullName := f.OwnerHandle() + "/" + f.Name if r.Header.Get("User-Agent") == "Go-http-client/1.1" { if r.URL.Query().Get("go-get") == "1" { diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index ddff2e6..15e4962 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -246,7 +246,7 @@ func (s *Pulls) mergeCheck(f *reporesolver.ResolvedRepo, pull *db.Pull, stack db patch = mergeable.CombinedPatch() } - resp, err := ksClient.MergeCheck([]byte(patch), f.OwnerDid(), f.RepoName, pull.TargetBranch) + resp, err := ksClient.MergeCheck([]byte(patch), f.OwnerDid(), f.Name, pull.TargetBranch) if err != nil { log.Println("failed to check for mergeability:", err) return types.MergeCheckResponse{ @@ -307,7 +307,7 @@ func (s *Pulls) resubmitCheck(f *reporesolver.ResolvedRepo, pull *db.Pull, stack // pulls within the same repo knot = f.Knot ownerDid = f.OwnerDid() - repoName = f.RepoName + repoName = f.Name } us, err := knotclient.NewUnsignedClient(knot, s.config.Core.Dev) @@ -483,7 +483,7 @@ func (s *Pulls) RepoPulls(w http.ResponseWriter, r *http.Request) { pulls, err := db.GetPulls( s.db, - db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("repo_at", f.RepoAt()), db.FilterEq("state", state), ) if err != nil { @@ -610,14 +610,14 @@ func (s *Pulls) PullComment(w http.ResponseWriter, r *http.Request) { createdAt := time.Now().Format(time.RFC3339) ownerDid := user.Did - pullAt, err := db.GetPullAt(s.db, f.RepoAt, pull.PullId) + pullAt, err := db.GetPullAt(s.db, f.RepoAt(), pull.PullId) if err != nil { log.Println("failed to get pull at", err) s.pages.Notice(w, "pull-comment", "Failed to create comment.") return } - atUri := f.RepoAt.String() + atUri := f.RepoAt().String() client, err := s.oauth.AuthorizedClient(r) if err != nil { log.Println("failed to get authorized client", err) @@ -646,7 +646,7 @@ func (s *Pulls) PullComment(w http.ResponseWriter, r *http.Request) { comment := &db.PullComment{ OwnerDid: user.Did, - RepoAt: f.RepoAt.String(), + RepoAt: f.RepoAt().String(), PullId: pull.PullId, Body: body, CommentAt: atResp.Uri, @@ -692,7 +692,7 @@ func (s *Pulls) NewPull(w http.ResponseWriter, r *http.Request) { return } - result, err := us.Branches(f.OwnerDid(), f.RepoName) + result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to fetch branches", err) return @@ -816,7 +816,7 @@ func (s *Pulls) handleBranchBasedPull( return } - comparison, err := ksClient.Compare(f.OwnerDid(), f.RepoName, targetBranch, sourceBranch) + comparison, err := ksClient.Compare(f.OwnerDid(), f.Name, targetBranch, sourceBranch) if err != nil { log.Println("failed to compare", err) s.pages.Notice(w, "pull", err.Error()) @@ -1007,7 +1007,7 @@ func (s *Pulls) createPullRequest( Body: body, TargetBranch: targetBranch, OwnerDid: user.Did, - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Rkey: rkey, Submissions: []*db.PullSubmission{ &initialSubmission, @@ -1020,7 +1020,7 @@ func (s *Pulls) createPullRequest( s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") return } - pullId, err := db.NextPullId(tx, f.RepoAt) + pullId, err := db.NextPullId(tx, f.RepoAt()) if err != nil { log.Println("failed to get pull id", err) s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") @@ -1035,7 +1035,7 @@ func (s *Pulls) createPullRequest( Val: &tangled.RepoPull{ Title: title, PullId: int64(pullId), - TargetRepo: string(f.RepoAt), + TargetRepo: string(f.RepoAt()), TargetBranch: targetBranch, Patch: patch, Source: recordPullSource, @@ -1213,7 +1213,7 @@ func (s *Pulls) CompareBranchesFragment(w http.ResponseWriter, r *http.Request) return } - result, err := us.Branches(f.OwnerDid(), f.RepoName) + result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return @@ -1297,7 +1297,7 @@ func (s *Pulls) CompareForksBranchesFragment(w http.ResponseWriter, r *http.Requ return } - targetResult, err := targetBranchesClient.Branches(f.OwnerDid(), f.RepoName) + targetResult, err := targetBranchesClient.Branches(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver for target branches", err) return @@ -1413,7 +1413,7 @@ func (s *Pulls) resubmitBranch(w http.ResponseWriter, r *http.Request) { return } - comparison, err := ksClient.Compare(f.OwnerDid(), f.RepoName, pull.TargetBranch, pull.PullSource.Branch) + comparison, err := ksClient.Compare(f.OwnerDid(), f.Name, pull.TargetBranch, pull.PullSource.Branch) if err != nil { log.Printf("compare request failed: %s", err) s.pages.Notice(w, "resubmit-error", err.Error()) @@ -1597,7 +1597,7 @@ func (s *Pulls) resubmitPullHelper( Val: &tangled.RepoPull{ Title: pull.Title, PullId: int64(pull.PullId), - TargetRepo: string(f.RepoAt), + TargetRepo: string(f.RepoAt()), TargetBranch: pull.TargetBranch, Patch: patch, // new patch Source: recordPullSource, @@ -1924,7 +1924,7 @@ func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) { } // Merge the pull request - resp, err := ksClient.Merge([]byte(patch), f.OwnerDid(), f.RepoName, pull.TargetBranch, pull.Title, pull.Body, ident.Handle.String(), email.Address) + resp, err := ksClient.Merge([]byte(patch), f.OwnerDid(), f.Name, pull.TargetBranch, pull.Title, pull.Body, ident.Handle.String(), email.Address) if err != nil { log.Printf("failed to merge pull request: %s", err) s.pages.Notice(w, "pull-merge-error", "Failed to merge pull request. Try again later.") @@ -1946,7 +1946,7 @@ func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) { defer tx.Rollback() for _, p := range pullsToMerge { - err := db.MergePull(tx, f.RepoAt, p.PullId) + err := db.MergePull(tx, f.RepoAt(), p.PullId) if err != nil { log.Printf("failed to update pull request status in database: %s", err) s.pages.Notice(w, "pull-merge-error", "Failed to merge pull request. Try again later.") @@ -1962,7 +1962,7 @@ func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) { return } - s.pages.HxLocation(w, fmt.Sprintf("/@%s/%s/pulls/%d", f.OwnerHandle(), f.RepoName, pull.PullId)) + s.pages.HxLocation(w, fmt.Sprintf("/@%s/%s/pulls/%d", f.OwnerHandle(), f.Name, pull.PullId)) } func (s *Pulls) ClosePull(w http.ResponseWriter, r *http.Request) { @@ -2014,7 +2014,7 @@ func (s *Pulls) ClosePull(w http.ResponseWriter, r *http.Request) { for _, p := range pullsToClose { // Close the pull in the database - err = db.ClosePull(tx, f.RepoAt, p.PullId) + err = db.ClosePull(tx, f.RepoAt(), p.PullId) if err != nil { log.Println("failed to close pull", err) s.pages.Notice(w, "pull-close", "Failed to close pull.") @@ -2082,7 +2082,7 @@ func (s *Pulls) ReopenPull(w http.ResponseWriter, r *http.Request) { for _, p := range pullsToReopen { // Close the pull in the database - err = db.ReopenPull(tx, f.RepoAt, p.PullId) + err = db.ReopenPull(tx, f.RepoAt(), p.PullId) if err != nil { log.Println("failed to close pull", err) s.pages.Notice(w, "pull-close", "Failed to close pull.") @@ -2134,7 +2134,7 @@ func newStack(f *reporesolver.ResolvedRepo, user *oauth.User, targetBranch, patc Body: body, TargetBranch: targetBranch, OwnerDid: user.Did, - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Rkey: rkey, Submissions: []*db.PullSubmission{ &initialSubmission, diff --git a/appview/repo/artifact.go b/appview/repo/artifact.go index e9124da..151fd91 100644 --- a/appview/repo/artifact.go +++ b/appview/repo/artifact.go @@ -76,7 +76,7 @@ func (rp *Repo) AttachArtifact(w http.ResponseWriter, r *http.Request) { Artifact: uploadBlobResp.Blob, CreatedAt: createdAt.Format(time.RFC3339), Name: handler.Filename, - Repo: f.RepoAt.String(), + Repo: f.RepoAt().String(), Tag: tag.Tag.Hash[:], }, }, @@ -100,7 +100,7 @@ func (rp *Repo) AttachArtifact(w http.ResponseWriter, r *http.Request) { artifact := db.Artifact{ Did: user.Did, Rkey: rkey, - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Tag: tag.Tag.Hash, CreatedAt: createdAt, BlobCid: cid.Cid(uploadBlobResp.Blob.Ref), @@ -155,7 +155,7 @@ func (rp *Repo) DownloadArtifact(w http.ResponseWriter, r *http.Request) { artifacts, err := db.GetArtifact( rp.db, - db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("repo_at", f.RepoAt()), db.FilterEq("tag", tag.Tag.Hash[:]), db.FilterEq("name", filename), ) @@ -197,7 +197,7 @@ func (rp *Repo) DeleteArtifact(w http.ResponseWriter, r *http.Request) { artifacts, err := db.GetArtifact( rp.db, - db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("repo_at", f.RepoAt()), db.FilterEq("tag", tag[:]), db.FilterEq("name", filename), ) @@ -239,7 +239,7 @@ func (rp *Repo) DeleteArtifact(w http.ResponseWriter, r *http.Request) { defer tx.Rollback() err = db.DeleteArtifact(tx, - db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("repo_at", f.RepoAt()), db.FilterEq("tag", artifact.Tag[:]), db.FilterEq("name", filename), ) @@ -270,7 +270,7 @@ func (rp *Repo) resolveTag(f *reporesolver.ResolvedRepo, tagParam string) (*type return nil, err } - result, err := us.Tags(f.OwnerDid(), f.RepoName) + result, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return nil, err diff --git a/appview/repo/index.go b/appview/repo/index.go index 2661325..3325f08 100644 --- a/appview/repo/index.go +++ b/appview/repo/index.go @@ -37,7 +37,7 @@ func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) { return } - result, err := us.Index(f.OwnerDid(), f.RepoName, ref) + result, err := us.Index(f.OwnerDid(), f.Name, ref) if err != nil { rp.pages.Error503(w) log.Println("failed to reach knotserver", err) @@ -166,13 +166,13 @@ func (rp *Repo) getLanguageInfo( // first attempt to fetch from db langs, err := db.GetRepoLanguages( rp.db, - db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("repo_at", f.RepoAt()), db.FilterEq("ref", f.Ref), ) if err != nil || langs == nil { // non-fatal, fetch langs from ks - ls, err := signedClient.RepoLanguages(f.OwnerDid(), f.RepoName, f.Ref) + ls, err := signedClient.RepoLanguages(f.OwnerDid(), f.Name, f.Ref) if err != nil { return nil, err } @@ -182,7 +182,7 @@ func (rp *Repo) getLanguageInfo( for l, s := range ls.Languages { langs = append(langs, db.RepoLanguage{ - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Ref: f.Ref, IsDefaultRef: isDefaultRef, Language: l, @@ -279,7 +279,7 @@ func getForkInfo( hiddenRef := fmt.Sprintf("hidden/%s/%s", f.Ref, f.Ref) var status types.AncestorCheckResponse - forkSyncableResp, err := signedClient.RepoForkAheadBehind(user.Did, string(f.RepoAt), repoInfo.Name, f.Ref, hiddenRef) + forkSyncableResp, err := signedClient.RepoForkAheadBehind(user.Did, string(f.RepoAt()), repoInfo.Name, f.Ref, hiddenRef) if err != nil { log.Printf("failed to check if fork is ahead/behind: %s", err) return nil, err diff --git a/appview/repo/repo.go b/appview/repo/repo.go index cd6475a..a68ab5d 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -95,7 +95,7 @@ func (rp *Repo) DownloadArchive(w http.ResponseWriter, r *http.Request) { } else { uri = "https" } - url := fmt.Sprintf("%s://%s/%s/%s/archive/%s.tar.gz", uri, f.Knot, f.OwnerDid(), f.RepoName, url.PathEscape(refParam)) + url := fmt.Sprintf("%s://%s/%s/%s/archive/%s.tar.gz", uri, f.Knot, f.OwnerDid(), f.Name, url.PathEscape(refParam)) http.Redirect(w, r, url, http.StatusFound) } @@ -123,13 +123,13 @@ func (rp *Repo) RepoLog(w http.ResponseWriter, r *http.Request) { return } - repolog, err := us.Log(f.OwnerDid(), f.RepoName, ref, page) + repolog, err := us.Log(f.OwnerDid(), f.Name, ref, page) if err != nil { log.Println("failed to reach knotserver", err) return } - tagResult, err := us.Tags(f.OwnerDid(), f.RepoName) + tagResult, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return @@ -144,7 +144,7 @@ func (rp *Repo) RepoLog(w http.ResponseWriter, r *http.Request) { tagMap[hash] = append(tagMap[hash], tag.Name) } - branchResult, err := us.Branches(f.OwnerDid(), f.RepoName) + branchResult, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return @@ -212,7 +212,7 @@ func (rp *Repo) RepoDescription(w http.ResponseWriter, r *http.Request) { return } - repoAt := f.RepoAt + repoAt := f.RepoAt() rkey := repoAt.RecordKey().String() if rkey == "" { log.Println("invalid aturi for repo", err) @@ -262,9 +262,9 @@ func (rp *Repo) RepoDescription(w http.ResponseWriter, r *http.Request) { Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.Repo{ Knot: f.Knot, - Name: f.RepoName, + Name: f.Name, Owner: user.Did, - CreatedAt: f.CreatedAt, + CreatedAt: f.Created.Format(time.RFC3339), Description: &newDescription, Spindle: &f.Spindle, }, @@ -310,7 +310,7 @@ func (rp *Repo) RepoCommit(w http.ResponseWriter, r *http.Request) { return } - resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/commit/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref)) + resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/commit/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref)) if err != nil { log.Println("failed to reach knotserver", err) return @@ -375,7 +375,7 @@ func (rp *Repo) RepoTree(w http.ResponseWriter, r *http.Request) { if !rp.config.Core.Dev { protocol = "https" } - resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/tree/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, treePath)) + resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/tree/%s/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref, treePath)) if err != nil { log.Println("failed to reach knotserver", err) return @@ -405,7 +405,7 @@ func (rp *Repo) RepoTree(w http.ResponseWriter, r *http.Request) { user := rp.oauth.GetUser(r) var breadcrumbs [][]string - breadcrumbs = append(breadcrumbs, []string{f.RepoName, fmt.Sprintf("/%s/tree/%s", f.OwnerSlashRepo(), ref)}) + breadcrumbs = append(breadcrumbs, []string{f.Name, fmt.Sprintf("/%s/tree/%s", f.OwnerSlashRepo(), ref)}) if treePath != "" { for idx, elem := range strings.Split(treePath, "/") { breadcrumbs = append(breadcrumbs, []string{elem, fmt.Sprintf("%s/%s", breadcrumbs[idx][1], elem)}) @@ -436,13 +436,13 @@ func (rp *Repo) RepoTags(w http.ResponseWriter, r *http.Request) { return } - result, err := us.Tags(f.OwnerDid(), f.RepoName) + result, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return } - artifacts, err := db.GetArtifact(rp.db, db.FilterEq("repo_at", f.RepoAt)) + artifacts, err := db.GetArtifact(rp.db, db.FilterEq("repo_at", f.RepoAt())) if err != nil { log.Println("failed grab artifacts", err) return @@ -493,7 +493,7 @@ func (rp *Repo) RepoBranches(w http.ResponseWriter, r *http.Request) { return } - result, err := us.Branches(f.OwnerDid(), f.RepoName) + result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return @@ -522,7 +522,7 @@ func (rp *Repo) RepoBlob(w http.ResponseWriter, r *http.Request) { if !rp.config.Core.Dev { protocol = "https" } - resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/blob/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, filePath)) + resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/blob/%s/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref, filePath)) if err != nil { log.Println("failed to reach knotserver", err) return @@ -542,7 +542,7 @@ func (rp *Repo) RepoBlob(w http.ResponseWriter, r *http.Request) { } var breadcrumbs [][]string - breadcrumbs = append(breadcrumbs, []string{f.RepoName, fmt.Sprintf("/%s/tree/%s", f.OwnerSlashRepo(), ref)}) + breadcrumbs = append(breadcrumbs, []string{f.Name, fmt.Sprintf("/%s/tree/%s", f.OwnerSlashRepo(), ref)}) if filePath != "" { for idx, elem := range strings.Split(filePath, "/") { breadcrumbs = append(breadcrumbs, []string{elem, fmt.Sprintf("%s/%s", breadcrumbs[idx][1], elem)}) @@ -575,7 +575,7 @@ func (rp *Repo) RepoBlob(w http.ResponseWriter, r *http.Request) { // fetch the actual binary content like in RepoBlobRaw - blobURL := fmt.Sprintf("%s://%s/%s/%s/raw/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, filePath) + blobURL := fmt.Sprintf("%s://%s/%s/%s/raw/%s/%s", protocol, f.Knot, f.OwnerDid(), f.Name, ref, filePath) contentSrc = blobURL if !rp.config.Core.Dev { contentSrc = markup.GenerateCamoURL(rp.config.Camo.Host, rp.config.Camo.SharedSecret, blobURL) @@ -612,7 +612,7 @@ func (rp *Repo) RepoBlobRaw(w http.ResponseWriter, r *http.Request) { if !rp.config.Core.Dev { protocol = "https" } - blobURL := fmt.Sprintf("%s://%s/%s/%s/raw/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, filePath) + blobURL := fmt.Sprintf("%s://%s/%s/%s/raw/%s/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref, filePath) resp, err := http.Get(blobURL) if err != nil { log.Println("failed to reach knotserver:", err) @@ -668,7 +668,7 @@ func (rp *Repo) EditSpindle(w http.ResponseWriter, r *http.Request) { return } - repoAt := f.RepoAt + repoAt := f.RepoAt() rkey := repoAt.RecordKey().String() if rkey == "" { fail("Failed to resolve repo. Try again later", err) @@ -722,9 +722,9 @@ func (rp *Repo) EditSpindle(w http.ResponseWriter, r *http.Request) { Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.Repo{ Knot: f.Knot, - Name: f.RepoName, + Name: f.Name, Owner: user.Did, - CreatedAt: f.CreatedAt, + CreatedAt: f.Created.Format(time.RFC3339), Description: &f.Description, Spindle: spindlePtr, }, @@ -805,7 +805,7 @@ func (rp *Repo) AddCollaborator(w http.ResponseWriter, r *http.Request) { Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.RepoCollaborator{ Subject: collaboratorIdent.DID.String(), - Repo: string(f.RepoAt), + Repo: string(f.RepoAt()), CreatedAt: createdAt.Format(time.RFC3339), }}, }) @@ -830,7 +830,7 @@ func (rp *Repo) AddCollaborator(w http.ResponseWriter, r *http.Request) { return } - ksResp, err := ksClient.AddCollaborator(f.OwnerDid(), f.RepoName, collaboratorIdent.DID.String()) + ksResp, err := ksClient.AddCollaborator(f.OwnerDid(), f.Name, collaboratorIdent.DID.String()) if err != nil { fail("Knot was unreachable.", err) return @@ -864,7 +864,7 @@ func (rp *Repo) AddCollaborator(w http.ResponseWriter, r *http.Request) { Did: syntax.DID(currentUser.Did), Rkey: rkey, SubjectDid: collaboratorIdent.DID, - RepoAt: f.RepoAt, + RepoAt: f.RepoAt(), Created: createdAt, }) if err != nil { @@ -902,18 +902,17 @@ func (rp *Repo) DeleteRepo(w http.ResponseWriter, r *http.Request) { log.Println("failed to get authorized client", err) return } - repoRkey := f.RepoAt.RecordKey().String() _, err = xrpcClient.RepoDeleteRecord(r.Context(), &comatproto.RepoDeleteRecord_Input{ Collection: tangled.RepoNSID, Repo: user.Did, - Rkey: repoRkey, + Rkey: f.Rkey, }) if err != nil { log.Printf("failed to delete record: %s", err) rp.pages.Notice(w, "settings-delete", "Failed to delete repository from PDS.") return } - log.Println("removed repo record ", f.RepoAt.String()) + log.Println("removed repo record ", f.RepoAt().String()) secret, err := db.GetRegistrationKey(rp.db, f.Knot) if err != nil { @@ -927,7 +926,7 @@ func (rp *Repo) DeleteRepo(w http.ResponseWriter, r *http.Request) { return } - ksResp, err := ksClient.RemoveRepo(f.OwnerDid(), f.RepoName) + ksResp, err := ksClient.RemoveRepo(f.OwnerDid(), f.Name) if err != nil { log.Printf("failed to make request to %s: %s", f.Knot, err) return @@ -973,7 +972,7 @@ func (rp *Repo) DeleteRepo(w http.ResponseWriter, r *http.Request) { } // remove repo from db - err = db.RemoveRepo(tx, f.OwnerDid(), f.RepoName) + err = db.RemoveRepo(tx, f.OwnerDid(), f.Name) if err != nil { rp.pages.Notice(w, "settings-delete", "Failed to update appview") return @@ -1022,7 +1021,7 @@ func (rp *Repo) SetDefaultBranch(w http.ResponseWriter, r *http.Request) { return } - ksResp, err := ksClient.SetDefaultBranch(f.OwnerDid(), f.RepoName, branch) + ksResp, err := ksClient.SetDefaultBranch(f.OwnerDid(), f.Name, branch) if err != nil { log.Printf("failed to make request to %s: %s", f.Knot, err) return @@ -1089,7 +1088,7 @@ func (rp *Repo) Secrets(w http.ResponseWriter, r *http.Request) { r.Context(), spindleClient, &tangled.RepoAddSecret_Input{ - Repo: f.RepoAt.String(), + Repo: f.RepoAt().String(), Key: key, Value: value, }, @@ -1107,7 +1106,7 @@ func (rp *Repo) Secrets(w http.ResponseWriter, r *http.Request) { r.Context(), spindleClient, &tangled.RepoRemoveSecret_Input{ - Repo: f.RepoAt.String(), + Repo: f.RepoAt().String(), Key: key, }, ) @@ -1169,7 +1168,7 @@ func (rp *Repo) RepoSettings(w http.ResponseWriter, r *http.Request) { // return // } - // result, err := us.Branches(f.OwnerDid(), f.RepoName) + // result, err := us.Branches(f.OwnerDid(), f.Name) // if err != nil { // log.Println("failed to reach knotserver", err) // return @@ -1191,7 +1190,7 @@ func (rp *Repo) RepoSettings(w http.ResponseWriter, r *http.Request) { // oauth.WithDev(rp.config.Core.Dev), // ); err != nil { // log.Println("failed to create spindle client", err) - // } else if resp, err := tangled.RepoListSecrets(r.Context(), spindleClient, f.RepoAt.String()); err != nil { + // } else if resp, err := tangled.RepoListSecrets(r.Context(), spindleClient, f.RepoAt().String()); err != nil { // log.Println("failed to fetch secrets", err) // } else { // secrets = resp.Secrets @@ -1220,7 +1219,7 @@ func (rp *Repo) generalSettings(w http.ResponseWriter, r *http.Request) { return } - result, err := us.Branches(f.OwnerDid(), f.RepoName) + result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { log.Println("failed to reach knotserver", err) return @@ -1273,7 +1272,7 @@ func (rp *Repo) pipelineSettings(w http.ResponseWriter, r *http.Request) { oauth.WithDev(rp.config.Core.Dev), ); err != nil { log.Println("failed to create spindle client", err) - } else if resp, err := tangled.RepoListSecrets(r.Context(), spindleClient, f.RepoAt.String()); err != nil { + } else if resp, err := tangled.RepoListSecrets(r.Context(), spindleClient, f.RepoAt().String()); err != nil { log.Println("failed to fetch secrets", err) } else { secrets = resp.Secrets @@ -1341,8 +1340,8 @@ func (rp *Repo) SyncRepoFork(w http.ResponseWriter, r *http.Request) { } else { uri = "https" } - forkName := fmt.Sprintf("%s", f.RepoName) - forkSourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName) + forkName := fmt.Sprintf("%s", f.Name) + forkSourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.Repo.Name) _, err = client.SyncRepoFork(user.Did, forkSourceUrl, forkName, f.Ref) if err != nil { @@ -1392,11 +1391,11 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { return } - forkName := fmt.Sprintf("%s", f.RepoName) + forkName := fmt.Sprintf("%s", f.Name) // this check is *only* to see if the forked repo name already exists // in the user's account. - existingRepo, err := db.GetRepo(rp.db, user.Did, f.RepoName) + existingRepo, err := db.GetRepo(rp.db, user.Did, f.Name) if err != nil { if errors.Is(err, sql.ErrNoRows) { // no existing repo with this name found, we can use the name as is @@ -1427,8 +1426,8 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { } else { uri = "https" } - forkSourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName) - sourceAt := f.RepoAt.String() + forkSourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.Repo.Name) + sourceAt := f.RepoAt().String() rkey := tid.TID() repo := &db.Repo{ @@ -1548,7 +1547,7 @@ func (rp *Repo) RepoCompareNew(w http.ResponseWriter, r *http.Request) { return } - result, err := us.Branches(f.OwnerDid(), f.RepoName) + result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.") log.Println("failed to reach knotserver", err) @@ -1578,7 +1577,7 @@ func (rp *Repo) RepoCompareNew(w http.ResponseWriter, r *http.Request) { head = queryHead } - tags, err := us.Tags(f.OwnerDid(), f.RepoName) + tags, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.") log.Println("failed to reach knotserver", err) @@ -1640,21 +1639,21 @@ func (rp *Repo) RepoCompare(w http.ResponseWriter, r *http.Request) { return } - branches, err := us.Branches(f.OwnerDid(), f.RepoName) + branches, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.") log.Println("failed to reach knotserver", err) return } - tags, err := us.Tags(f.OwnerDid(), f.RepoName) + tags, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.") log.Println("failed to reach knotserver", err) return } - formatPatch, err := us.Compare(f.OwnerDid(), f.RepoName, base, head) + formatPatch, err := us.Compare(f.OwnerDid(), f.Name, base, head) if err != nil { rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.") log.Println("failed to compare", err) diff --git a/appview/reporesolver/resolver.go b/appview/reporesolver/resolver.go index c622c29..bf8b8bb 100644 --- a/appview/reporesolver/resolver.go +++ b/appview/reporesolver/resolver.go @@ -12,7 +12,6 @@ import ( "strings" "github.com/bluesky-social/indigo/atproto/identity" - "github.com/bluesky-social/indigo/atproto/syntax" securejoin "github.com/cyphar/filepath-securejoin" "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/appview/config" @@ -26,13 +25,8 @@ import ( ) type ResolvedRepo struct { - Knot string + db.Repo OwnerId identity.Identity - RepoName string - RepoAt syntax.ATURI - Description string - Spindle string - CreatedAt string Ref string CurrentDir string @@ -51,10 +45,9 @@ func New(config *config.Config, enforcer *rbac.Enforcer, resolver *idresolver.Re } func (rr *RepoResolver) Resolve(r *http.Request) (*ResolvedRepo, error) { - repoName := chi.URLParam(r, "repo") - knot, ok := r.Context().Value("knot").(string) + repo, ok := r.Context().Value("repo").(*db.Repo) if !ok { - log.Println("malformed middleware") + log.Println("malformed middleware: `repo` not exist in context") return nil, fmt.Errorf("malformed middleware") } id, ok := r.Context().Value("resolvedId").(identity.Identity) @@ -63,27 +56,15 @@ func (rr *RepoResolver) Resolve(r *http.Request) (*ResolvedRepo, error) { return nil, fmt.Errorf("malformed middleware") } - repoAt, ok := r.Context().Value("repoAt").(string) - if !ok { - log.Println("malformed middleware") - return nil, fmt.Errorf("malformed middleware") - } - - parsedRepoAt, err := syntax.ParseATURI(repoAt) - if err != nil { - log.Println("malformed repo at-uri") - return nil, fmt.Errorf("malformed middleware") - } - ref := chi.URLParam(r, "ref") if ref == "" { - us, err := knotclient.NewUnsignedClient(knot, rr.config.Core.Dev) + us, err := knotclient.NewUnsignedClient(repo.Knot, rr.config.Core.Dev) if err != nil { return nil, err } - defaultBranch, err := us.DefaultBranch(id.DID.String(), repoName) + defaultBranch, err := us.DefaultBranch(id.DID.String(), repo.Name) if err != nil { return nil, err } @@ -93,21 +74,11 @@ func (rr *RepoResolver) Resolve(r *http.Request) (*ResolvedRepo, error) { currentDir := path.Dir(extractPathAfterRef(r.URL.EscapedPath(), ref)) - // pass through values from the middleware - description, ok := r.Context().Value("repoDescription").(string) - addedAt, ok := r.Context().Value("repoAddedAt").(string) - spindle, ok := r.Context().Value("repoSpindle").(string) - return &ResolvedRepo{ - Knot: knot, - OwnerId: id, - RepoName: repoName, - RepoAt: parsedRepoAt, - Description: description, - CreatedAt: addedAt, - Ref: ref, - CurrentDir: currentDir, - Spindle: spindle, + Repo: *repo, + OwnerId: id, + Ref: ref, + CurrentDir: currentDir, rr: rr, }, nil @@ -126,19 +97,14 @@ func (f *ResolvedRepo) OwnerSlashRepo() string { var p string if handle != "" && !handle.IsInvalidHandle() { - p, _ = securejoin.SecureJoin(fmt.Sprintf("@%s", handle), f.RepoName) + p, _ = securejoin.SecureJoin(fmt.Sprintf("@%s", handle), f.Name) } else { - p, _ = securejoin.SecureJoin(f.OwnerDid(), f.RepoName) + p, _ = securejoin.SecureJoin(f.OwnerDid(), f.Name) } return p } -func (f *ResolvedRepo) DidSlashRepo() string { - p, _ := securejoin.SecureJoin(f.OwnerDid(), f.RepoName) - return p -} - func (f *ResolvedRepo) Collaborators(ctx context.Context) ([]pages.Collaborator, error) { repoCollaborators, err := f.rr.enforcer.E.GetImplicitUsersForResourceByDomain(f.DidSlashRepo(), f.Knot) if err != nil { @@ -187,28 +153,29 @@ func (f *ResolvedRepo) Collaborators(ctx context.Context) ([]pages.Collaborator, // this function is a bit weird since it now returns RepoInfo from an entirely different // package. we should refactor this or get rid of RepoInfo entirely. func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { + repoAt := f.RepoAt() isStarred := false if user != nil { - isStarred = db.GetStarStatus(f.rr.execer, user.Did, syntax.ATURI(f.RepoAt)) + isStarred = db.GetStarStatus(f.rr.execer, user.Did, repoAt) } - starCount, err := db.GetStarCount(f.rr.execer, f.RepoAt) + starCount, err := db.GetStarCount(f.rr.execer, repoAt) if err != nil { - log.Println("failed to get star count for ", f.RepoAt) + log.Println("failed to get star count for ", repoAt) } - issueCount, err := db.GetIssueCount(f.rr.execer, f.RepoAt) + issueCount, err := db.GetIssueCount(f.rr.execer, repoAt) if err != nil { - log.Println("failed to get issue count for ", f.RepoAt) + log.Println("failed to get issue count for ", repoAt) } - pullCount, err := db.GetPullCount(f.rr.execer, f.RepoAt) + pullCount, err := db.GetPullCount(f.rr.execer, repoAt) if err != nil { - log.Println("failed to get issue count for ", f.RepoAt) + log.Println("failed to get issue count for ", repoAt) } - source, err := db.GetRepoSource(f.rr.execer, f.RepoAt) + source, err := db.GetRepoSource(f.rr.execer, repoAt) if errors.Is(err, sql.ErrNoRows) { source = "" } else if err != nil { - log.Println("failed to get repo source for ", f.RepoAt, err) + log.Println("failed to get repo source for ", repoAt, err) } var sourceRepo *db.Repo @@ -233,9 +200,9 @@ func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { if err != nil { log.Printf("failed to create unsigned client for %s: %v", knot, err) } else { - result, err := us.Branches(f.OwnerDid(), f.RepoName) + result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { - log.Printf("failed to get branches for %s/%s: %v", f.OwnerDid(), f.RepoName, err) + log.Printf("failed to get branches for %s/%s: %v", f.OwnerDid(), f.Name, err) } if len(result.Branches) == 0 { @@ -246,8 +213,8 @@ func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { repoInfo := repoinfo.RepoInfo{ OwnerDid: f.OwnerDid(), OwnerHandle: f.OwnerHandle(), - Name: f.RepoName, - RepoAt: f.RepoAt, + Name: f.Name, + RepoAt: repoAt, Description: f.Description, Ref: f.Ref, IsStarred: isStarred, -- 2.43.0 From 26adbe09fe970f81056552b78c5672b0902a2a3b Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Fri, 1 Aug 2025 22:52:43 +0900 Subject: [PATCH] apview: replace all use of `db.Repo.AtUri` with `db.Repo.RepoAt()` Change-Id: ystmvoqyowpusnnuunrztmppvpwrnvno Signed-off-by: Seongmin Lee --- appview/db/repos.go | 11 +++++++---- appview/pulls/pulls.go | 11 +++-------- appview/repo/repo.go | 1 - appview/state/state.go | 1 - 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/appview/db/repos.go b/appview/db/repos.go index 61e5029..9c82b20 100644 --- a/appview/db/repos.go +++ b/appview/db/repos.go @@ -391,7 +391,7 @@ func GetRepo(e Execer, did, name string) (*Repo, error) { var description, spindle sql.NullString row := e.QueryRow(` - select did, name, knot, created, at_uri, description, spindle + select did, name, knot, created, at_uri, description, spindle, rkey from repos where did = ? and name = ? `, @@ -400,7 +400,7 @@ func GetRepo(e Execer, did, name string) (*Repo, error) { ) var createdAt string - if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.AtUri, &description, &spindle); err != nil { + if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.AtUri, &description, &spindle, &repo.Rkey); err != nil { return nil, err } createdAtTime, _ := time.Parse(time.RFC3339, createdAt) @@ -421,10 +421,10 @@ func GetRepoByAtUri(e Execer, atUri string) (*Repo, error) { var repo Repo var nullableDescription sql.NullString - row := e.QueryRow(`select did, name, knot, created, at_uri, description from repos where at_uri = ?`, atUri) + row := e.QueryRow(`select did, name, knot, created, at_uri, rkey, description from repos where at_uri = ?`, atUri) var createdAt string - if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.AtUri, &nullableDescription); err != nil { + if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.AtUri, &repo.Rkey, &nullableDescription); err != nil { return nil, err } createdAtTime, _ := time.Parse(time.RFC3339, createdAt) @@ -440,6 +440,9 @@ func GetRepoByAtUri(e Execer, atUri string) (*Repo, error) { } func AddRepo(e Execer, repo *Repo) error { + if repo.AtUri == "" { + repo.AtUri = repo.RepoAt().String() + } _, err := e.Exec( `insert into repos (did, name, knot, rkey, at_uri, description, source) diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 15e4962..804baa0 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -28,7 +28,6 @@ import ( "github.com/bluekeyes/go-gitdiff/gitdiff" comatproto "github.com/bluesky-social/indigo/api/atproto" - "github.com/bluesky-social/indigo/atproto/syntax" lexutil "github.com/bluesky-social/indigo/lex/util" "github.com/go-chi/chi/v5" "github.com/google/uuid" @@ -918,12 +917,8 @@ func (s *Pulls) handleForkBasedPull(w http.ResponseWriter, r *http.Request, f *r return } - forkAtUri, err := syntax.ParseATURI(fork.AtUri) - if err != nil { - log.Println("failed to parse fork AT URI", err) - s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") - return - } + forkAtUri := fork.RepoAt() + forkAtUriStr := forkAtUri.String() pullSource := &db.PullSource{ Branch: sourceBranch, @@ -931,7 +926,7 @@ func (s *Pulls) handleForkBasedPull(w http.ResponseWriter, r *http.Request, f *r } recordPullSource := &tangled.RepoPull_Source{ Branch: sourceBranch, - Repo: &fork.AtUri, + Repo: &forkAtUriStr, Sha: sourceRev, } diff --git a/appview/repo/repo.go b/appview/repo/repo.go index a68ab5d..40c530a 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -1496,7 +1496,6 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { } log.Println("created repo record: ", atresp.Uri) - repo.AtUri = atresp.Uri err = db.AddRepo(tx, repo) if err != nil { log.Println(err) diff --git a/appview/state/state.go b/appview/state/state.go index e2df9ee..03f70fd 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -381,7 +381,6 @@ func (s *State) NewRepo(w http.ResponseWriter, r *http.Request) { // continue } - repo.AtUri = atresp.Uri err = db.AddRepo(tx, repo) if err != nil { log.Println(err) -- 2.43.0 From 0a65a3f9c387c4396f8ba46c27c25e721626ce55 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Mon, 11 Aug 2025 22:43:25 +0900 Subject: [PATCH] appview: db/repos: remove `AtUri` from `Repo` Change-Id: vmuzrnrlmtrytntmzukwrxmzspmylouw sqlite db still has `at_uri` column to easily use as reference Signed-off-by: Seongmin Lee --- appview/db/repos.go | 22 +++++++++------------- appview/db/star.go | 4 +--- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/appview/db/repos.go b/appview/db/repos.go index 9c82b20..dfd0c25 100644 --- a/appview/db/repos.go +++ b/appview/db/repos.go @@ -19,7 +19,6 @@ type Repo struct { Knot string Rkey string Created time.Time - AtUri string Description string Spindle string @@ -391,7 +390,7 @@ func GetRepo(e Execer, did, name string) (*Repo, error) { var description, spindle sql.NullString row := e.QueryRow(` - select did, name, knot, created, at_uri, description, spindle, rkey + select did, name, knot, created, description, spindle, rkey from repos where did = ? and name = ? `, @@ -400,7 +399,7 @@ func GetRepo(e Execer, did, name string) (*Repo, error) { ) var createdAt string - if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.AtUri, &description, &spindle, &repo.Rkey); err != nil { + if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &description, &spindle, &repo.Rkey); err != nil { return nil, err } createdAtTime, _ := time.Parse(time.RFC3339, createdAt) @@ -421,10 +420,10 @@ func GetRepoByAtUri(e Execer, atUri string) (*Repo, error) { var repo Repo var nullableDescription sql.NullString - row := e.QueryRow(`select did, name, knot, created, at_uri, rkey, description from repos where at_uri = ?`, atUri) + row := e.QueryRow(`select did, name, knot, created, rkey, description from repos where at_uri = ?`, atUri) var createdAt string - if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.AtUri, &repo.Rkey, &nullableDescription); err != nil { + if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt, &repo.Rkey, &nullableDescription); err != nil { return nil, err } createdAtTime, _ := time.Parse(time.RFC3339, createdAt) @@ -440,14 +439,11 @@ func GetRepoByAtUri(e Execer, atUri string) (*Repo, error) { } func AddRepo(e Execer, repo *Repo) error { - if repo.AtUri == "" { - repo.AtUri = repo.RepoAt().String() - } _, err := e.Exec( `insert into repos (did, name, knot, rkey, at_uri, description, source) values (?, ?, ?, ?, ?, ?, ?)`, - repo.Did, repo.Name, repo.Knot, repo.Rkey, repo.AtUri, repo.Description, repo.Source, + repo.Did, repo.Name, repo.Knot, repo.Rkey, repo.RepoAt().String(), repo.Description, repo.Source, ) return err } @@ -470,7 +466,7 @@ func GetForksByDid(e Execer, did string) ([]Repo, error) { var repos []Repo rows, err := e.Query( - `select did, name, knot, rkey, description, created, at_uri, source + `select did, name, knot, rkey, description, created, source from repos where did = ? and source is not null and source != '' order by created desc`, @@ -487,7 +483,7 @@ func GetForksByDid(e Execer, did string) ([]Repo, error) { var nullableDescription sql.NullString var nullableSource sql.NullString - err := rows.Scan(&repo.Did, &repo.Name, &repo.Knot, &repo.Rkey, &nullableDescription, &createdAt, &repo.AtUri, &nullableSource) + err := rows.Scan(&repo.Did, &repo.Name, &repo.Knot, &repo.Rkey, &nullableDescription, &createdAt, &nullableSource) if err != nil { return nil, err } @@ -524,13 +520,13 @@ func GetForkByDid(e Execer, did string, name string) (*Repo, error) { var nullableSource sql.NullString row := e.QueryRow( - `select did, name, knot, rkey, description, created, at_uri, source + `select did, name, knot, rkey, description, created, source from repos where did = ? and name = ? and source is not null and source != ''`, did, name, ) - err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &repo.Rkey, &nullableDescription, &createdAt, &repo.AtUri, &nullableSource) + err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &repo.Rkey, &nullableDescription, &createdAt, &nullableSource) if err != nil { return nil, err } diff --git a/appview/db/star.go b/appview/db/star.go index 1b23943..7a005f3 100644 --- a/appview/db/star.go +++ b/appview/db/star.go @@ -196,8 +196,7 @@ func GetAllStars(e Execer, limit int) ([]Star, error) { r.name, r.knot, r.rkey, - r.created, - r.at_uri + r.created from stars s join repos r on s.repo_at = r.at_uri `) @@ -222,7 +221,6 @@ func GetAllStars(e Execer, limit int) ([]Star, error) { &repo.Knot, &repo.Rkey, &repoCreatedAt, - &repo.AtUri, ); err != nil { return nil, err } -- 2.43.0