Skip to content

Commit ebd6917

Browse files
committed
Merge remote-tracking branch 'upstream/main'
* upstream/main: adapt README_{Country}.md stype name in localizedExtensions (go-gitea#21486) dump: Add option to skip index dirs (go-gitea#21501) Use recommended vscode configuration in gitpod environments (go-gitea#21537) Expand "Go to File" button again, fix 'Add File' margin (go-gitea#21543) Add yardenshoham to maintainers (go-gitea#21566) Refactor git command arguments and make all arguments to be safe to be used (go-gitea#21535) Update binding to fix bugs (go-gitea#21556) Link mentioned user in markdown only if they are visible to viewer (go-gitea#21554) Require authentication for OAuth token refresh (go-gitea#21421) CSS color enhancements (go-gitea#21534) Allow package version sorting (go-gitea#21453) Add link to user profile in markdown mention only if user exists (go-gitea#21533) Update milestone counters when issue is deleted (go-gitea#21459) Prevent Authorization header for presigned LFS urls (go-gitea#21531) Remove deleted repos from searchresult (go-gitea#21512) Remove unnecessary debug log (go-gitea#21536) Added check for disabled Packages (go-gitea#21540) Decouple HookTask from Repository (go-gitea#17940) Add color previews in markdown (go-gitea#21474) Fix generating compare link (go-gitea#21519)
2 parents 8c21404 + e1ce45e commit ebd6917

File tree

128 files changed

+1306
-736
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+1306
-736
lines changed

.gitpod.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
tasks:
22
- name: Setup
33
init: |
4+
cp -r contrib/ide/vscode .vscode
45
make deps
56
make build
67
command: |

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,4 @@ silentcode <silentcode@senga.org> (@silentcodeg)
4949
Wim <wim@42.be> (@42wim)
5050
xinyu <xinyu@nerv.org.cn> (@penlinux)
5151
Jason Song <i@wolfogre.com> (@wolfogre)
52+
Yarden Shoham <hrsi88@gmail.com> (@yardenshoham)

cmd/dump.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@ It can be used for backup and capture Gitea server image to send to maintainer`,
146146
Name: "skip-package-data",
147147
Usage: "Skip package data",
148148
},
149+
cli.BoolFlag{
150+
Name: "skip-index",
151+
Usage: "Skip bleve index data",
152+
},
149153
cli.GenericFlag{
150154
Name: "type",
151155
Value: outputTypeEnum,
@@ -327,6 +331,11 @@ func runDump(ctx *cli.Context) error {
327331
excludes = append(excludes, opts.ProviderConfig)
328332
}
329333

334+
if ctx.IsSet("skip-index") && ctx.Bool("skip-index") {
335+
excludes = append(excludes, setting.Indexer.RepoPath)
336+
excludes = append(excludes, setting.Indexer.IssuePath)
337+
}
338+
330339
excludes = append(excludes, setting.RepoRootPath)
331340
excludes = append(excludes, setting.LFS.Path)
332341
excludes = append(excludes, setting.Attachment.Path)

contrib/pr/checkout.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"code.gitea.io/gitea/modules/setting"
3434
"code.gitea.io/gitea/modules/util"
3535
"code.gitea.io/gitea/routers"
36+
markup_service "code.gitea.io/gitea/services/markup"
3637

3738
"github.com/go-git/go-git/v5"
3839
"github.com/go-git/go-git/v5/config"
@@ -112,7 +113,7 @@ func runPR() {
112113
log.Printf("[PR] Setting up router\n")
113114
// routers.GlobalInit()
114115
external.RegisterRenderers()
115-
markup.Init()
116+
markup.Init(markup_service.ProcessorHelper())
116117
c := routers.NormalRoutes(graceful.GetManager().HammerContext())
117118

118119
log.Printf("[PR] Ready for testing !\n")

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
code.gitea.io/gitea-vet v0.2.2-0.20220122151748-48ebc902541b
77
code.gitea.io/sdk/gitea v0.15.1
88
codeberg.org/gusted/mcaptcha v0.0.0-20220723083913-4f3072e1d570
9-
gitea.com/go-chi/binding v0.0.0-20220309004920-114340dabecb
9+
gitea.com/go-chi/binding v0.0.0-20221013104517-b29891619681
1010
gitea.com/go-chi/cache v0.2.0
1111
gitea.com/go-chi/captcha v0.0.0-20211013065431-70641c1a35d5
1212
gitea.com/go-chi/session v0.0.0-20211218221615-e3605d8b28b8

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcig
8181
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
8282
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 h1:cliQ4HHsCo6xi2oWZYKWW4bly/Ory9FuTpFPRxj/mAg=
8383
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078/go.mod h1:g/V2Hjas6Z1UHUp4yIx6bATpNzJ7DYtD0FG3+xARWxs=
84-
gitea.com/go-chi/binding v0.0.0-20220309004920-114340dabecb h1:Yy0Bxzc8R2wxiwXoG/rECGplJUSpXqCsog9PuJFgiHs=
85-
gitea.com/go-chi/binding v0.0.0-20220309004920-114340dabecb/go.mod h1:77TZu701zMXWJFvB8gvTbQ92zQ3DQq/H7l5wAEjQRKc=
84+
gitea.com/go-chi/binding v0.0.0-20221013104517-b29891619681 h1:MMSPgnVULVwV9kEBgvyEUhC9v/uviZ55hPJEMjpbNR4=
85+
gitea.com/go-chi/binding v0.0.0-20221013104517-b29891619681/go.mod h1:77TZu701zMXWJFvB8gvTbQ92zQ3DQq/H7l5wAEjQRKc=
8686
gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e/go.mod h1:k2V/gPDEtXGjjMGuBJiapffAXTv76H4snSmlJRLUhH0=
8787
gitea.com/go-chi/cache v0.2.0 h1:E0npuTfDW6CT1yD8NMDVc1SK6IeRjfmRL2zlEsCEd7w=
8888
gitea.com/go-chi/cache v0.2.0/go.mod h1:iQlVK2aKTZ/rE9UcHyz9pQWGvdP9i1eI2spOpzgCrtE=

models/fixtures/hook_task.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
-
22
id: 1
3-
repo_id: 1
43
hook_id: 1
54
uuid: uuid1
65
is_delivered: true
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# type Milestone struct {
2+
# ID int64 `xorm:"pk autoincr"`
3+
# IsClosed bool
4+
# NumIssues int
5+
# NumClosedIssues int
6+
# Completeness int // Percentage(1-100).
7+
# }
8+
-
9+
id: 1
10+
is_closed: false
11+
num_issues: 3
12+
num_closed_issues: 1
13+
completeness: 33
14+
-
15+
id: 2
16+
is_closed: true
17+
num_issues: 5
18+
num_closed_issues: 5
19+
completeness: 100
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# type Issue struct {
2+
# ID int64 `xorm:"pk autoincr"`
3+
# RepoID int64 `xorm:"INDEX UNIQUE(repo_index)"`
4+
# Index int64 `xorm:"UNIQUE(repo_index)"` // Index in one repository.
5+
# MilestoneID int64 `xorm:"INDEX"`
6+
# IsClosed bool `xorm:"INDEX"`
7+
# }
8+
-
9+
id: 1
10+
repo_id: 1
11+
index: 1
12+
milestone_id: 1
13+
is_closed: false
14+
-
15+
id: 2
16+
repo_id: 1
17+
index: 2
18+
milestone_id: 1
19+
is_closed: true
20+
-
21+
id: 4
22+
repo_id: 1
23+
index: 3
24+
milestone_id: 1
25+
is_closed: false
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# type Milestone struct {
2+
# ID int64 `xorm:"pk autoincr"`
3+
# IsClosed bool
4+
# NumIssues int
5+
# NumClosedIssues int
6+
# Completeness int // Percentage(1-100).
7+
# }
8+
-
9+
id: 1
10+
is_closed: false
11+
num_issues: 4
12+
num_closed_issues: 2
13+
completeness: 50
14+
-
15+
id: 2
16+
is_closed: true
17+
num_issues: 5
18+
num_closed_issues: 5
19+
completeness: 100

models/migrations/migrations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@ var migrations = []Migration{
419419
NewMigration("Create key/value table for system settings", createSystemSettingsTable),
420420
// v228 -> v229
421421
NewMigration("Add TeamInvite table", addTeamInviteTable),
422+
// v229 -> v230
423+
NewMigration("Update counts of all open milestones", updateOpenMilestoneCounts),
422424
}
423425

424426
// GetCurrentDBVersion returns the current db version

models/migrations/v128.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,17 @@ func fixMergeBase(x *xorm.Engine) error {
8383

8484
if !pr.HasMerged {
8585
var err error
86-
pr.MergeBase, _, err = git.NewCommand(git.DefaultContext, "merge-base", "--", pr.BaseBranch, gitRefName).RunStdString(&git.RunOpts{Dir: repoPath})
86+
pr.MergeBase, _, err = git.NewCommand(git.DefaultContext, "merge-base").AddDashesAndList(pr.BaseBranch, gitRefName).RunStdString(&git.RunOpts{Dir: repoPath})
8787
if err != nil {
8888
var err2 error
89-
pr.MergeBase, _, err2 = git.NewCommand(git.DefaultContext, "rev-parse", git.BranchPrefix+pr.BaseBranch).RunStdString(&git.RunOpts{Dir: repoPath})
89+
pr.MergeBase, _, err2 = git.NewCommand(git.DefaultContext, "rev-parse").AddDynamicArguments(git.BranchPrefix + pr.BaseBranch).RunStdString(&git.RunOpts{Dir: repoPath})
9090
if err2 != nil {
9191
log.Error("Unable to get merge base for PR ID %d, Index %d in %s/%s. Error: %v & %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err, err2)
9292
continue
9393
}
9494
}
9595
} else {
96-
parentsString, _, err := git.NewCommand(git.DefaultContext, "rev-list", "--parents", "-n", "1", pr.MergedCommitID).RunStdString(&git.RunOpts{Dir: repoPath})
96+
parentsString, _, err := git.NewCommand(git.DefaultContext, "rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).RunStdString(&git.RunOpts{Dir: repoPath})
9797
if err != nil {
9898
log.Error("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
9999
continue
@@ -103,10 +103,11 @@ func fixMergeBase(x *xorm.Engine) error {
103103
continue
104104
}
105105

106-
args := append([]string{"merge-base", "--"}, parents[1:]...)
107-
args = append(args, gitRefName)
106+
refs := append([]string{}, parents[1:]...)
107+
refs = append(refs, gitRefName)
108+
cmd := git.NewCommand(git.DefaultContext, "merge-base").AddDashesAndList(refs...)
108109

109-
pr.MergeBase, _, err = git.NewCommand(git.DefaultContext, args...).RunStdString(&git.RunOpts{Dir: repoPath})
110+
pr.MergeBase, _, err = cmd.RunStdString(&git.RunOpts{Dir: repoPath})
110111
if err != nil {
111112
log.Error("Unable to get merge base for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
112113
continue

models/migrations/v134.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func refixMergeBase(x *xorm.Engine) error {
8080

8181
gitRefName := fmt.Sprintf("refs/pull/%d/head", pr.Index)
8282

83-
parentsString, _, err := git.NewCommand(git.DefaultContext, "rev-list", "--parents", "-n", "1", pr.MergedCommitID).RunStdString(&git.RunOpts{Dir: repoPath})
83+
parentsString, _, err := git.NewCommand(git.DefaultContext, "rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).RunStdString(&git.RunOpts{Dir: repoPath})
8484
if err != nil {
8585
log.Error("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
8686
continue
@@ -91,10 +91,11 @@ func refixMergeBase(x *xorm.Engine) error {
9191
}
9292

9393
// we should recalculate
94-
args := append([]string{"merge-base", "--"}, parents[1:]...)
95-
args = append(args, gitRefName)
94+
refs := append([]string{}, parents[1:]...)
95+
refs = append(refs, gitRefName)
96+
cmd := git.NewCommand(git.DefaultContext, "merge-base").AddDashesAndList(refs...)
9697

97-
pr.MergeBase, _, err = git.NewCommand(git.DefaultContext, args...).RunStdString(&git.RunOpts{Dir: repoPath})
98+
pr.MergeBase, _, err = cmd.RunStdString(&git.RunOpts{Dir: repoPath})
9899
if err != nil {
99100
log.Error("Unable to get merge base for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
100101
continue

models/migrations/v229.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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 migrations
6+
7+
import (
8+
"fmt"
9+
10+
"code.gitea.io/gitea/models/issues"
11+
12+
"xorm.io/builder"
13+
"xorm.io/xorm"
14+
)
15+
16+
func updateOpenMilestoneCounts(x *xorm.Engine) error {
17+
var openMilestoneIDs []int64
18+
err := x.Table("milestone").Select("id").Where(builder.Neq{"is_closed": 1}).Find(&openMilestoneIDs)
19+
if err != nil {
20+
return fmt.Errorf("error selecting open milestone IDs: %w", err)
21+
}
22+
23+
for _, id := range openMilestoneIDs {
24+
_, err := x.ID(id).
25+
SetExpr("num_issues", builder.Select("count(*)").From("issue").Where(
26+
builder.Eq{"milestone_id": id},
27+
)).
28+
SetExpr("num_closed_issues", builder.Select("count(*)").From("issue").Where(
29+
builder.Eq{
30+
"milestone_id": id,
31+
"is_closed": true,
32+
},
33+
)).
34+
Update(&issues.Milestone{})
35+
if err != nil {
36+
return fmt.Errorf("error updating issue counts in milestone %d: %w", id, err)
37+
}
38+
_, err = x.Exec("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?",
39+
id,
40+
)
41+
if err != nil {
42+
return fmt.Errorf("error setting completeness on milestone %d: %w", id, err)
43+
}
44+
}
45+
46+
return nil
47+
}

models/migrations/v229_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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 migrations
6+
7+
import (
8+
"testing"
9+
10+
"code.gitea.io/gitea/models/issues"
11+
12+
"github.com/stretchr/testify/assert"
13+
)
14+
15+
func Test_updateOpenMilestoneCounts(t *testing.T) {
16+
type ExpectedMilestone issues.Milestone
17+
18+
// Prepare and load the testing database
19+
x, deferable := prepareTestEnv(t, 0, new(issues.Milestone), new(ExpectedMilestone), new(issues.Issue))
20+
defer deferable()
21+
if x == nil || t.Failed() {
22+
return
23+
}
24+
25+
if err := updateOpenMilestoneCounts(x); err != nil {
26+
assert.NoError(t, err)
27+
return
28+
}
29+
30+
expected := []ExpectedMilestone{}
31+
if err := x.Table("expected_milestone").Asc("id").Find(&expected); !assert.NoError(t, err) {
32+
return
33+
}
34+
35+
got := []issues.Milestone{}
36+
if err := x.Table("milestone").Asc("id").Find(&got); !assert.NoError(t, err) {
37+
return
38+
}
39+
40+
for i, e := range expected {
41+
got := got[i]
42+
assert.Equal(t, e.ID, got.ID)
43+
assert.Equal(t, e.NumIssues, got.NumIssues)
44+
assert.Equal(t, e.NumClosedIssues, got.NumClosedIssues)
45+
}
46+
}

models/packages/container/search.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ type ImageTagsSearchOptions struct {
165165
PackageID int64
166166
Query string
167167
IsTagged bool
168+
Sort packages.VersionSort
168169
db.Paginator
169170
}
170171

@@ -195,12 +196,26 @@ func (opts *ImageTagsSearchOptions) toConds() builder.Cond {
195196
return cond
196197
}
197198

199+
func (opts *ImageTagsSearchOptions) configureOrderBy(e db.Engine) {
200+
switch opts.Sort {
201+
case packages.SortVersionDesc:
202+
e.Desc("package_version.version")
203+
case packages.SortVersionAsc:
204+
e.Asc("package_version.version")
205+
case packages.SortCreatedAsc:
206+
e.Asc("package_version.created_unix")
207+
default:
208+
e.Desc("package_version.created_unix")
209+
}
210+
}
211+
198212
// SearchImageTags gets a sorted list of the tags of an image
199213
func SearchImageTags(ctx context.Context, opts *ImageTagsSearchOptions) ([]*packages.PackageVersion, int64, error) {
200214
sess := db.GetEngine(ctx).
201215
Join("INNER", "package", "package.id = package_version.package_id").
202-
Where(opts.toConds()).
203-
Desc("package_version.created_unix")
216+
Where(opts.toConds())
217+
218+
opts.configureOrderBy(sess)
204219

205220
if opts.Paginator != nil {
206221
sess = db.SetSessionPagination(sess, opts)

models/packages/package_version.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,17 @@ type SearchValue struct {
163163
ExactMatch bool
164164
}
165165

166+
type VersionSort = string
167+
168+
const (
169+
SortNameAsc VersionSort = "name_asc"
170+
SortNameDesc VersionSort = "name_desc"
171+
SortVersionAsc VersionSort = "version_asc"
172+
SortVersionDesc VersionSort = "version_desc"
173+
SortCreatedAsc VersionSort = "created_asc"
174+
SortCreatedDesc VersionSort = "created_desc"
175+
)
176+
166177
// PackageSearchOptions are options for SearchXXX methods
167178
// Besides IsInternal are all fields optional and are not used if they have their default value (nil, "", 0)
168179
type PackageSearchOptions struct {
@@ -176,7 +187,7 @@ type PackageSearchOptions struct {
176187
IsInternal util.OptionalBool
177188
HasFileWithName string // only results are found which are associated with a file with the specific name
178189
HasFiles util.OptionalBool // only results are found which have associated files
179-
Sort string
190+
Sort VersionSort
180191
db.Paginator
181192
}
182193

@@ -254,15 +265,15 @@ func (opts *PackageSearchOptions) toConds() builder.Cond {
254265

255266
func (opts *PackageSearchOptions) configureOrderBy(e db.Engine) {
256267
switch opts.Sort {
257-
case "alphabetically":
268+
case SortNameAsc:
258269
e.Asc("package.name")
259-
case "reversealphabetically":
270+
case SortNameDesc:
260271
e.Desc("package.name")
261-
case "highestversion":
272+
case SortVersionDesc:
262273
e.Desc("package_version.version")
263-
case "lowestversion":
274+
case SortVersionAsc:
264275
e.Asc("package_version.version")
265-
case "oldest":
276+
case SortCreatedAsc:
266277
e.Asc("package_version.created_unix")
267278
default:
268279
e.Desc("package_version.created_unix")

0 commit comments

Comments
 (0)