From 6d220540c15e68196404951e8b67cac8002d1a6f Mon Sep 17 00:00:00 2001 From: Joe Chen Date: Sat, 4 Feb 2023 13:36:00 +0800 Subject: refactor(db): migrate methods off `user.go` (#7334) --- internal/route/repo/commit.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'internal/route/repo/commit.go') diff --git a/internal/route/repo/commit.go b/internal/route/repo/commit.go index da8c5e48..f82336d9 100644 --- a/internal/route/repo/commit.go +++ b/internal/route/repo/commit.go @@ -61,7 +61,7 @@ func renderCommits(c *context.Context, filename string) { } commits = RenderIssueLinks(commits, c.Repo.RepoLink) - c.Data["Commits"] = db.ValidateCommitsWithEmails(commits) + c.Data["Commits"] = matchUsersWithCommitEmails(c.Req.Context(), commits) if page > 1 { c.Data["HasPrevious"] = true @@ -98,7 +98,7 @@ func SearchCommits(c *context.Context) { } commits = RenderIssueLinks(commits, c.Repo.RepoLink) - c.Data["Commits"] = db.ValidateCommitsWithEmails(commits) + c.Data["Commits"] = matchUsersWithCommitEmails(c.Req.Context(), commits) c.Data["Keyword"] = keyword c.Data["Username"] = c.Repo.Owner.Name @@ -188,6 +188,31 @@ func RawDiff(c *context.Context) { } } +type userCommit struct { + User *db.User + *git.Commit +} + +// matchUsersWithCommitEmails matches existing users using commit author emails. +func matchUsersWithCommitEmails(ctx gocontext.Context, oldCommits []*git.Commit) []*userCommit { + emailToUsers := make(map[string]*db.User) + newCommits := make([]*userCommit, len(oldCommits)) + for i := range oldCommits { + var u *db.User + if v, ok := emailToUsers[oldCommits[i].Author.Email]; !ok { + emailToUsers[oldCommits[i].Author.Email], _ = db.Users.GetByEmail(ctx, oldCommits[i].Author.Email) + } else { + u = v + } + + newCommits[i] = &userCommit{ + User: u, + Commit: oldCommits[i], + } + } + return newCommits +} + func CompareDiff(c *context.Context) { c.Data["IsDiffCompare"] = true userName := c.Repo.Owner.Name @@ -218,7 +243,7 @@ func CompareDiff(c *context.Context) { c.Data["IsSplitStyle"] = c.Query("style") == "split" c.Data["CommitRepoLink"] = c.Repo.RepoLink - c.Data["Commits"] = db.ValidateCommitsWithEmails(commits) + c.Data["Commits"] = matchUsersWithCommitEmails(c.Req.Context(), commits) c.Data["CommitsCount"] = len(commits) c.Data["BeforeCommitID"] = beforeCommitID c.Data["AfterCommitID"] = afterCommitID -- cgit v1.2.3