Skip to content

Commit a2fa3ee

Browse files
committed
Merge branch 'master' into resolve-cov
2 parents 2276cee + 9b7737d commit a2fa3ee

File tree

23 files changed

+203
-27
lines changed

23 files changed

+203
-27
lines changed

.eslintrc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ globals:
2424
SimpleMDE: false
2525
u2fApi: false
2626

27+
overrides:
28+
- files: ["web_src/**/*.worker.js"]
29+
env:
30+
worker: true
31+
rules:
32+
no-restricted-globals: [0]
33+
2734
rules:
2835
arrow-body-style: [0]
2936
arrow-parens: [2, always]

docs/content/doc/usage/backup-and-restore.en-us.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ mv custom/conf/app.ini /etc/gitea/conf/app.ini # or mv app.ini /etc/gitea/conf/a
7575
unzip gitea-repo.zip
7676
mv gitea-repo/* /var/lib/gitea/repositories/
7777
chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea/repositories/
78-
mysql -u$USER -p$PASS $DATABASE <gitea-db.sql
78+
mysql --default-character-set=utf8mb4 -u$USER -p$PASS $DATABASE <gitea-db.sql
7979
# or sqlite3 $DATABASE_PATH <gitea-db.sql
8080
service gitea restart
8181
```

docs/content/doc/usage/backup-and-restore.zh-cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ mv custom/conf/app.ini /etc/gitea/conf/app.ini
5454
unzip gitea-repo.zip
5555
mv gitea-repo/* /var/lib/gitea/repositories/
5656
chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea/repositories/
57-
mysql -u$USER -p$PASS $DATABASE <gitea-db.sql
57+
mysql --default-character-set=utf8mb4 -u$USER -p$PASS $DATABASE <gitea-db.sql
5858
# or sqlite3 $DATABASE_PATH <gitea-db.sql
5959
service gitea restart
6060
```

integrations/integration_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,14 +330,18 @@ func loginUserWithPassword(t testing.TB, userName, password string) *TestSession
330330
return session
331331
}
332332

333+
//token has to be unique this counter take care of
334+
var tokenCounter int64
335+
333336
func getTokenForLoggedInUser(t testing.TB, session *TestSession) string {
334337
t.Helper()
338+
tokenCounter++
335339
req := NewRequest(t, "GET", "/user/settings/applications")
336340
resp := session.MakeRequest(t, req, http.StatusOK)
337341
doc := NewHTMLParser(t, resp.Body)
338342
req = NewRequestWithValues(t, "POST", "/user/settings/applications", map[string]string{
339343
"_csrf": doc.GetCSRF(),
340-
"name": "api-testing-token",
344+
"name": fmt.Sprintf("api-testing-token-%d", tokenCounter),
341345
})
342346
resp = session.MakeRequest(t, req, http.StatusFound)
343347
req = NewRequest(t, "GET", "/user/settings/applications")

models/issue.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
554554
return nil
555555
}
556556

557-
func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (*Comment, error) {
557+
func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed, isMergePull bool) (*Comment, error) {
558558
// Reload the issue
559559
currentIssue, err := getIssueByID(e, issue.ID)
560560
if err != nil {
@@ -620,6 +620,8 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (*C
620620
cmtType := CommentTypeClose
621621
if !issue.IsClosed {
622622
cmtType = CommentTypeReopen
623+
} else if isMergePull {
624+
cmtType = CommentTypeMergePull
623625
}
624626

625627
return createComment(e, &CreateCommentOptions{
@@ -645,7 +647,7 @@ func (issue *Issue) ChangeStatus(doer *User, isClosed bool) (*Comment, error) {
645647
return nil, err
646648
}
647649

648-
comment, err := issue.changeStatus(sess, doer, isClosed)
650+
comment, err := issue.changeStatus(sess, doer, isClosed, false)
649651
if err != nil {
650652
return nil, err
651653
}

models/issue_comment.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ const (
8888
CommentTypeDeleteTimeManual
8989
// add or remove Request from one
9090
CommentTypeReviewRequest
91+
// merge pull request
92+
CommentTypeMergePull
9193
)
9294

9395
// CommentTag defines comment tag type

models/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ func (pr *PullRequest) SetMerged() (bool, error) {
390390
return false, err
391391
}
392392

393-
if _, err := pr.Issue.changeStatus(sess, pr.Merger, true); err != nil {
393+
if _, err := pr.Issue.changeStatus(sess, pr.Merger, true, true); err != nil {
394394
return false, fmt.Errorf("Issue.changeStatus: %v", err)
395395
}
396396

models/token.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ func GetAccessTokenBySHA(token string) (*AccessToken, error) {
7777
return nil, ErrAccessTokenNotExist{token}
7878
}
7979

80+
// AccessTokenByNameExists checks if a token name has been used already by a user.
81+
func AccessTokenByNameExists(token *AccessToken) (bool, error) {
82+
return x.Table("access_token").Where("name = ?", token.Name).And("uid = ?", token.UID).Exist()
83+
}
84+
8085
// ListAccessTokens returns a list of access tokens belongs to given user.
8186
func ListAccessTokens(uid int64, listOptions ListOptions) ([]*AccessToken, error) {
8287
sess := x.

models/token_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,42 @@ func TestNewAccessToken(t *testing.T) {
2727
assert.Error(t, NewAccessToken(invalidToken))
2828
}
2929

30+
func TestAccessTokenByNameExists(t *testing.T) {
31+
32+
name := "Token Gitea"
33+
34+
assert.NoError(t, PrepareTestDatabase())
35+
token := &AccessToken{
36+
UID: 3,
37+
Name: name,
38+
}
39+
40+
// Check to make sure it doesn't exists already
41+
exist, err := AccessTokenByNameExists(token)
42+
assert.NoError(t, err)
43+
assert.False(t, exist)
44+
45+
// Save it to the database
46+
assert.NoError(t, NewAccessToken(token))
47+
AssertExistsAndLoadBean(t, token)
48+
49+
// This token must be found by name in the DB now
50+
exist, err = AccessTokenByNameExists(token)
51+
assert.NoError(t, err)
52+
assert.True(t, exist)
53+
54+
user4Token := &AccessToken{
55+
UID: 4,
56+
Name: name,
57+
}
58+
59+
// Name matches but different user ID, this shouldn't exists in the
60+
// database
61+
exist, err = AccessTokenByNameExists(user4Token)
62+
assert.NoError(t, err)
63+
assert.False(t, exist)
64+
}
65+
3066
func TestGetAccessTokenBySHA(t *testing.T) {
3167
assert.NoError(t, PrepareTestDatabase())
3268
token, err := GetAccessTokenBySHA("d2c6c1ba3890b309189a8e618c72a162e4efbf36")

options/locale/locale_en-US.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ new_token_desc = Applications using a token have full access to your account.
517517
token_name = Token Name
518518
generate_token = Generate Token
519519
generate_token_success = Your new token has been generated. Copy it now as it will not be shown again.
520+
generate_token_name_duplicate = <strong>%s</strong> has been used as an application name already. Please use a new one.
520521
delete_token = Delete
521522
access_token_deletion = Delete Access Token
522523
access_token_deletion_desc = Deleting a token will revoke access to your account for applications using it. Continue?
@@ -924,6 +925,7 @@ issues.context.edit = Edit
924925
issues.context.delete = Delete
925926
issues.no_content = There is no content yet.
926927
issues.close_issue = Close
928+
issues.pull_merged_at = `merged commit <a href="%[1]s">%[2]s</a> into <b>%[3]s</b> %[4]s`
927929
issues.close_comment_issue = Comment and Close
928930
issues.reopen_issue = Reopen
929931
issues.reopen_comment_issue = Comment and Reopen

options/locale/locale_ja-JP.ini

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ add_email=メールアドレスを追加
459459
add_openid=OpenID URIを追加する
460460
add_email_confirmation_sent='%s' に確認メールを送信しました。 %s以内に受信トレイを確認し、メールアドレス確認を行ってください。
461461
add_email_success=新しいメールアドレスを追加しました。
462+
email_preference_set_success=メール設定を保存しました。
462463
add_openid_success=新しいOpenIDアドレスを追加しました。
463464
keep_email_private=メールアドレスを隠す
464465
keep_email_private_popup=あなたのメールアドレスは他のユーザーから隠されます。
@@ -826,6 +827,7 @@ issues.desc=バグ報告、タスク、マイルストーンの作成。
826827
issues.filter_assignees=候補者の絞り込み
827828
issues.filter_milestones=マイルストーンの絞り込み
828829
issues.filter_labels=ラベルの絞り込み
830+
issues.filter_reviewers=レビューアの絞り込み
829831
issues.new=新しい課題
830832
issues.new.title_empty=タイトルは空にできません
831833
issues.new.labels=ラベル
@@ -843,7 +845,9 @@ issues.new.assignees=担当者
843845
issues.new.add_assignees_title=担当者の割り当て
844846
issues.new.clear_assignees=担当者をクリア
845847
issues.new.no_assignees=担当者なし
846-
issues.no_ref=ブランチ/タグが指定されていません
848+
issues.new.no_reviewers=レビューアなし
849+
issues.new.add_reviewer_title=レビュー依頼
850+
issues.no_ref=ブランチ/タグ指定なし
847851
issues.create=課題を作成
848852
issues.new_label=新しいラベル
849853
issues.new_label_placeholder=ラベル名
@@ -936,6 +940,9 @@ issues.ref_from=` %[1]s にて`
936940
issues.poster=投稿者
937941
issues.collaborator=共同作業者
938942
issues.owner=オーナー
943+
issues.re_request_review=レビューを再依頼
944+
issues.remove_request_review=レビュー依頼を取り消し
945+
issues.remove_request_review_block=レビュー依頼の取り消しはできません
939946
issues.sign_in_require_desc=<a href="%s">サインイン</a>してこの会話に参加。
940947
issues.edit=編集
941948
issues.cancel=キャンセル
@@ -1045,8 +1052,13 @@ issues.review.self.approval=自分のプルリクエストを承認すること
10451052
issues.review.self.rejection=自分のプルリクエストに対して修正を要求することはできません。
10461053
issues.review.approve=が変更を承認 %s
10471054
issues.review.comment=がレビュー %s
1055+
issues.review.left_comment=がコメント
10481056
issues.review.content.empty=修正を指示するコメントを残す必要があります。
10491057
issues.review.reject=が変更を要請 %s
1058+
issues.review.wait=にレビュー依頼 %s
1059+
issues.review.add_review_request=が %s にレビューを依頼 %s
1060+
issues.review.remove_review_request=が %s へのレビュー依頼を取り消し %s
1061+
issues.review.remove_review_request_self=がレビューを拒否 %s
10501062
issues.review.pending=保留
10511063
issues.review.review=レビュー
10521064
issues.review.reviewers=レビューア
@@ -1095,6 +1107,8 @@ pulls.approve_count_1=承認 %d
10951107
pulls.approve_count_n=承認 %d
10961108
pulls.reject_count_1=変更要請 %d
10971109
pulls.reject_count_n=変更要請 %d
1110+
pulls.waiting_count_1=レビュー待ち %d
1111+
pulls.waiting_count_n=レビュー待ち %d
10981112

10991113
pulls.no_merge_desc=リポジトリのマージオプションがすべて無効になっているため、このプルリクエストをマージすることはできせん。
11001114
pulls.no_merge_helper=リポジトリ設定でマージを有効にするか、手動でマージしてください。

package-lock.json

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"core-js": "3.6.4",
1818
"css-loader": "3.4.2",
1919
"cssnano": "4.1.10",
20+
"domino": "2.1.4",
2021
"dropzone": "5.7.0",
2122
"fast-glob": "3.2.2",
2223
"fomantic-ui": "2.8.4",
@@ -44,7 +45,8 @@
4445
"vue-template-compiler": "2.6.11",
4546
"webpack": "4.42.0",
4647
"webpack-cli": "3.3.11",
47-
"webpack-fix-style-only-entries": "0.4.0"
48+
"webpack-fix-style-only-entries": "0.4.0",
49+
"worker-loader": "2.0.0"
4850
},
4951
"devDependencies": {
5052
"eslint": "6.8.0",

routers/api/v1/user/app.go

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

88
import (
9+
"errors"
910
"net/http"
1011

1112
"code.gitea.io/gitea/models"
@@ -89,6 +90,17 @@ func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption
8990
UID: ctx.User.ID,
9091
Name: form.Name,
9192
}
93+
94+
exist, err := models.AccessTokenByNameExists(t)
95+
if err != nil {
96+
ctx.InternalServerError(err)
97+
return
98+
}
99+
if exist {
100+
ctx.Error(http.StatusBadRequest, "AccessTokenByNameExists", errors.New("access token name has been used already"))
101+
return
102+
}
103+
92104
if err := models.NewAccessToken(t); err != nil {
93105
ctx.Error(http.StatusInternalServerError, "NewAccessToken", err)
94106
return

routers/user/setting/applications.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ func ApplicationsPost(ctx *context.Context, form auth.NewAccessTokenForm) {
4343
UID: ctx.User.ID,
4444
Name: form.Name,
4545
}
46+
47+
exist, err := models.AccessTokenByNameExists(t)
48+
if err != nil {
49+
ctx.ServerError("AccessTokenByNameExists", err)
50+
return
51+
}
52+
if exist {
53+
ctx.Flash.Error(ctx.Tr("settings.generate_token_name_duplicate", t.Name))
54+
ctx.Redirect(setting.AppSubURL + "/user/settings/applications")
55+
return
56+
}
57+
4658
if err := models.NewAccessToken(t); err != nil {
4759
ctx.ServerError("NewAccessToken", err)
4860
return

templates/explore/code.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</h3>
1919
<div>
2020
{{range $term := .SearchResultLanguages}}
21-
<a class="ui {{if eq $.Language $term.Language}}primary {{end}}basic label" href="{{AppSubUrl}}/explore/code?q={{$.Keyword}}{{if ne $.Language $term.Language}}&l={{$term.Language}}{{end}}">
21+
<a class="ui language-label {{if eq $.Language $term.Language}}primary {{end}}basic label" href="{{AppSubUrl}}/explore/code?q={{$.Keyword}}{{if ne $.Language $term.Language}}&l={{$term.Language}}{{end}}">
2222
<i class="color-icon" style="background-color: {{$term.Color}}"></i>
2323
{{$term.Language}}
2424
<div class="detail">{{$term.Count}}</div>

templates/repo/issue/view_content/comments.tmpl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
13 = STOP_TRACKING, 14 = ADD_TIME_MANUAL, 16 = ADDED_DEADLINE, 17 = MODIFIED_DEADLINE,
88
18 = REMOVED_DEADLINE, 19 = ADD_DEPENDENCY, 20 = REMOVE_DEPENDENCY, 21 = CODE,
99
22 = REVIEW, 23 = ISSUE_LOCKED, 24 = ISSUE_UNLOCKED, 25 = TARGET_BRANCH_CHANGED,
10-
26 = DELETE_TIME_MANUAL, 27 = REVIEW_REQUEST -->
10+
26 = DELETE_TIME_MANUAL, 27 = REVIEW_REQUEST, 28 = MERGE_PULL_REQUEST -->
1111
{{if eq .Type 0}}
1212
<div class="timeline-item comment" id="{{.HashTag}}">
1313
{{if .OriginalAuthor }}
@@ -84,6 +84,18 @@
8484
</a>
8585
<span class="text grey"><a href="{{.Poster.HomeLink}}">{{.Poster.GetDisplayName}}</a> {{$.i18n.Tr "repo.issues.closed_at" .EventTag $createdStr | Safe}}</span>
8686
</div>
87+
{{else if eq .Type 28}}
88+
<div class="timeline-item event" id="{{.HashTag}}">
89+
<span class="badge purple">{{svg "octicon-git-merge" 16}}</span>
90+
<a class="ui avatar image" href="{{.Poster.HomeLink}}">
91+
<img src="{{.Poster.RelAvatarLink}}">
92+
</a>
93+
<span class="text grey">
94+
<a href="{{.Poster.HomeLink}}">{{.Poster.GetDisplayName}}</a>
95+
{{$link := printf "%s/commit/%s" $.Repository.HTMLURL $.Issue.PullRequest.MergedCommitID}}
96+
{{$.i18n.Tr "repo.issues.pull_merged_at" $link (ShortSha $.Issue.PullRequest.MergedCommitID) $.BaseTarget $createdStr | Str2html}}
97+
</span>
98+
</div>
8799
{{else if eq .Type 3 5 6}}
88100
{{ $refFrom:= "" }}
89101
{{if ne .RefRepoID .Issue.RepoID}}

templates/repo/search.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</h3>
1919
<div>
2020
{{range $term := .SearchResultLanguages}}
21-
<a class="ui {{if eq $.Language $term.Language}}primary {{end}}basic label" href="{{EscapePound $.SourcePath}}/search?q={{$.Keyword}}{{if ne $.Language $term.Language}}&l={{$term.Language}}{{end}}">
21+
<a class="ui language-label {{if eq $.Language $term.Language}}primary {{end}}basic label" href="{{EscapePound $.SourcePath}}/search?q={{$.Keyword}}{{if ne $.Language $term.Language}}&l={{$term.Language}}{{end}}">
2222
<i class="color-icon" style="background-color: {{$term.Color}}"></i>
2323
{{$term.Language}}
2424
<div class="detail">{{$term.Count}}</div>

0 commit comments

Comments
 (0)