aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/fixtures/email_address.yml2
-rw-r--r--models/user/user.go24
-rw-r--r--models/user/user_test.go34
-rw-r--r--options/locale/locale_fr-FR.ini1
-rw-r--r--options/locale/locale_ga-IE.ini1
-rw-r--r--options/locale/locale_pt-PT.ini1
-rw-r--r--options/locale/locale_zh-CN.ini6
-rw-r--r--services/git/commit.go8
8 files changed, 56 insertions, 21 deletions
diff --git a/models/fixtures/email_address.yml b/models/fixtures/email_address.yml
index b2a0432635..0f6bd9ee6d 100644
--- a/models/fixtures/email_address.yml
+++ b/models/fixtures/email_address.yml
@@ -81,7 +81,7 @@
-
id: 11
uid: 4
- email: user4@example.com
+ email: User4@Example.Com
lower_email: user4@example.com
is_activated: true
is_primary: true
diff --git a/models/user/user.go b/models/user/user.go
index d7331d79f0..86a3549345 100644
--- a/models/user/user.go
+++ b/models/user/user.go
@@ -1151,8 +1151,8 @@ func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) ([
}
for _, c := range oldCommits {
- user, ok := emailUserMap[c.Author.Email]
- if !ok {
+ user := emailUserMap.GetByEmail(c.Author.Email) // FIXME: why ValidateCommitsWithEmails uses "Author", but ParseCommitsWithSignature uses "Committer"?
+ if user == nil {
user = &User{
Name: c.Author.Name,
Email: c.Author.Email,
@@ -1166,7 +1166,15 @@ func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) ([
return newCommits, nil
}
-func GetUsersByEmails(ctx context.Context, emails []string) (map[string]*User, error) {
+type EmailUserMap struct {
+ m map[string]*User
+}
+
+func (eum *EmailUserMap) GetByEmail(email string) *User {
+ return eum.m[strings.ToLower(email)]
+}
+
+func GetUsersByEmails(ctx context.Context, emails []string) (*EmailUserMap, error) {
if len(emails) == 0 {
return nil, nil
}
@@ -1176,7 +1184,7 @@ func GetUsersByEmails(ctx context.Context, emails []string) (map[string]*User, e
for _, email := range emails {
if strings.HasSuffix(email, "@"+setting.Service.NoReplyAddress) {
username := strings.TrimSuffix(email, "@"+setting.Service.NoReplyAddress)
- needCheckUserNames.Add(username)
+ needCheckUserNames.Add(strings.ToLower(username))
} else {
needCheckEmails.Add(strings.ToLower(email))
}
@@ -1203,8 +1211,7 @@ func GetUsersByEmails(ctx context.Context, emails []string) (map[string]*User, e
for _, email := range emailAddresses {
user := users[email.UID]
if user != nil {
- results[user.Email] = user
- results[user.GetPlaceholderEmail()] = user
+ results[email.LowerEmail] = user
}
}
}
@@ -1214,10 +1221,9 @@ func GetUsersByEmails(ctx context.Context, emails []string) (map[string]*User, e
return nil, err
}
for _, user := range users {
- results[user.Email] = user
- results[user.GetPlaceholderEmail()] = user
+ results[strings.ToLower(user.GetPlaceholderEmail())] = user
}
- return results, nil
+ return &EmailUserMap{results}, nil
}
// GetUserByEmail returns the user object by given e-mail if exists.
diff --git a/models/user/user_test.go b/models/user/user_test.go
index 15412f94c5..93b6e68a8d 100644
--- a/models/user/user_test.go
+++ b/models/user/user_test.go
@@ -58,13 +58,33 @@ func TestUserEmails(t *testing.T) {
assert.ElementsMatch(t, []string{"user8@example.com"}, user_model.GetUserEmailsByNames(db.DefaultContext, []string{"user8", "org7"}))
})
t.Run("GetUsersByEmails", func(t *testing.T) {
- m, err := user_model.GetUsersByEmails(db.DefaultContext, []string{"user1@example.com", "user2@" + setting.Service.NoReplyAddress})
- require.NoError(t, err)
- require.Len(t, m, 4)
- assert.EqualValues(t, 1, m["user1@example.com"].ID)
- assert.EqualValues(t, 1, m["user1@"+setting.Service.NoReplyAddress].ID)
- assert.EqualValues(t, 2, m["user2@example.com"].ID)
- assert.EqualValues(t, 2, m["user2@"+setting.Service.NoReplyAddress].ID)
+ defer test.MockVariableValue(&setting.Service.NoReplyAddress, "NoReply.gitea.internal")()
+ testGetUserByEmail := func(t *testing.T, email string, uid int64) {
+ m, err := user_model.GetUsersByEmails(db.DefaultContext, []string{email})
+ require.NoError(t, err)
+ user := m.GetByEmail(email)
+ if uid == 0 {
+ require.Nil(t, user)
+ return
+ }
+ require.NotNil(t, user)
+ assert.Equal(t, uid, user.ID)
+ }
+ cases := []struct {
+ Email string
+ UID int64
+ }{
+ {"UseR1@example.com", 1},
+ {"user1-2@example.COM", 1},
+ {"USER2@" + setting.Service.NoReplyAddress, 2},
+ {"user4@example.com", 4},
+ {"no-such", 0},
+ }
+ for _, c := range cases {
+ t.Run(c.Email, func(t *testing.T) {
+ testGetUserByEmail(t, c.Email, c.UID)
+ })
+ }
})
}
diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini
index 1a85e1806c..2cc0ca7202 100644
--- a/options/locale/locale_fr-FR.ini
+++ b/options/locale/locale_fr-FR.ini
@@ -1560,6 +1560,7 @@ issues.filter_user_placeholder=Rechercher des utilisateurs
issues.filter_user_no_select=Tous les utilisateurs
issues.filter_type=Type
issues.filter_type.all_issues=Tous les tickets
+issues.filter_type.all_pull_requests=Toutes les demandes d’ajout
issues.filter_type.assigned_to_you=Qui vous sont assignés
issues.filter_type.created_by_you=Créés par vous
issues.filter_type.mentioning_you=Vous mentionnant
diff --git a/options/locale/locale_ga-IE.ini b/options/locale/locale_ga-IE.ini
index c3e0346a3a..79df1d26d0 100644
--- a/options/locale/locale_ga-IE.ini
+++ b/options/locale/locale_ga-IE.ini
@@ -1560,6 +1560,7 @@ issues.filter_user_placeholder=Cuardaigh úsáideoirí
issues.filter_user_no_select=Gach úsáideoir
issues.filter_type=Cineál
issues.filter_type.all_issues=Gach saincheist
+issues.filter_type.all_pull_requests=Gach iarratas tarraingt
issues.filter_type.assigned_to_you=Sannta duit
issues.filter_type.created_by_you=Cruthaithe agat
issues.filter_type.mentioning_you=Ag tagairt duit
diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini
index f232418cde..d932feacae 100644
--- a/options/locale/locale_pt-PT.ini
+++ b/options/locale/locale_pt-PT.ini
@@ -1559,6 +1559,7 @@ issues.filter_user_placeholder=Procurar utilizadores
issues.filter_user_no_select=Todos os utilizadores
issues.filter_type=Tipo
issues.filter_type.all_issues=Todas as questões
+issues.filter_type.all_pull_requests=Todos os pedidos de integração
issues.filter_type.assigned_to_you=Atribuídas a si
issues.filter_type.created_by_you=Criadas por si
issues.filter_type.mentioning_you=Mencionando a si
diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini
index d91a06d205..d35814d82a 100644
--- a/options/locale/locale_zh-CN.ini
+++ b/options/locale/locale_zh-CN.ini
@@ -1228,6 +1228,7 @@ migrate.migrating_issues=迁移工单
migrate.migrating_pulls=迁移合并请求
migrate.cancel_migrating_title=取消迁移
migrate.cancel_migrating_confirm=您想要取消此次迁移吗?
+migrating_status=迁移状态
mirror_from=镜像自地址
forked_from=派生自
@@ -1559,6 +1560,7 @@ issues.filter_user_placeholder=搜索用户
issues.filter_user_no_select=所有用户
issues.filter_type=类型筛选
issues.filter_type.all_issues=所有工单
+issues.filter_type.all_pull_requests=所有合并请求
issues.filter_type.assigned_to_you=指派给您的
issues.filter_type.created_by_you=由您创建的
issues.filter_type.mentioning_you=提及您的
@@ -3810,6 +3812,10 @@ runs.no_workflows.documentation=关于Gitea Actions的更多信息,请参阅 <
runs.no_runs=工作流尚未运行过。
runs.empty_commit_message=(空白的提交消息)
runs.expire_log_message=旧的日志已被清除
+runs.delete=删除工作流运行
+runs.delete.description=您确定要永久删除此工作流运行吗?此操作无法撤消。
+runs.not_done=此工作流运行未完成。
+runs.view_workflow_file=查看工作流文件
workflow.disable=禁用工作流
workflow.disable_success=工作流 '%s' 已成功禁用。
diff --git a/services/git/commit.go b/services/git/commit.go
index d3ebcab569..2e0e8a5096 100644
--- a/services/git/commit.go
+++ b/services/git/commit.go
@@ -34,9 +34,9 @@ func ParseCommitsWithSignature(ctx context.Context, repo *repo_model.Repository,
}
for _, c := range oldCommits {
- committer, ok := emailUsers[c.Committer.Email]
- if !ok && c.Committer != nil {
- committer = &user_model.User{
+ committerUser := emailUsers.GetByEmail(c.Committer.Email) // FIXME: why ValidateCommitsWithEmails uses "Author", but ParseCommitsWithSignature uses "Committer"?
+ if committerUser == nil {
+ committerUser = &user_model.User{
Name: c.Committer.Name,
Email: c.Committer.Email,
}
@@ -44,7 +44,7 @@ func ParseCommitsWithSignature(ctx context.Context, repo *repo_model.Repository,
signCommit := &asymkey_model.SignCommit{
UserCommit: c,
- Verification: asymkey_service.ParseCommitWithSignatureCommitter(ctx, c.Commit, committer),
+ Verification: asymkey_service.ParseCommitWithSignatureCommitter(ctx, c.Commit, committerUser),
}
isOwnerMemberCollaborator := func(user *user_model.User) (bool, error) {