Skip to content

Commit b7d8943

Browse files
committed
performance improvements
1 parent 27de254 commit b7d8943

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
@@ -1129,28 +1129,29 @@ func ValidateCommitWithEmail(ctx context.Context, c *git.Commit) *User {
11291129
}
11301130

11311131
// ValidateCommitsWithEmails checks if authors' e-mails of commits are corresponding to users.
1132-
func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) []*UserCommit {
1132+
func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) ([]*UserCommit, error) {
11331133
var (
1134-
emails = make(map[string]*User)
11351134
newCommits = make([]*UserCommit, 0, len(oldCommits))
1135+
emailSet = make(container.Set[string])
11361136
)
11371137
for _, c := range oldCommits {
1138-
var u *User
11391138
if c.Author != nil {
1140-
if v, ok := emails[c.Author.Email]; !ok {
1141-
u, _ = GetUserByEmail(ctx, c.Author.Email)
1142-
emails[c.Author.Email] = u
1143-
} else {
1144-
u = v
1145-
}
1139+
emailSet.Add(c.Author.Email)
11461140
}
1141+
}
11471142

1143+
emailUserMap, err := GetUsersByEmails(ctx, emailSet.Values())
1144+
if err != nil {
1145+
return nil, err
1146+
}
1147+
1148+
for _, c := range oldCommits {
11481149
newCommits = append(newCommits, &UserCommit{
1149-
User: u,
1150+
User: emailUserMap[c.Author.Email],
11501151
Commit: c,
11511152
})
11521153
}
1153-
return newCommits
1154+
return newCommits, nil
11541155
}
11551156

11561157
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)