Skip to content

Commit 785b83a

Browse files
committed
performance improvements
1 parent 254f7a1 commit 785b83a

File tree

4 files changed

+32
-14
lines changed

4 files changed

+32
-14
lines changed

models/asymkey/gpg_key_commit_verification.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,17 @@ func ParseCommitsWithSignature(ctx context.Context, oldCommits []*user_model.Use
8989
}
9090

9191
for _, c := range oldCommits {
92+
committer, ok := emailUsers[c.Committer.Email]
93+
if !ok && c.Committer != nil {
94+
committer = &user_model.User{
95+
Name: c.Committer.Name,
96+
Email: c.Committer.Email,
97+
}
98+
}
99+
92100
signCommit := &SignCommit{
93101
UserCommit: c,
94-
Verification: parseCommitWithSignatureCommitter(ctx, c.Commit, emailUsers[c.Committer.Email]),
102+
Verification: parseCommitWithSignatureCommitter(ctx, c.Commit, committer),
95103
}
96104

97105
_ = CalculateTrustStatus(signCommit.Verification, repoTrustModel, isOwnerMemberCollaborator, &keyMap)

models/git/commit_status.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,9 +523,13 @@ func hashCommitStatusContext(context string) string {
523523

524524
// ConvertFromGitCommit converts git commits into SignCommitWithStatuses
525525
func ConvertFromGitCommit(ctx context.Context, commits []*git.Commit, repo *repo_model.Repository) ([]*SignCommitWithStatuses, error) {
526+
validatedCommits, err := user_model.ValidateCommitsWithEmails(ctx, commits)
527+
if err != nil {
528+
return nil, err
529+
}
526530
signedCommits, err := asymkey_model.ParseCommitsWithSignature(
527531
ctx,
528-
user_model.ValidateCommitsWithEmails(ctx, commits),
532+
validatedCommits,
529533
repo.GetTrustModel(),
530534
func(user *user_model.User) (bool, error) {
531535
return repo_model.IsOwnerMemberCollaborator(ctx, repo, user.ID)

models/user/user.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,28 +1127,29 @@ func ValidateCommitWithEmail(ctx context.Context, c *git.Commit) *User {
11271127
}
11281128

11291129
// ValidateCommitsWithEmails checks if authors' e-mails of commits are corresponding to users.
1130-
func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) []*UserCommit {
1130+
func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) ([]*UserCommit, error) {
11311131
var (
1132-
emails = make(map[string]*User)
11331132
newCommits = make([]*UserCommit, 0, len(oldCommits))
1133+
emailSet = make(container.Set[string])
11341134
)
11351135
for _, c := range oldCommits {
1136-
var u *User
11371136
if c.Author != nil {
1138-
if v, ok := emails[c.Author.Email]; !ok {
1139-
u, _ = GetUserByEmail(ctx, c.Author.Email)
1140-
emails[c.Author.Email] = u
1141-
} else {
1142-
u = v
1143-
}
1137+
emailSet.Add(c.Author.Email)
11441138
}
1139+
}
11451140

1141+
emailUserMap, err := GetUsersByEmails(ctx, emailSet.Values())
1142+
if err != nil {
1143+
return nil, err
1144+
}
1145+
1146+
for _, c := range oldCommits {
11461147
newCommits = append(newCommits, &UserCommit{
1147-
User: u,
1148+
User: emailUserMap[c.Author.Email],
11481149
Commit: c,
11491150
})
11501151
}
1151-
return newCommits
1152+
return newCommits, nil
11521153
}
11531154

11541155
func GetUsersByEmails(ctx context.Context, emails []string) (map[string]*User, error) {

routers/web/repo/blame.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,12 @@ func processBlameParts(ctx *context.Context, blameParts []*git.BlamePart) map[st
234234
}
235235

236236
// populate commit email addresses to later look up avatars.
237-
for _, c := range user_model.ValidateCommitsWithEmails(ctx, commits) {
237+
validatedCommits, err := user_model.ValidateCommitsWithEmails(ctx, commits)
238+
if err != nil {
239+
ctx.ServerError("ValidateCommitsWithEmails", err)
240+
return nil
241+
}
242+
for _, c := range validatedCommits {
238243
commitNames[c.ID.String()] = c
239244
}
240245

0 commit comments

Comments
 (0)