aboutsummaryrefslogtreecommitdiff
path: root/internal/route/repo/commit.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/route/repo/commit.go')
-rw-r--r--internal/route/repo/commit.go31
1 files changed, 28 insertions, 3 deletions
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