Skip to content

Commit f9e9bf4

Browse files
committed
Merge remote-tracking branch 'upstream/release/v1.16' into codeberg-1.16
2 parents 4964756 + 57c2ca7 commit f9e9bf4

File tree

30 files changed

+686
-376
lines changed

30 files changed

+686
-376
lines changed

.drone.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ steps:
109109
depends_on: [test-frontend]
110110

111111
- name: build-backend-no-gcc
112-
image: golang:1.17 # this step is kept as the lowest version of golang that we support
112+
image: golang:1.16 # this step is kept as the lowest version of golang that we support
113113
pull: always
114114
environment:
115115
GO111MODULE: on

Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,13 @@ help:
203203
go-check:
204204
$(eval MIN_GO_VERSION_STR := $(shell grep -Eo '^go\s+[0-9]+\.[0-9.]+' go.mod | cut -d' ' -f2))
205205
$(eval MIN_GO_VERSION := $(shell printf "%03d%03d%03d" $(shell echo '$(MIN_GO_VERSION_STR)' | tr '.' ' ')))
206-
$(eval GO_VERSION := $(shell printf "%03d%03d%03d" $(shell $(GO) version | grep -Eo '[0-9]+\.[0-9.]+' | tr '.' ' ');))
206+
$(eval GO_VERSION_STR := $(shell $(GO) version | grep -Eo '[0-9]+\.[0-9.]+'))
207+
$(eval GO_VERSION := $(shell printf "%03d%03d%03d" $(shell echo '$(GO_VERSION_STR)' | tr '.' ' ')))
207208
@if [ "$(GO_VERSION)" -lt "$(MIN_GO_VERSION)" ]; then \
208-
echo "Gitea requires Go $(MIN_GO_VERSION_STR) or greater to build. You can get it at https://go.dev/dl/"; \
209+
echo "Gitea requires Go $(MIN_GO_VERSION_STR) or greater to build, but $(GO_VERSION) was found. You can get an updated version at https://go.dev/dl/"; \
209210
exit 1; \
211+
else \
212+
echo "WARNING: Please ensure Go $(GO_VERSION_STR) is still maintained to avoid possible security problems. You can check it at https://go.dev/dl/"; \
210213
fi
211214

212215
.PHONY: git-check

docs/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ params:
1919
author: The Gitea Authors
2020
website: https://docs.gitea.io
2121
version: 1.16.4
22-
minGoVersion: 1.17
22+
minGoVersion: 1.16
2323
goVersion: 1.18
2424
minNodeVersion: 12.17
2525

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module code.gitea.io/gitea
22

3-
go 1.17
3+
go 1.16
44

55
require (
66
cloud.google.com/go v0.99.0 // indirect

models/org_team.go

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -940,11 +940,6 @@ func AddTeamMember(team *Team, userID int64) error {
940940
return err
941941
}
942942

943-
// Get team and its repositories.
944-
if err := team.GetRepositories(&SearchOrgTeamOptions{}); err != nil {
945-
return err
946-
}
947-
948943
ctx, committer, err := db.TxContext()
949944
if err != nil {
950945
return err
@@ -966,17 +961,51 @@ func AddTeamMember(team *Team, userID int64) error {
966961
team.NumMembers++
967962

968963
// Give access to team repositories.
969-
for _, repo := range team.Repos {
970-
if err := recalculateUserAccess(ctx, repo, userID); err != nil {
971-
return err
972-
}
973-
if setting.Service.AutoWatchNewRepos {
974-
if err = repo_model.WatchRepoCtx(ctx, userID, repo.ID, true); err != nil {
975-
return err
964+
// update exist access if mode become bigger
965+
subQuery := builder.Select("repo_id").From("team_repo").
966+
Where(builder.Eq{"team_id": team.ID})
967+
968+
if _, err := sess.Where("user_id=?", userID).
969+
In("repo_id", subQuery).
970+
And("mode < ?", team.AccessMode).
971+
SetExpr("mode", team.AccessMode).
972+
Update(new(Access)); err != nil {
973+
return fmt.Errorf("update user accesses: %v", err)
974+
}
975+
976+
// for not exist access
977+
var repoIDs []int64
978+
accessSubQuery := builder.Select("repo_id").From("access").Where(builder.Eq{"user_id": userID})
979+
if err := sess.SQL(subQuery.And(builder.NotIn("repo_id", accessSubQuery))).Find(&repoIDs); err != nil {
980+
return fmt.Errorf("select id accesses: %v", err)
981+
}
982+
983+
accesses := make([]*Access, 0, 100)
984+
for i, repoID := range repoIDs {
985+
accesses = append(accesses, &Access{RepoID: repoID, UserID: userID, Mode: team.AccessMode})
986+
if (i%100 == 0 || i == len(repoIDs)-1) && len(accesses) > 0 {
987+
if err = db.Insert(ctx, accesses); err != nil {
988+
return fmt.Errorf("insert new user accesses: %v", err)
976989
}
990+
accesses = accesses[:0]
977991
}
978992
}
979993

994+
// watch could be failed, so run it in a goroutine
995+
if setting.Service.AutoWatchNewRepos {
996+
// Get team and its repositories.
997+
if err := team.GetRepositories(&SearchOrgTeamOptions{}); err != nil {
998+
log.Error("getRepositories failed: %v", err)
999+
}
1000+
go func(repos []*repo_model.Repository) {
1001+
for _, repo := range repos {
1002+
if err = repo_model.WatchRepoCtx(db.DefaultContext, userID, repo.ID, true); err != nil {
1003+
log.Error("watch repo failed: %v", err)
1004+
}
1005+
}
1006+
}(team.Repos)
1007+
}
1008+
9801009
return committer.Commit()
9811010
}
9821011

models/pull.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -222,22 +222,19 @@ func (pr *PullRequest) loadProtectedBranch(ctx context.Context) (err error) {
222222
}
223223

224224
// GetDefaultMergeMessage returns default message used when merging pull request
225-
func (pr *PullRequest) GetDefaultMergeMessage() string {
225+
func (pr *PullRequest) GetDefaultMergeMessage() (string, error) {
226226
if pr.HeadRepo == nil {
227227
var err error
228228
pr.HeadRepo, err = repo_model.GetRepositoryByID(pr.HeadRepoID)
229229
if err != nil {
230-
log.Error("GetRepositoryById[%d]: %v", pr.HeadRepoID, err)
231-
return ""
230+
return "", fmt.Errorf("GetRepositoryById[%d]: %v", pr.HeadRepoID, err)
232231
}
233232
}
234233
if err := pr.LoadIssue(); err != nil {
235-
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
236-
return ""
234+
return "", fmt.Errorf("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
237235
}
238236
if err := pr.LoadBaseRepo(); err != nil {
239-
log.Error("LoadBaseRepo: %v", err)
240-
return ""
237+
return "", fmt.Errorf("LoadBaseRepo: %v", err)
241238
}
242239

243240
issueReference := "#"
@@ -246,10 +243,10 @@ func (pr *PullRequest) GetDefaultMergeMessage() string {
246243
}
247244

248245
if pr.BaseRepoID == pr.HeadRepoID {
249-
return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch)
246+
return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadBranch, pr.BaseBranch), nil
250247
}
251248

252-
return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s:%s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseBranch)
249+
return fmt.Sprintf("Merge pull request '%s' (%s%d) from %s:%s into %s", pr.Issue.Title, issueReference, pr.Issue.Index, pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseBranch), nil
253250
}
254251

255252
// ReviewCount represents a count of Reviews
@@ -335,19 +332,17 @@ func (pr *PullRequest) getReviewedByLines(writer io.Writer) error {
335332
}
336333

337334
// GetDefaultSquashMessage returns default message used when squash and merging pull request
338-
func (pr *PullRequest) GetDefaultSquashMessage() string {
335+
func (pr *PullRequest) GetDefaultSquashMessage() (string, error) {
339336
if err := pr.LoadIssue(); err != nil {
340-
log.Error("LoadIssue: %v", err)
341-
return ""
337+
return "", fmt.Errorf("LoadIssue: %v", err)
342338
}
343339
if err := pr.LoadBaseRepo(); err != nil {
344-
log.Error("LoadBaseRepo: %v", err)
345-
return ""
340+
return "", fmt.Errorf("LoadBaseRepo: %v", err)
346341
}
347342
if pr.BaseRepo.UnitEnabled(unit.TypeExternalTracker) {
348-
return fmt.Sprintf("%s (!%d)", pr.Issue.Title, pr.Issue.Index)
343+
return fmt.Sprintf("%s (!%d)", pr.Issue.Title, pr.Issue.Index), nil
349344
}
350-
return fmt.Sprintf("%s (#%d)", pr.Issue.Title, pr.Issue.Index)
345+
return fmt.Sprintf("%s (#%d)", pr.Issue.Title, pr.Issue.Index), nil
351346
}
352347

353348
// GetGitRefName returns git ref for hidden pull request branch

models/pull_test.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,15 @@ func TestPullRequest_GetDefaultMergeMessage_InternalTracker(t *testing.T) {
261261
assert.NoError(t, unittest.PrepareTestDatabase())
262262
pr := unittest.AssertExistsAndLoadBean(t, &PullRequest{ID: 2}).(*PullRequest)
263263

264-
assert.Equal(t, "Merge pull request 'issue3' (#3) from branch2 into master", pr.GetDefaultMergeMessage())
264+
msg, err := pr.GetDefaultMergeMessage()
265+
assert.NoError(t, err)
266+
assert.Equal(t, "Merge pull request 'issue3' (#3) from branch2 into master", msg)
265267

266268
pr.BaseRepoID = 1
267269
pr.HeadRepoID = 2
268-
assert.Equal(t, "Merge pull request 'issue3' (#3) from user2/repo1:branch2 into master", pr.GetDefaultMergeMessage())
270+
msg, err = pr.GetDefaultMergeMessage()
271+
assert.NoError(t, err)
272+
assert.Equal(t, "Merge pull request 'issue3' (#3) from user2/repo1:branch2 into master", msg)
269273
}
270274

271275
func TestPullRequest_GetDefaultMergeMessage_ExternalTracker(t *testing.T) {
@@ -283,9 +287,13 @@ func TestPullRequest_GetDefaultMergeMessage_ExternalTracker(t *testing.T) {
283287

284288
pr := unittest.AssertExistsAndLoadBean(t, &PullRequest{ID: 2, BaseRepo: baseRepo}).(*PullRequest)
285289

286-
assert.Equal(t, "Merge pull request 'issue3' (!3) from branch2 into master", pr.GetDefaultMergeMessage())
290+
msg, err := pr.GetDefaultMergeMessage()
291+
assert.NoError(t, err)
292+
assert.Equal(t, "Merge pull request 'issue3' (!3) from branch2 into master", msg)
287293

288294
pr.BaseRepoID = 1
289295
pr.HeadRepoID = 2
290-
assert.Equal(t, "Merge pull request 'issue3' (!3) from user2/repo1:branch2 into master", pr.GetDefaultMergeMessage())
296+
msg, err = pr.GetDefaultMergeMessage()
297+
assert.NoError(t, err)
298+
assert.Equal(t, "Merge pull request 'issue3' (!3) from user2/repo1:branch2 into master", msg)
291299
}

models/webhook/webhook.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -497,14 +497,19 @@ func GetSystemOrDefaultWebhook(id int64) (*Webhook, error) {
497497
}
498498

499499
// GetSystemWebhooks returns all admin system webhooks.
500-
func GetSystemWebhooks() ([]*Webhook, error) {
501-
return getSystemWebhooks(db.GetEngine(db.DefaultContext))
500+
func GetSystemWebhooks(isActive util.OptionalBool) ([]*Webhook, error) {
501+
return getSystemWebhooks(db.GetEngine(db.DefaultContext), isActive)
502502
}
503503

504-
func getSystemWebhooks(e db.Engine) ([]*Webhook, error) {
504+
func getSystemWebhooks(e db.Engine, isActive util.OptionalBool) ([]*Webhook, error) {
505505
webhooks := make([]*Webhook, 0, 5)
506+
if isActive.IsNone() {
507+
return webhooks, e.
508+
Where("repo_id=? AND org_id=? AND is_system_webhook=?", 0, 0, true).
509+
Find(&webhooks)
510+
}
506511
return webhooks, e.
507-
Where("repo_id=? AND org_id=? AND is_system_webhook=?", 0, 0, true).
512+
Where("repo_id=? AND org_id=? AND is_system_webhook=? AND is_active = ?", 0, 0, true, isActive.IsTrue()).
508513
Find(&webhooks)
509514
}
510515

modules/context/csrf.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ func Csrfer(opt CsrfOptions, ctx *Context) CSRF {
229229
}
230230
}
231231

232+
needsNew = needsNew || ctx.Req.Method == "GET" // If this request is a Get request, it will generate a new token, make sure the token is always up-to-date.
232233
if needsNew {
233234
// FIXME: actionId.
234235
x.Token = GenerateToken(x.Secret, x.ID, "POST")

modules/git/repo_branch_gogit.go

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"strings"
1414

1515
"github.com/go-git/go-git/v5/plumbing"
16+
"github.com/go-git/go-git/v5/plumbing/storer"
1617
)
1718

1819
// IsObjectExist returns true if given reference exists in the repository.
@@ -82,7 +83,8 @@ func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error) {
8283
}
8384

8485
// WalkReferences walks all the references from the repository
85-
func WalkReferences(ctx context.Context, repoPath string, walkfn func(string) error) (int, error) {
86+
// refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.
87+
func WalkReferences(ctx context.Context, repoPath string, walkfn func(sha1, refname string) error) (int, error) {
8688
repo, err := OpenRepositoryCtx(ctx, repoPath)
8789
if err != nil {
8890
return 0, err
@@ -97,9 +99,45 @@ func WalkReferences(ctx context.Context, repoPath string, walkfn func(string) er
9799
defer iter.Close()
98100

99101
err = iter.ForEach(func(ref *plumbing.Reference) error {
100-
err := walkfn(string(ref.Name()))
102+
err := walkfn(ref.Hash().String(), string(ref.Name()))
101103
i++
102104
return err
103105
})
104106
return i, err
105107
}
108+
109+
// WalkReferences walks all the references from the repository
110+
func (repo *Repository) WalkReferences(arg ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {
111+
i := 0
112+
var iter storer.ReferenceIter
113+
var err error
114+
switch arg {
115+
case ObjectTag:
116+
iter, err = repo.gogitRepo.Tags()
117+
case ObjectBranch:
118+
iter, err = repo.gogitRepo.Branches()
119+
default:
120+
iter, err = repo.gogitRepo.References()
121+
}
122+
if err != nil {
123+
return i, err
124+
}
125+
defer iter.Close()
126+
127+
err = iter.ForEach(func(ref *plumbing.Reference) error {
128+
if i < skip {
129+
i++
130+
return nil
131+
}
132+
err := walkfn(ref.Hash().String(), string(ref.Name()))
133+
i++
134+
if err != nil {
135+
return err
136+
}
137+
if limit != 0 && i >= skip+limit {
138+
return storer.ErrStop
139+
}
140+
return nil
141+
})
142+
return i, err
143+
}

modules/git/repo_branch_nogogit.go

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,29 @@ func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error) {
6868
}
6969

7070
// WalkReferences walks all the references from the repository
71-
func WalkReferences(ctx context.Context, repoPath string, walkfn func(string) error) (int, error) {
71+
func WalkReferences(ctx context.Context, repoPath string, walkfn func(sha1, refname string) error) (int, error) {
7272
return walkShowRef(ctx, repoPath, "", 0, 0, walkfn)
7373
}
7474

75+
// WalkReferences walks all the references from the repository
76+
// refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.
77+
func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {
78+
var arg string
79+
switch refType {
80+
case ObjectTag:
81+
arg = "--tags"
82+
case ObjectBranch:
83+
arg = "--heads"
84+
default:
85+
arg = ""
86+
}
87+
88+
return walkShowRef(repo.Ctx, repo.Path, arg, skip, limit, walkfn)
89+
}
90+
7591
// callShowRef return refs, if limit = 0 it will not limit
7692
func callShowRef(ctx context.Context, repoPath, prefix, arg string, skip, limit int) (branchNames []string, countAll int, err error) {
77-
countAll, err = walkShowRef(ctx, repoPath, arg, skip, limit, func(branchName string) error {
93+
countAll, err = walkShowRef(ctx, repoPath, arg, skip, limit, func(_, branchName string) error {
7894
branchName = strings.TrimPrefix(branchName, prefix)
7995
branchNames = append(branchNames, branchName)
8096

@@ -83,7 +99,7 @@ func callShowRef(ctx context.Context, repoPath, prefix, arg string, skip, limit
8399
return
84100
}
85101

86-
func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, walkfn func(string) error) (countAll int, err error) {
102+
func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, walkfn func(sha1, refname string) error) (countAll int, err error) {
87103
stdoutReader, stdoutWriter := io.Pipe()
88104
defer func() {
89105
_ = stdoutReader.Close()
@@ -125,11 +141,7 @@ func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, wal
125141
for limit == 0 || i < skip+limit {
126142
// The output of show-ref is simply a list:
127143
// <sha> SP <ref> LF
128-
_, err := bufReader.ReadSlice(' ')
129-
for err == bufio.ErrBufferFull {
130-
// This shouldn't happen but we'll tolerate it for the sake of peace
131-
_, err = bufReader.ReadSlice(' ')
132-
}
144+
sha, err := bufReader.ReadString(' ')
133145
if err == io.EOF {
134146
return i, nil
135147
}
@@ -149,7 +161,12 @@ func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, wal
149161
if len(branchName) > 0 {
150162
branchName = branchName[:len(branchName)-1]
151163
}
152-
err = walkfn(branchName)
164+
165+
if len(sha) > 0 {
166+
sha = sha[:len(sha)-1]
167+
}
168+
169+
err = walkfn(sha, branchName)
153170
if err != nil {
154171
return i, err
155172
}

modules/git/repo_commitgraph.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright 2022 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package git
6+
7+
import (
8+
"context"
9+
"fmt"
10+
)
11+
12+
// WriteCommitGraph write commit graph to speed up repo access
13+
// this requires git v2.18 to be installed
14+
func WriteCommitGraph(ctx context.Context, repoPath string) error {
15+
if CheckGitVersionAtLeast("2.18") == nil {
16+
if _, err := NewCommandContext(ctx, "commit-graph", "write").RunInDir(repoPath); err != nil {
17+
return fmt.Errorf("unable to write commit-graph for '%s' : %w", repoPath, err)
18+
}
19+
}
20+
return nil
21+
}

0 commit comments

Comments
 (0)