Skip to content

Commit 158f99e

Browse files
committed
Merge remote-tracking branch 'giteaofficial/main'
* giteaofficial/main: Refactor mail template and support preview (go-gitea#34990) [skip ci] Updated translations via Crowdin Fix bug when displaying git user avatar in commits list (go-gitea#35003) Tweak placement of diff file menu (go-gitea#34999) Start automerge check again after the conflict check and the schedule (go-gitea#34989) Refactor time tracker UI (go-gitea#34983) [skip ci] Updated translations via Crowdin Improve NuGet API Parity (go-gitea#21291) (go-gitea#34940)
2 parents 71cf5d3 + 55f3505 commit 158f99e

37 files changed

+604
-242
lines changed

models/packages/package_version.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ type PackageVersion struct {
3737
DownloadCount int64 `xorm:"NOT NULL DEFAULT 0"`
3838
}
3939

40+
// IsPrerelease checks if the version is a prerelease version according to semantic versioning
41+
func (pv *PackageVersion) IsPrerelease() bool {
42+
if pv == nil || pv.Version == "" {
43+
return false
44+
}
45+
return strings.Contains(pv.Version, "-")
46+
}
47+
4048
// GetOrInsertVersion inserts a version. If the same version exist already ErrDuplicatePackageVersion is returned
4149
func GetOrInsertVersion(ctx context.Context, pv *PackageVersion) (*PackageVersion, error) {
4250
e := db.GetEngine(ctx)

models/pull/automerge.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ package pull
55

66
import (
77
"context"
8+
"errors"
89
"fmt"
910

1011
"code.gitea.io/gitea/models/db"
1112
repo_model "code.gitea.io/gitea/models/repo"
1213
user_model "code.gitea.io/gitea/models/user"
1314
"code.gitea.io/gitea/modules/timeutil"
15+
"code.gitea.io/gitea/modules/util"
1416
)
1517

1618
// AutoMerge represents a pull request scheduled for merging when checks succeed
@@ -76,7 +78,10 @@ func GetScheduledMergeByPullID(ctx context.Context, pullID int64) (bool, *AutoMe
7678
return false, nil, err
7779
}
7880

79-
doer, err := user_model.GetUserByID(ctx, scheduledPRM.DoerID)
81+
doer, err := user_model.GetPossibleUserByID(ctx, scheduledPRM.DoerID)
82+
if errors.Is(err, util.ErrNotExist) {
83+
doer, err = user_model.NewGhostUser(), nil
84+
}
8085
if err != nil {
8186
return false, nil, err
8287
}

modules/packages/nuget/metadata.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ type Metadata struct {
7171
ReleaseNotes string `json:"release_notes,omitempty"`
7272
RepositoryURL string `json:"repository_url,omitempty"`
7373
RequireLicenseAcceptance bool `json:"require_license_acceptance"`
74+
Summary string `json:"summary,omitempty"`
7475
Tags string `json:"tags,omitempty"`
7576
Title string `json:"title,omitempty"`
7677

@@ -105,6 +106,7 @@ type nuspecPackage struct {
105106
Readme string `xml:"readme"`
106107
ReleaseNotes string `xml:"releaseNotes"`
107108
RequireLicenseAcceptance bool `xml:"requireLicenseAcceptance"`
109+
Summary string `xml:"summary"`
108110
Tags string `xml:"tags"`
109111
Title string `xml:"title"`
110112

@@ -204,6 +206,7 @@ func ParseNuspecMetaData(archive *zip.Reader, r io.Reader) (*Package, error) {
204206
ReleaseNotes: p.Metadata.ReleaseNotes,
205207
RepositoryURL: p.Metadata.Repository.URL,
206208
RequireLicenseAcceptance: p.Metadata.RequireLicenseAcceptance,
209+
Summary: p.Metadata.Summary,
207210
Tags: p.Metadata.Tags,
208211
Title: p.Metadata.Title,
209212

modules/templates/mailer.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,20 @@ import (
99
"html/template"
1010
"regexp"
1111
"strings"
12+
"sync/atomic"
1213
texttmpl "text/template"
1314

1415
"code.gitea.io/gitea/modules/log"
1516
"code.gitea.io/gitea/modules/setting"
1617
"code.gitea.io/gitea/modules/util"
1718
)
1819

20+
type MailTemplates struct {
21+
TemplateNames []string
22+
BodyTemplates *template.Template
23+
SubjectTemplates *texttmpl.Template
24+
}
25+
1926
var mailSubjectSplit = regexp.MustCompile(`(?m)^-{3,}\s*$`)
2027

2128
// mailSubjectTextFuncMap returns functions for injecting to text templates, it's only used for mail subject
@@ -52,16 +59,17 @@ func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template,
5259
return nil
5360
}
5461

55-
// Mailer provides the templates required for sending notification mails.
56-
func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
57-
subjectTemplates := texttmpl.New("")
58-
bodyTemplates := template.New("")
59-
60-
subjectTemplates.Funcs(mailSubjectTextFuncMap())
61-
bodyTemplates.Funcs(NewFuncMap())
62-
62+
// LoadMailTemplates provides the templates required for sending notification mails.
63+
func LoadMailTemplates(ctx context.Context, loadedTemplates *atomic.Pointer[MailTemplates]) {
6364
assetFS := AssetFS()
6465
refreshTemplates := func(firstRun bool) {
66+
var templateNames []string
67+
subjectTemplates := texttmpl.New("")
68+
bodyTemplates := template.New("")
69+
70+
subjectTemplates.Funcs(mailSubjectTextFuncMap())
71+
bodyTemplates.Funcs(NewFuncMap())
72+
6573
if !firstRun {
6674
log.Trace("Reloading mail templates")
6775
}
@@ -81,13 +89,20 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
8189
if firstRun {
8290
log.Trace("Adding mail template %s: %s by %s", tmplName, assetPath, layerName)
8391
}
92+
templateNames = append(templateNames, tmplName)
8493
if err = buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content); err != nil {
8594
if firstRun {
8695
log.Fatal("Failed to parse mail template, err: %v", err)
8796
}
8897
log.Error("Failed to parse mail template, err: %v", err)
8998
}
9099
}
100+
loaded := &MailTemplates{
101+
TemplateNames: templateNames,
102+
BodyTemplates: bodyTemplates,
103+
SubjectTemplates: subjectTemplates,
104+
}
105+
loadedTemplates.Store(loaded)
91106
}
92107

93108
refreshTemplates(true)
@@ -99,6 +114,4 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
99114
refreshTemplates(false)
100115
})
101116
}
102-
103-
return subjectTemplates, bodyTemplates
104117
}

options/locale/locale_ga-IE.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,6 +2355,7 @@ settings.payload_url=URL spriocdhírithe
23552355
settings.http_method=Modh HTTP
23562356
settings.content_type=Cineál Ábhar POST
23572357
settings.secret=Rúnda
2358+
settings.webhook_secret_desc=Más féidir le freastalaí an webhook rún a úsáid, is féidir leat lámhleabhar an webhook a leanúint agus rún a líonadh isteach anseo.
23582359
settings.slack_username=Ainm úsáideora
23592360
settings.slack_icon_url=URL deilbhín
23602361
settings.slack_color=Dath

options/locale/locale_pt-PT.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2353,6 +2353,7 @@ settings.payload_url=URL de destino
23532353
settings.http_method=Método HTTP
23542354
settings.content_type=Tipo de conteúdo POST
23552355
settings.secret=Segredo
2356+
settings.webhook_secret_desc=Se o servidor de automatismos web suportar a utilização de segredos, você pode seguir o manual do automatismo web e preencher um segredo aqui.
23562357
settings.slack_username=Nome de utilizador
23572358
settings.slack_icon_url=URL do ícone
23582359
settings.slack_color=Cor

options/locale/locale_zh-CN.ini

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,12 +1400,12 @@ editor.revert=将 %s 还原到:
14001400
editor.failed_to_commit=提交更改失败。
14011401
editor.failed_to_commit_summary=错误信息:
14021402

1403-
editor.fork_create=派生仓库发起请求变更
1404-
editor.fork_create_description=您不能直接编辑此仓库。您可以从此仓库派生,进行编辑并创建一个拉取请求
1405-
editor.fork_edit_description=您不能直接编辑此仓库。 更改将写入您的派生仓库 <b>%s</b>,以便您可以创建一个拉取请求
1406-
editor.fork_not_editable=你已经派生了这个仓库,但是你的分叉是不可编辑的
1403+
editor.fork_create=派生仓库以请求变更
1404+
editor.fork_create_description=您不能直接编辑此仓库。您可以派生此仓库,进行编辑并创建一个合并请求
1405+
editor.fork_edit_description=您不能直接编辑此仓库。 更改将写入您的派生仓库 <b>%s</b>,以便您可以创建一个合并请求
1406+
editor.fork_not_editable=您已经派生了此仓库,但您的派生是不可编辑的
14071407
editor.fork_failed_to_push_branch=推送分支 %s 到仓库失败。
1408-
editor.fork_branch_exists=分支 "%s" 已存在于您的派生仓库中,请选择一个新的分支名称。
1408+
editor.fork_branch_exists=分支「%s」已存在于您的派生仓库中,请选择一个新的分支名称。
14091409

14101410
commits.desc=浏览代码修改历史
14111411
commits.commits=次代码提交
@@ -2171,8 +2171,8 @@ settings.hooks=Web 钩子
21712171
settings.githooks=管理 Git 钩子
21722172
settings.basic_settings=基本设置
21732173
settings.mirror_settings=镜像设置
2174-
settings.mirror_settings.docs=设置您的仓库以自动同步另一个仓库的提交、标签和分支。
2175-
settings.mirror_settings.docs.disabled_pull_mirror.instructions=设置您的项目以自动将提交、标签和分支推送到另一个仓库。您的站点管理员已禁用了拉取镜像。
2174+
settings.mirror_settings.docs=将您的仓库设置为自动同步另一个仓库的提交、标签和分支。
2175+
settings.mirror_settings.docs.disabled_pull_mirror.instructions=将您的项目设置为自动将提交、标签和分支推送到另一个仓库。您的站点管理员已禁用了拉取镜像。
21762176
settings.mirror_settings.docs.disabled_push_mirror.instructions=将您的项目设置为自动从一个仓库拉取提交、标签和分支。
21772177
settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=现在,这只能在「迁移外部仓库」菜单中完成。欲了解更多信息,请参考:
21782178
settings.mirror_settings.docs.disabled_push_mirror.info=您的站点管理员已禁用推送镜像。
@@ -2335,6 +2335,8 @@ settings.hooks_desc=当 Gitea 事件发生时,Web 钩子自动发出 HTTP POST
23352335
settings.webhook_deletion=删除 Web 钩子
23362336
settings.webhook_deletion_desc=删除 Web 钩子将删除其设置和历史记录。继续?
23372337
settings.webhook_deletion_success=Web 钩子删除成功!
2338+
settings.webhook.test_delivery=测试推送事件
2339+
settings.webhook.test_delivery_desc=用假推送事件测试这个 Web 钩子。
23382340
settings.webhook.test_delivery_desc_disabled=要用假事件测试这个 Web钩子,请激活它。
23392341
settings.webhook.request=请求内容
23402342
settings.webhook.response=响应内容
@@ -2354,6 +2356,7 @@ settings.payload_url=目标 URL
23542356
settings.http_method=HTTP 方法
23552357
settings.content_type=POST 内容类型
23562358
settings.secret=密钥
2359+
settings.webhook_secret_desc=如果 Webhook 服务器支持使用密钥,您可以按照 Webhook 的手册在此处填写一个密钥。
23572360
settings.slack_username=服务名称
23582361
settings.slack_icon_url=图标 URL
23592362
settings.slack_color=颜色
@@ -2768,6 +2771,8 @@ branch.new_branch_from=基于「%s」创建新分支
27682771
branch.renamed=分支 %s 已重命名为 %s。
27692772
branch.rename_default_or_protected_branch_error=只有管理员能重命名默认分支和受保护的分支。
27702773
branch.rename_protected_branch_failed=此分支受到 glob 语法规则的保护。
2774+
branch.commits_divergence_from=提交分歧:落后 %[3]s %[1]d 个提交,领先 %[2]d 个提交
2775+
branch.commits_no_divergence=与分支 %[1]s 相同
27712776

27722777
tag.create_tag=创建标签 %s
27732778
tag.create_tag_operation=创建标签
@@ -2781,6 +2786,7 @@ topic.done=保存
27812786
topic.count_prompt=您最多选择25个主题
27822787
topic.format_prompt=主题必须以字母或数字开头,可以包含连字符 ('-') 和句点 ('.'),长度不得超过35个字符。字符必须为小写。
27832788

2789+
find_file.follow_symlink=跟随此符号链接的指向位置
27842790
find_file.go_to_file=转到文件
27852791
find_file.no_matching=没有找到匹配的文件
27862792

0 commit comments

Comments
 (0)