Skip to content

Commit 37f36fc

Browse files
authored
Merge branch 'main' into main
2 parents 30a7f20 + 6d2a333 commit 37f36fc

File tree

26 files changed

+222
-79
lines changed

26 files changed

+222
-79
lines changed

.drone.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ steps:
530530
image: plugins/s3:1
531531
settings:
532532
acl: public-read
533-
bucket: releases
533+
bucket: gitea-artifacts
534534
endpoint: https://storage.gitea.io
535535
path_style: true
536536
source: "dist/release/*"
@@ -551,7 +551,7 @@ steps:
551551
image: plugins/s3:1
552552
settings:
553553
acl: public-read
554-
bucket: releases
554+
bucket: gitea-artifacts
555555
endpoint: https://storage.gitea.io
556556
path_style: true
557557
source: "dist/release/*"
@@ -626,7 +626,7 @@ steps:
626626
image: plugins/s3:1
627627
settings:
628628
acl: public-read
629-
bucket: releases
629+
bucket: gitea-artifacts
630630
endpoint: https://storage.gitea.io
631631
path_style: true
632632
source: "dist/release/*"

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ NOTES:
101101
1. **YOU MUST READ THE [CONTRIBUTORS GUIDE](CONTRIBUTING.md) BEFORE STARTING TO WORK ON A PULL REQUEST.**
102102
2. If you have found a vulnerability in the project, please write privately to **[email protected]**. Thanks!
103103

104+
## Translating
105+
106+
Translations are done through Crowdin. If you want to translate to a new language ask one of the managers in the Crowdin project to add a new language there.
107+
108+
You can also just create an issue for adding a language or ask on discord on the #translation channel. If you need context or find some translation issues, you can leave a comment on the string or ask on Discord. For general translation questions there is a section in the docs. Currently a bit empty but we hope fo fill it as questions pop up.
109+
110+
https://docs.gitea.io/en-us/translation-guidelines/
111+
112+
[![Crowdin](https://badges.crowdin.net/gitea/localized.svg)](https://crowdin.com/project/gitea)
113+
104114
## Further information
105115

106116
For more information and instructions about how to install Gitea, please look at our [documentation](https://docs.gitea.io/en-us/).

README_ZH.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ Gitea 的首要目标是创建一个极易安装,运行非常快速,安装
7171

7272
Fork -> Patch -> Push -> Pull Request
7373

74+
## 翻译
75+
76+
多语言翻译是基于Crowdin进行的.
77+
[![Crowdin](https://badges.crowdin.net/gitea/localized.svg)](https://crowdin.com/project/gitea)
78+
7479
## 作者
7580

7681
* [Maintainers](https://github.com/orgs/go-gitea/people)

cmd/web_letsencrypt.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package cmd
66

77
import (
88
"net/http"
9+
"strconv"
910
"strings"
1011

1112
"code.gitea.io/gitea/modules/log"
@@ -22,6 +23,11 @@ func runLetsEncrypt(listenAddr, domain, directory, email string, m http.Handler)
2223
// TODO: these are placeholders until we add options for each in settings with appropriate warning
2324
enableHTTPChallenge := true
2425
enableTLSALPNChallenge := true
26+
altHTTPPort := 0
27+
28+
if p, err := strconv.Atoi(setting.PortToRedirect); err == nil {
29+
altHTTPPort = p
30+
}
2531

2632
magic := certmagic.NewDefault()
2733
magic.Storage = &certmagic.FileStorage{Path: directory}
@@ -30,6 +36,8 @@ func runLetsEncrypt(listenAddr, domain, directory, email string, m http.Handler)
3036
Agreed: setting.LetsEncryptTOS,
3137
DisableHTTPChallenge: !enableHTTPChallenge,
3238
DisableTLSALPNChallenge: !enableTLSALPNChallenge,
39+
ListenHost: listenAddr,
40+
AltHTTPPort: altHTTPPort,
3341
})
3442

3543
magic.Issuers = []certmagic.Issuer{myACME}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ require (
105105
github.com/unknwon/com v1.0.1
106106
github.com/unknwon/i18n v0.0.0-20210321134014-0ebbf2df1c44
107107
github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae
108-
github.com/unrolled/render v1.1.0
108+
github.com/unrolled/render v1.1.1
109109
github.com/urfave/cli v1.22.5
110110
github.com/willf/bitset v1.1.11 // indirect
111111
github.com/xanzy/go-gitlab v0.48.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,8 +1099,8 @@ github.com/unknwon/i18n v0.0.0-20210321134014-0ebbf2df1c44 h1:7bSo/vjZKVYUoZfxpY
10991099
github.com/unknwon/i18n v0.0.0-20210321134014-0ebbf2df1c44/go.mod h1:+5rDk6sDGpl3azws3O+f+GpFSyN9GVr0K8cvQLQM2ZQ=
11001100
github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae h1:ihaXiJkaca54IaCSnEXtE/uSZOmPxKZhDfVLrzZLFDs=
11011101
github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae/go.mod h1:1fdkY6xxl6ExVs2QFv7R0F5IRZHKA8RahhB9fMC9RvM=
1102-
github.com/unrolled/render v1.1.0 h1:gvpR9hHxTt6DcGqRYuVVFcfd8rtK+nyEPUJN06KB57Q=
1103-
github.com/unrolled/render v1.1.0/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM=
1102+
github.com/unrolled/render v1.1.1 h1:FpzNzkvlJQIlVdVaqeVBGWiCS8gpbmjtrKpDmCn6p64=
1103+
github.com/unrolled/render v1.1.1/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM=
11041104
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
11051105
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
11061106
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=

models/avatar_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ func TestHashEmail(t *testing.T) {
4040
}
4141

4242
func TestSizedAvatarLink(t *testing.T) {
43+
setting.AppSubURL = "/testsuburl"
44+
4345
disableGravatar()
44-
assert.Equal(t, "/suburl/assets/img/avatar_default.png",
46+
assert.Equal(t, "/testsuburl/assets/img/avatar_default.png",
4547
SizedAvatarLink("[email protected]", 100))
4648

4749
enableGravatar(t)

models/gpg_key_test.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ MkM/fdpyc2hY7Dl/+qFmN5MG5yGmMpQcX+RNNR222ibNC1D3wg==
103103
=i9b7
104104
-----END PGP PUBLIC KEY BLOCK-----`
105105
keys, err := checkArmoredGPGKeyString(testGPGArmor)
106+
if !assert.NotEmpty(t, keys) {
107+
return
108+
}
106109
ekey := keys[0]
107110
assert.NoError(t, err, "Could not parse a valid GPG armored key", ekey)
108111

@@ -189,6 +192,10 @@ Unknown GPG key with good email
189192
}
190193

191194
func TestCheckGPGUserEmail(t *testing.T) {
195+
assert.NoError(t, PrepareTestDatabase())
196+
197+
_ = AssertExistsAndLoadBean(t, &User{ID: 1}).(*User)
198+
192199
testEmailWithUpperCaseLetters := `-----BEGIN PGP PUBLIC KEY BLOCK-----
193200
Version: GnuPG v1
194201
@@ -222,9 +229,11 @@ Q0KHb+QcycSgbDx0ZAvdIacuKvBBcbxrsmFUI4LR+oIup0G9gUc0roPvr014jYQL
222229

223230
keys, err := AddGPGKey(1, testEmailWithUpperCaseLetters)
224231
assert.NoError(t, err)
225-
key := keys[0]
226-
if assert.Len(t, key.Emails, 1) {
227-
assert.Equal(t, "[email protected]", key.Emails[0].Email)
232+
if assert.NotEmpty(t, keys) {
233+
key := keys[0]
234+
if assert.Len(t, key.Emails, 1) {
235+
assert.Equal(t, "[email protected]", key.Emails[0].Email)
236+
}
228237
}
229238
}
230239

@@ -374,7 +383,9 @@ epiDVQ==
374383
`
375384
keys, err := checkArmoredGPGKeyString(testIssue6599)
376385
assert.NoError(t, err)
377-
ekey := keys[0]
378-
expire := getExpiryTime(ekey)
379-
assert.Equal(t, time.Unix(1586105389, 0), expire)
386+
if assert.NotEmpty(t, keys) {
387+
ekey := keys[0]
388+
expire := getExpiryTime(ekey)
389+
assert.Equal(t, time.Unix(1586105389, 0), expire)
390+
}
380391
}

models/issue_assignees_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ func TestUpdateAssignee(t *testing.T) {
6161
}
6262

6363
func TestMakeIDsFromAPIAssigneesToAdd(t *testing.T) {
64+
assert.NoError(t, PrepareTestDatabase())
65+
66+
_ = AssertExistsAndLoadBean(t, &User{ID: 1}).(*User)
67+
_ = AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
68+
6469
IDs, err := MakeIDsFromAPIAssigneesToAdd("", []string{""})
6570
assert.NoError(t, err)
6671
assert.Equal(t, []int64{}, IDs)

models/migrations/v156.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
8888
repo = new(Repository)
8989
has, err := sess.ID(release.RepoID).Get(repo)
9090
if err != nil {
91-
log.Error("Error whilst loading repository[%d] for release[%d] with tag name %s", release.RepoID, release.ID, release.TagName)
91+
log.Error("Error whilst loading repository[%d] for release[%d] with tag name %s. Error: %v", release.RepoID, release.ID, release.TagName, err)
9292
return err
9393
} else if !has {
9494
log.Warn("Release[%d] is orphaned and refers to non-existing repository %d", release.ID, release.RepoID)
@@ -105,32 +105,50 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
105105
}
106106

107107
if _, err := sess.ID(release.RepoID).Get(repo); err != nil {
108-
log.Error("Error whilst loading repository[%d] for release[%d] with tag name %s", release.RepoID, release.ID, release.TagName)
108+
log.Error("Error whilst loading repository[%d] for release[%d] with tag name %s. Error: %v", release.RepoID, release.ID, release.TagName, err)
109109
return err
110110
}
111111
}
112112
gitRepo, err = git.OpenRepository(repoPath(repo.OwnerName, repo.Name))
113113
if err != nil {
114-
log.Error("Error whilst opening git repo for %-v", repo)
114+
log.Error("Error whilst opening git repo for [%d]%s/%s. Error: %v", repo.ID, repo.OwnerName, repo.Name, err)
115115
return err
116116
}
117117
}
118118

119119
commit, err := gitRepo.GetTagCommit(release.TagName)
120120
if err != nil {
121121
if git.IsErrNotExist(err) {
122-
log.Warn("Unable to find commit %s for Tag: %s in %-v. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo)
122+
log.Warn("Unable to find commit %s for Tag: %s in [%d]%s/%s. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo.ID, repo.OwnerName, repo.Name)
123123
continue
124124
}
125-
log.Error("Error whilst getting commit for Tag: %s in %-v.", release.TagName, repo)
125+
log.Error("Error whilst getting commit for Tag: %s in [%d]%s/%s. Error: %v", release.TagName, repo.ID, repo.OwnerName, repo.Name, err)
126126
return fmt.Errorf("GetTagCommit: %v", err)
127127
}
128128

129+
if commit.Author.Email == "" {
130+
log.Warn("Tag: %s in Repo[%d]%s/%s does not have a tagger.", release.TagName, repo.ID, repo.OwnerName, repo.Name)
131+
commit, err = gitRepo.GetCommit(commit.ID.String())
132+
if err != nil {
133+
if git.IsErrNotExist(err) {
134+
log.Warn("Unable to find commit %s for Tag: %s in [%d]%s/%s. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo.ID, repo.OwnerName, repo.Name)
135+
continue
136+
}
137+
log.Error("Error whilst getting commit for Tag: %s in [%d]%s/%s. Error: %v", release.TagName, repo.ID, repo.OwnerName, repo.Name, err)
138+
return fmt.Errorf("GetCommit: %v", err)
139+
}
140+
}
141+
142+
if commit.Author.Email == "" {
143+
log.Warn("Tag: %s in Repo[%d]%s/%s does not have a Tagger and its underlying commit does not have an Author either!", release.TagName, repo.ID, repo.OwnerName, repo.Name)
144+
continue
145+
}
146+
129147
if user == nil || !strings.EqualFold(user.Email, commit.Author.Email) {
130148
user = new(User)
131149
_, err = sess.Where("email=?", commit.Author.Email).Get(user)
132150
if err != nil {
133-
log.Error("Error whilst getting commit author by email: %s for Tag: %s in %-v.", commit.Author.Email, release.TagName, repo)
151+
log.Error("Error whilst getting commit author by email: %s for Tag: %s in [%d]%s/%s. Error: %v", commit.Author.Email, release.TagName, repo.ID, repo.OwnerName, repo.Name, err)
134152
return err
135153
}
136154

@@ -143,7 +161,7 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
143161

144162
release.PublisherID = user.ID
145163
if _, err := sess.ID(release.ID).Cols("publisher_id").Update(release); err != nil {
146-
log.Error("Error whilst updating publisher[%d] for release[%d] with tag name %s", release.PublisherID, release.ID, release.TagName)
164+
log.Error("Error whilst updating publisher[%d] for release[%d] with tag name %s. Error: %v", release.PublisherID, release.ID, release.TagName, err)
147165
return err
148166
}
149167
}

models/user.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,7 @@ var (
789789
"debug",
790790
"error",
791791
"explore",
792+
"favicon.ico",
792793
"ghost",
793794
"help",
794795
"install",
@@ -807,10 +808,10 @@ var (
807808
"repo",
808809
"robots.txt",
809810
"search",
811+
"serviceworker.js",
810812
"stars",
811813
"template",
812814
"user",
813-
"favicon.ico",
814815
}
815816

816817
reservedUserPatterns = []string{"*.keys", "*.gpg"}

models/user_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,8 @@ func TestCreateUser_Issue5882(t *testing.T) {
368368
}
369369

370370
func TestGetUserIDsByNames(t *testing.T) {
371+
assert.NoError(t, PrepareTestDatabase())
372+
371373
// ignore non existing
372374
IDs, err := GetUserIDsByNames([]string{"user1", "user2", "none_existing_user"}, true)
373375
assert.NoError(t, err)
@@ -380,6 +382,8 @@ func TestGetUserIDsByNames(t *testing.T) {
380382
}
381383

382384
func TestGetMaileableUsersByIDs(t *testing.T) {
385+
assert.NoError(t, PrepareTestDatabase())
386+
383387
results, err := GetMaileableUsersByIDs([]int64{1, 4}, false)
384388
assert.NoError(t, err)
385389
assert.Equal(t, 1, len(results))

modules/convert/user_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import (
88
"testing"
99

1010
"code.gitea.io/gitea/models"
11+
1112
"github.com/stretchr/testify/assert"
1213
)
1314

1415
func TestUser_ToUser(t *testing.T) {
16+
assert.NoError(t, models.PrepareTestDatabase())
1517

1618
user1 := models.AssertExistsAndLoadBean(t, &models.User{ID: 1, IsAdmin: true}).(*models.User)
1719

modules/git/commit_reader.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import (
1717
// If used as part of a cat-file --batch stream you need to limit the reader to the correct size
1818
func CommitFromReader(gitRepo *Repository, sha SHA1, reader io.Reader) (*Commit, error) {
1919
commit := &Commit{
20-
ID: sha,
20+
ID: sha,
21+
Author: &Signature{},
22+
Committer: &Signature{},
2123
}
2224

2325
payloadSB := new(strings.Builder)

modules/git/tag.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func (tag *Tag) Commit() (*Commit, error) {
3535
// \n\n separate headers from message
3636
func parseTagData(data []byte) (*Tag, error) {
3737
tag := new(Tag)
38+
tag.Tagger = &Signature{}
3839
// we now have the contents of the commit object. Let's investigate...
3940
nextline := 0
4041
l:

0 commit comments

Comments
 (0)