瀏覽代碼

Enable more `revive` linter rules (#30608)

Noteable additions:

- `redefines-builtin-id` forbid variable names that shadow go builtins
- `empty-lines` remove unnecessary empty lines that `gofumpt` does not
remove for some reason
- `superfluous-else` eliminate more superfluous `else` branches

Rules are also sorted alphabetically and I cleaned up various parts of
`.golangci.yml`.
tags/v1.22.0-rc1
silverwind 3 週之前
父節點
當前提交
74f0c84fa4
沒有連結到貢獻者的電子郵件帳戶。
共有 76 個檔案被更改,包括 133 行新增188 行删除
  1. 32
    23
      .golangci.yml
  2. 1
    1
      cmd/hook.go
  3. 0
    1
      models/asymkey/gpg_key_commit_verification.go
  4. 0
    1
      models/db/engine.go
  5. 0
    2
      models/issues/review.go
  6. 0
    5
      models/migrations/base/db.go
  7. 0
    2
      models/migrations/v1_11/v111.go
  8. 2
    2
      models/migrations/v1_20/v250.go
  9. 0
    1
      models/migrations/v1_6/v71.go
  10. 0
    1
      models/migrations/v1_9/v85.go
  11. 1
    2
      models/organization/team.go
  12. 0
    2
      models/project/board.go
  13. 0
    1
      models/repo/user_repo.go
  14. 1
    2
      models/user/user.go
  15. 6
    6
      modules/auth/password/password.go
  16. 3
    3
      modules/git/batch_reader.go
  17. 1
    2
      modules/git/commit_reader.go
  18. 0
    1
      modules/git/pipeline/lfs_nogogit.go
  19. 4
    4
      modules/git/repo_commit.go
  20. 0
    1
      modules/git/submodule.go
  21. 0
    2
      modules/indexer/code/bleve/bleve.go
  22. 0
    1
      modules/indexer/issues/elasticsearch/elasticsearch.go
  23. 0
    1
      modules/log/event_format.go
  24. 0
    2
      modules/markup/markdown/markdown_test.go
  25. 16
    16
      modules/packages/rubygems/marshal.go
  26. 0
    1
      modules/process/manager_stacktraces.go
  27. 0
    1
      modules/repository/temp.go
  28. 1
    2
      modules/setting/time.go
  29. 2
    3
      modules/templates/htmlrenderer.go
  30. 1
    2
      modules/templates/mailer.go
  31. 3
    3
      modules/util/util_test.go
  32. 0
    1
      routers/api/actions/artifacts.go
  33. 2
    2
      routers/api/packages/alpine/alpine.go
  34. 2
    2
      routers/api/packages/conan/conan.go
  35. 2
    2
      routers/api/packages/conda/conda.go
  36. 3
    3
      routers/api/packages/container/container.go
  37. 2
    2
      routers/api/packages/cran/cran.go
  38. 2
    2
      routers/api/packages/debian/debian.go
  39. 2
    2
      routers/api/packages/generic/generic.go
  40. 2
    2
      routers/api/packages/goproxy/goproxy.go
  41. 2
    2
      routers/api/packages/nuget/nuget.go
  42. 2
    2
      routers/api/packages/rpm/rpm.go
  43. 2
    2
      routers/api/packages/rubygems/rubygems.go
  44. 0
    1
      routers/api/v1/repo/issue.go
  45. 0
    1
      routers/api/v1/repo/mirror.go
  46. 0
    2
      routers/api/v1/repo/pull.go
  47. 0
    1
      routers/api/v1/repo/pull_review.go
  48. 0
    1
      routers/api/v1/repo/repo.go
  49. 0
    1
      routers/api/v1/repo/wiki.go
  50. 0
    1
      routers/private/hook_pre_receive.go
  51. 0
    1
      routers/web/repo/actions/view.go
  52. 0
    4
      routers/web/repo/issue.go
  53. 0
    3
      routers/web/repo/pull.go
  54. 0
    1
      routers/web/repo/pull_review.go
  55. 0
    1
      routers/web/repo/view.go
  56. 5
    3
      services/actions/notifier_helper.go
  57. 0
    1
      services/auth/source/ldap/source_sync.go
  58. 0
    2
      services/context/repo.go
  59. 4
    5
      services/gitdiff/gitdiff.go
  60. 4
    5
      services/issue/commit.go
  61. 5
    4
      services/markup/processorhelper_codepreview.go
  62. 0
    1
      services/migrations/gitea_downloader.go
  63. 0
    1
      services/migrations/gitlab.go
  64. 3
    4
      services/mirror/mirror_pull.go
  65. 3
    3
      services/pull/merge.go
  66. 0
    1
      services/pull/pull.go
  67. 0
    1
      services/repository/adopt.go
  68. 0
    1
      services/repository/contributors_graph.go
  69. 0
    2
      services/repository/files/update.go
  70. 0
    1
      services/user/delete.go
  71. 3
    3
      services/user/update_test.go
  72. 0
    2
      services/webhook/discord.go
  73. 0
    1
      services/webhook/matrix.go
  74. 4
    2
      tests/e2e/e2e_test.go
  75. 5
    5
      tests/integration/api_notification_test.go
  76. 0
    1
      tests/integration/pull_status_test.go

+ 32
- 23
.golangci.yml 查看文件

@@ -1,13 +1,14 @@
linters:
enable-all: false
disable-all: true
fast: false
enable:
- bidichk
# - deadcode # deprecated - https://github.com/golangci/golangci-lint/issues/1841
- depguard
- dupl
- errcheck
- forbidigo
- gocritic
# - gocyclo # The cyclomatic complexety of a lot of functions is too high, we should refactor those another time.
- gofmt
- gofumpt
- gosimple
@@ -17,20 +18,18 @@ linters:
- nolintlint
- revive
- staticcheck
# - structcheck # deprecated - https://github.com/golangci/golangci-lint/issues/1841
- stylecheck
- typecheck
- unconvert
- unused
# - varcheck # deprecated - https://github.com/golangci/golangci-lint/issues/1841
- wastedassign
enable-all: false
disable-all: true
fast: false

run:
timeout: 10m

output:
sort-results: true

linters-settings:
stylecheck:
checks: ["all", "-ST1005", "-ST1003"]
@@ -47,27 +46,37 @@ linters-settings:
errorCode: 1
warningCode: 1
rules:
- name: atomic
- name: bare-return
- name: blank-imports
- name: constant-logical-expr
- name: context-as-argument
- name: context-keys-type
- name: dot-imports
- name: duplicated-imports
- name: empty-lines
- name: error-naming
- name: error-return
- name: error-strings
- name: error-naming
- name: errorf
- name: exported
- name: identical-branches
- name: if-return
- name: increment-decrement
- name: var-naming
- name: var-declaration
- name: indent-error-flow
- name: modifies-value-receiver
- name: package-comments
- name: range
- name: receiver-naming
- name: redefines-builtin-id
- name: string-of-int
- name: superfluous-else
- name: time-naming
- name: unconditional-recursion
- name: unexported-return
- name: indent-error-flow
- name: errorf
- name: duplicated-imports
- name: modifies-value-receiver
- name: unreachable-code
- name: var-declaration
- name: var-naming
gofumpt:
extra-rules: true
depguard:
@@ -93,8 +102,8 @@ issues:
max-issues-per-linter: 0
max-same-issues: 0
exclude-dirs: [node_modules, public, web_src]
exclude-case-sensitive: true
exclude-rules:
# Exclude some linters from running on tests files.
- path: _test\.go
linters:
- gocyclo
@@ -112,19 +121,19 @@ issues:
- path: cmd
linters:
- forbidigo
- linters:
- text: "webhook"
linters:
- dupl
text: "webhook"
- linters:
- text: "`ID' should not be capitalized"
linters:
- gocritic
text: "`ID' should not be capitalized"
- linters:
- text: "swagger"
linters:
- unused
- deadcode
text: "swagger"
- linters:
- text: "argument x is overwritten before first use"
linters:
- staticcheck
text: "argument x is overwritten before first use"
- text: "commentFormatting: put a space between `//` and comment text"
linters:
- gocritic

+ 1
- 1
cmd/hook.go 查看文件

@@ -465,7 +465,7 @@ func hookPrintResult(output, isCreate bool, branch, url string) {
fmt.Fprintf(os.Stderr, " %s\n", url)
}
fmt.Fprintln(os.Stderr, "")
os.Stderr.Sync()
_ = os.Stderr.Sync()
}

func pushOptions() map[string]string {

+ 0
- 1
models/asymkey/gpg_key_commit_verification.go 查看文件

@@ -110,7 +110,6 @@ func ParseCommitWithSignature(ctx context.Context, c *git.Commit) *CommitVerific
Reason: "gpg.error.no_committer_account",
}
}

}
}


+ 0
- 1
models/db/engine.go 查看文件

@@ -227,7 +227,6 @@ func NamesToBean(names ...string) ([]any, error) {
// Need to map provided names to beans...
beanMap := make(map[string]any)
for _, bean := range tables {

beanMap[strings.ToLower(reflect.Indirect(reflect.ValueOf(bean)).Type().Name())] = bean
beanMap[strings.ToLower(x.TableName(bean))] = bean
beanMap[strings.ToLower(x.TableName(bean, true))] = bean

+ 0
- 2
models/issues/review.go 查看文件

@@ -345,11 +345,9 @@ func CreateReview(ctx context.Context, opts CreateReviewOptions) (*Review, error
return nil, err
}
}

} else if opts.ReviewerTeam != nil {
review.Type = ReviewTypeRequest
review.ReviewerTeamID = opts.ReviewerTeam.ID

} else {
return nil, fmt.Errorf("provide either reviewer or reviewer team")
}

+ 0
- 5
models/migrations/base/db.go 查看文件

@@ -177,7 +177,6 @@ func RecreateTable(sess *xorm.Session, bean any) error {
log.Error("Unable to recreate uniques on table %s. Error: %v", tableName, err)
return err
}

case setting.Database.Type.IsMySQL():
// MySQL will drop all the constraints on the old table
if _, err := sess.Exec(fmt.Sprintf("DROP TABLE `%s`", tableName)); err != nil {
@@ -228,7 +227,6 @@ func RecreateTable(sess *xorm.Session, bean any) error {
return err
}
sequenceMap[sequence] = sequenceData

}

// CASCADE causes postgres to drop all the constraints on the old table
@@ -293,9 +291,7 @@ func RecreateTable(sess *xorm.Session, bean any) error {
return err
}
}

}

case setting.Database.Type.IsMSSQL():
// MSSQL will drop all the constraints on the old table
if _, err := sess.Exec(fmt.Sprintf("DROP TABLE `%s`", tableName)); err != nil {
@@ -308,7 +304,6 @@ func RecreateTable(sess *xorm.Session, bean any) error {
log.Error("Unable to rename %s to %s. Error: %v", tempTableName, tableName, err)
return err
}

default:
log.Fatal("Unrecognized DB")
}

+ 0
- 2
models/migrations/v1_11/v111.go 查看文件

@@ -262,7 +262,6 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
for _, u := range units {
var found bool
for _, team := range teams {

var teamU []*TeamUnit
var unitEnabled bool
err = sess.Where("team_id = ?", team.ID).Find(&teamU)
@@ -331,7 +330,6 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
}

if !protectedBranch.EnableApprovalsWhitelist {

perm, err := getUserRepoPermission(sess, baseRepo, reviewer)
if err != nil {
return false, err

+ 2
- 2
models/migrations/v1_20/v250.go 查看文件

@@ -104,7 +104,7 @@ func ChangeContainerMetadataMultiArch(x *xorm.Engine) error {

// Convert to new metadata format

new := &MetadataNew{
newMetadata := &MetadataNew{
Type: old.Type,
IsTagged: old.IsTagged,
Platform: old.Platform,
@@ -119,7 +119,7 @@ func ChangeContainerMetadataMultiArch(x *xorm.Engine) error {
Manifests: manifests,
}

metadataJSON, err := json.Marshal(new)
metadataJSON, err := json.Marshal(newMetadata)
if err != nil {
return err
}

+ 0
- 1
models/migrations/v1_6/v71.go 查看文件

@@ -61,7 +61,6 @@ func AddScratchHash(x *xorm.Engine) error {
if _, err := sess.ID(tfa.ID).Cols("scratch_salt, scratch_hash").Update(tfa); err != nil {
return fmt.Errorf("couldn't add in scratch_hash and scratch_salt: %w", err)
}

}
}


+ 0
- 1
models/migrations/v1_9/v85.go 查看文件

@@ -81,7 +81,6 @@ func HashAppToken(x *xorm.Engine) error {
if _, err := sess.ID(token.ID).Cols("token_hash, token_salt, token_last_eight, sha1").Update(token); err != nil {
return fmt.Errorf("couldn't add in sha1, token_hash, token_salt and token_last_eight: %w", err)
}

}
}


+ 1
- 2
models/organization/team.go 查看文件

@@ -226,9 +226,8 @@ func GetTeamIDsByNames(ctx context.Context, orgID int64, names []string, ignoreN
if err != nil {
if ignoreNonExistent {
continue
} else {
return nil, err
}
return nil, err
}
ids = append(ids, u.ID)
}

+ 0
- 2
models/project/board.go 查看文件

@@ -110,13 +110,11 @@ func createBoardsForProjectsType(ctx context.Context, project *Project) error {
var items []string

switch project.BoardType {

case BoardTypeBugTriage:
items = setting.Project.ProjectBoardBugTriageType

case BoardTypeBasicKanban:
items = setting.Project.ProjectBoardBasicKanbanType

case BoardTypeNone:
fallthrough
default:

+ 0
- 1
models/repo/user_repo.go 查看文件

@@ -170,7 +170,6 @@ func GetReviewers(ctx context.Context, repo *Repository, doerID, posterID int64)
// the owner of a private repo needs to be explicitly added.
cond = cond.Or(builder.Eq{"`user`.id": repo.Owner.ID})
}

} else {
// This is a "public" repository:
// Any user that has read access, is a watcher or organization member can be requested to review

+ 1
- 2
models/user/user.go 查看文件

@@ -988,9 +988,8 @@ func GetUserIDsByNames(ctx context.Context, names []string, ignoreNonExistent bo
if err != nil {
if ignoreNonExistent {
continue
} else {
return nil, err
}
return nil, err
}
ids = append(ids, u.ID)
}

+ 6
- 6
modules/auth/password/password.go 查看文件

@@ -63,16 +63,16 @@ func NewComplexity() {
func setupComplexity(values []string) {
if len(values) != 1 || values[0] != "off" {
for _, val := range values {
if complex, ok := charComplexities[val]; ok {
validChars += complex.ValidChars
requiredList = append(requiredList, complex)
if complexity, ok := charComplexities[val]; ok {
validChars += complexity.ValidChars
requiredList = append(requiredList, complexity)
}
}
if len(requiredList) == 0 {
// No valid character classes found; use all classes as default
for _, complex := range charComplexities {
validChars += complex.ValidChars
requiredList = append(requiredList, complex)
for _, complexity := range charComplexities {
validChars += complexity.ValidChars
requiredList = append(requiredList, complexity)
}
}
}

+ 3
- 3
modules/git/batch_reader.go 查看文件

@@ -307,10 +307,10 @@ func ParseTreeLine(objectFormat ObjectFormat, rd *bufio.Reader, modeBuf, fnameBu

// Deal with the binary hash
idx = 0
len := objectFormat.FullLength() / 2
for idx < len {
length := objectFormat.FullLength() / 2
for idx < length {
var read int
read, err = rd.Read(shaBuf[idx:len])
read, err = rd.Read(shaBuf[idx:length])
n += read
if err != nil {
return mode, fname, sha, n, err

+ 1
- 2
modules/git/commit_reader.go 查看文件

@@ -49,9 +49,8 @@ readLoop:
if len(line) > 0 && line[0] == ' ' {
_, _ = signatureSB.Write(line[1:])
continue
} else {
pgpsig = false
}
pgpsig = false
}

if !message {

+ 0
- 1
modules/git/pipeline/lfs_nogogit.go 查看文件

@@ -232,7 +232,6 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
errChan <- err
break
}

}
}()


+ 4
- 4
modules/git/repo_commit.go 查看文件

@@ -251,18 +251,18 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
return nil, err
}

len := objectFormat.FullLength()
length := objectFormat.FullLength()
commits := []*Commit{}
shaline := make([]byte, len+1)
shaline := make([]byte, length+1)
for {
n, err := io.ReadFull(stdoutReader, shaline)
if err != nil || n < len {
if err != nil || n < length {
if err == io.EOF {
err = nil
}
return commits, err
}
objectID, err := NewIDFromString(string(shaline[0:len]))
objectID, err := NewIDFromString(string(shaline[0:length]))
if err != nil {
return nil, err
}

+ 0
- 1
modules/git/submodule.go 查看文件

@@ -64,7 +64,6 @@ func getRefURL(refURL, urlPrefix, repoFullName, sshDomain string) string {
// ex: git@try.gitea.io:go-gitea/gitea
match := scpSyntax.FindAllStringSubmatch(refURI, -1)
if len(match) > 0 {

m := match[0]
refHostname := m[2]
pth := m[3]

+ 0
- 2
modules/indexer/code/bleve/bleve.go 查看文件

@@ -191,7 +191,6 @@ func (b *Indexer) addDelete(filename string, repo *repo_model.Repository, batch
func (b *Indexer) Index(ctx context.Context, repo *repo_model.Repository, sha string, changes *internal.RepoChanges) error {
batch := inner_bleve.NewFlushingBatch(b.inner.Indexer, maxBatchSize)
if len(changes.Updates) > 0 {

// Now because of some insanity with git cat-file not immediately failing if not run in a valid git directory we need to run git rev-parse first!
if err := git.EnsureValidGitRepository(ctx, repo.RepoPath()); err != nil {
log.Error("Unable to open git repo: %s for %-v: %v", repo.RepoPath(), repo, err)
@@ -335,7 +334,6 @@ func (b *Indexer) Search(ctx context.Context, opts *internal.SearchOptions) (int
if result, err = b.inner.Indexer.Search(facetRequest); err != nil {
return 0, nil, nil, err
}

}
languagesFacet := result.Facets["languages"]
for _, term := range languagesFacet.Terms.Terms() {

+ 0
- 1
modules/indexer/issues/elasticsearch/elasticsearch.go 查看文件

@@ -145,7 +145,6 @@ func (b *Indexer) Search(ctx context.Context, options *internal.SearchOptions) (
query := elastic.NewBoolQuery()

if options.Keyword != "" {

searchType := esMultiMatchTypePhrasePrefix
if options.IsFuzzyKeyword {
searchType = esMultiMatchTypeBestFields

+ 0
- 1
modules/log/event_format.go 查看文件

@@ -125,7 +125,6 @@ func EventFormatTextMessage(mode *WriterMode, event *Event, msgFormat string, ms
if mode.Colorize {
buf = append(buf, resetBytes...)
}

}
if flags&(Lshortfile|Llongfile) != 0 {
if mode.Colorize {

+ 0
- 2
modules/markup/markdown/markdown_test.go 查看文件

@@ -466,7 +466,6 @@ func TestColorPreview(t *testing.T) {
res, err := markdown.RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, test.testcase)
assert.NoError(t, err, "Unexpected error in testcase: %q", test.testcase)
assert.Equal(t, template.HTML(test.expected), res, "Unexpected result in testcase %q", test.testcase)

}

negativeTests := []string{
@@ -549,7 +548,6 @@ func TestMathBlock(t *testing.T) {
res, err := markdown.RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, test.testcase)
assert.NoError(t, err, "Unexpected error in testcase: %q", test.testcase)
assert.Equal(t, template.HTML(test.expected), res, "Unexpected result in testcase %q", test.testcase)

}
}


+ 16
- 16
modules/packages/rubygems/marshal.go 查看文件

@@ -147,35 +147,35 @@ func (e *MarshalEncoder) marshalIntInternal(i int64) error {
return e.w.WriteByte(byte(i - 5))
}

var len int
var length int
if 122 < i && i <= 0xff {
len = 1
length = 1
} else if 0xff < i && i <= 0xffff {
len = 2
length = 2
} else if 0xffff < i && i <= 0xffffff {
len = 3
length = 3
} else if 0xffffff < i && i <= 0x3fffffff {
len = 4
length = 4
} else if -0x100 <= i && i < -123 {
len = -1
length = -1
} else if -0x10000 <= i && i < -0x100 {
len = -2
length = -2
} else if -0x1000000 <= i && i < -0x100000 {
len = -3
length = -3
} else if -0x40000000 <= i && i < -0x1000000 {
len = -4
length = -4
} else {
return ErrInvalidIntRange
}

if err := e.w.WriteByte(byte(len)); err != nil {
if err := e.w.WriteByte(byte(length)); err != nil {
return err
}
if len < 0 {
len = -len
if length < 0 {
length = -length
}

for c := 0; c < len; c++ {
for c := 0; c < length; c++ {
if err := e.w.WriteByte(byte(i >> uint(8*c) & 0xff)); err != nil {
return err
}
@@ -244,13 +244,13 @@ func (e *MarshalEncoder) marshalArray(arr reflect.Value) error {
return err
}

len := arr.Len()
length := arr.Len()

if err := e.marshalIntInternal(int64(len)); err != nil {
if err := e.marshalIntInternal(int64(length)); err != nil {
return err
}

for i := 0; i < len; i++ {
for i := 0; i < length; i++ {
if err := e.marshal(arr.Index(i).Interface()); err != nil {
return err
}

+ 0
- 1
modules/process/manager_stacktraces.go 查看文件

@@ -339,7 +339,6 @@ func (pm *Manager) ProcessStacktraces(flat, noSystem bool) ([]*Process, int, int
}
sort.Slice(processes, after(processes))
if !flat {

var sortChildren func(process *Process)

sortChildren = func(process *Process) {

+ 0
- 1
modules/repository/temp.go 查看文件

@@ -32,7 +32,6 @@ func CreateTemporaryPath(prefix string) (string, error) {
if err != nil {
log.Error("Unable to create temporary directory: %s-*.git (%v)", prefix, err)
return "", fmt.Errorf("Failed to create dir %s-*.git: %w", prefix, err)

}
return basePath, nil
}

+ 1
- 2
modules/setting/time.go 查看文件

@@ -19,9 +19,8 @@ func loadTimeFrom(rootCfg ConfigProvider) {
DefaultUILocation, err = time.LoadLocation(zone)
if err != nil {
log.Fatal("Load time zone failed: %v", err)
} else {
log.Info("Default UI Location is %v", zone)
}
log.Info("Default UI Location is %v", zone)
}
if DefaultUILocation == nil {
DefaultUILocation = time.Local

+ 2
- 3
modules/templates/htmlrenderer.go 查看文件

@@ -138,10 +138,9 @@ func wrapTmplErrMsg(msg string) {
if setting.IsProd {
// in prod mode, Gitea must have correct templates to run
log.Fatal("Gitea can't run with template errors: %s", msg)
} else {
// in dev mode, do not need to really exit, because the template errors could be fixed by developer soon and the templates get reloaded
log.Error("There are template errors but Gitea continues to run in dev mode: %s", msg)
}
// in dev mode, do not need to really exit, because the template errors could be fixed by developer soon and the templates get reloaded
log.Error("There are template errors but Gitea continues to run in dev mode: %s", msg)
}

type templateErrorPrettier struct {

+ 1
- 2
modules/templates/mailer.go 查看文件

@@ -84,9 +84,8 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
if err = buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content); err != nil {
if firstRun {
log.Fatal("Failed to parse mail template, err: %v", err)
} else {
log.Error("Failed to parse mail template, err: %v", err)
}
log.Error("Failed to parse mail template, err: %v", err)
}
}
}

+ 3
- 3
modules/util/util_test.go 查看文件

@@ -121,9 +121,9 @@ func Test_NormalizeEOL(t *testing.T) {
}

func Test_RandomInt(t *testing.T) {
int, err := CryptoRandomInt(255)
assert.True(t, int >= 0)
assert.True(t, int <= 255)
randInt, err := CryptoRandomInt(255)
assert.True(t, randInt >= 0)
assert.True(t, randInt <= 255)
assert.NoError(t, err)
}


+ 0
- 1
routers/api/actions/artifacts.go 查看文件

@@ -144,7 +144,6 @@ func ArtifactContexter() func(next http.Handler) http.Handler {

var task *actions.ActionTask
if err == nil {

task, err = actions.GetTaskByID(req.Context(), tID)
if err != nil {
log.Error("Error runner api getting task by ID: %v", err)

+ 2
- 2
routers/api/packages/alpine/alpine.go 查看文件

@@ -96,12 +96,12 @@ func UploadPackageFile(ctx *context.Context) {
return
}

upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/conan/conan.go 查看文件

@@ -310,12 +310,12 @@ func uploadFile(ctx *context.Context, fileFilter container.Set[string], fileKey
return
}

upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/conda/conda.go 查看文件

@@ -174,12 +174,12 @@ func EnumeratePackages(ctx *context.Context) {
}

func UploadPackageFile(ctx *context.Context) {
upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 3
- 3
routers/api/packages/container/container.go 查看文件

@@ -385,9 +385,9 @@ func EndUploadBlob(ctx *context.Context) {
}
return
}
close := true
doClose := true
defer func() {
if close {
if doClose {
uploader.Close()
}
}()
@@ -427,7 +427,7 @@ func EndUploadBlob(ctx *context.Context) {
apiError(ctx, http.StatusInternalServerError, err)
return
}
close = false
doClose = false

if err := container_service.RemoveBlobUploadByID(ctx, uploader.ID); err != nil {
apiError(ctx, http.StatusInternalServerError, err)

+ 2
- 2
routers/api/packages/cran/cran.go 查看文件

@@ -151,12 +151,12 @@ func UploadBinaryPackageFile(ctx *context.Context) {
}

func uploadPackageFile(ctx *context.Context, compositeKey string, properties map[string]string) {
upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/debian/debian.go 查看文件

@@ -127,12 +127,12 @@ func UploadPackageFile(ctx *context.Context) {
return
}

upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/generic/generic.go 查看文件

@@ -90,12 +90,12 @@ func UploadPackage(ctx *context.Context) {
return
}

upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/goproxy/goproxy.go 查看文件

@@ -154,12 +154,12 @@ func resolvePackage(ctx *context.Context, ownerID int64, name, version string) (
}

func UploadPackage(ctx *context.Context) {
upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/nuget/nuget.go 查看文件

@@ -594,13 +594,13 @@ func UploadSymbolPackage(ctx *context.Context) {
func processUploadedFile(ctx *context.Context, expectedType nuget_module.PackageType) (*nuget_module.Package, *packages_module.HashedBuffer, []io.Closer) {
closables := make([]io.Closer, 0, 2)

upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
return nil, nil, closables
}

if close {
if needToClose {
closables = append(closables, upload)
}


+ 2
- 2
routers/api/packages/rpm/rpm.go 查看文件

@@ -117,12 +117,12 @@ func GetRepositoryFile(ctx *context.Context) {
}

func UploadPackageFile(ctx *context.Context) {
upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 2
- 2
routers/api/packages/rubygems/rubygems.go 查看文件

@@ -197,12 +197,12 @@ func DownloadPackageFile(ctx *context.Context) {

// UploadPackageFile adds a file to the package. If the package does not exist, it gets created.
func UploadPackageFile(ctx *context.Context) {
upload, close, err := ctx.UploadStream()
upload, needToClose, err := ctx.UploadStream()
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
return
}
if close {
if needToClose {
defer upload.Close()
}


+ 0
- 1
routers/api/v1/repo/issue.go 查看文件

@@ -217,7 +217,6 @@ func SearchIssues(ctx *context.APIContext) {

var includedAnyLabels []int64
{

labels := ctx.FormTrim("labels")
var includedLabelNames []string
if len(labels) > 0 {

+ 0
- 1
routers/api/v1/repo/mirror.go 查看文件

@@ -180,7 +180,6 @@ func ListPushMirrors(ctx *context.APIContext) {
if err == nil {
responsePushMirrors = append(responsePushMirrors, m)
}

}
ctx.SetLinkHeader(len(responsePushMirrors), utils.GetListOptions(ctx).PageSize)
ctx.SetTotalCountHeader(count)

+ 0
- 2
routers/api/v1/repo/pull.go 查看文件

@@ -1061,7 +1061,6 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
isSameRepo = true
headUser = ctx.Repo.Owner
headBranch = headInfos[0]

} else if len(headInfos) == 2 {
headUser, err = user_model.GetUserByName(ctx, headInfos[0])
if err != nil {
@@ -1075,7 +1074,6 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
headBranch = headInfos[1]
// The head repository can also point to the same repo
isSameRepo = ctx.Repo.Owner.ID == headUser.ID

} else {
ctx.NotFound()
return nil, nil, nil, nil, "", ""

+ 0
- 1
routers/api/v1/repo/pull_review.go 查看文件

@@ -728,7 +728,6 @@ func apiReviewRequest(ctx *context.APIContext, opts api.PullReviewRequestOptions
}

if ctx.Repo.Repository.Owner.IsOrganization() && len(opts.TeamReviewers) > 0 {

teamReviewers := make([]*organization.Team, 0, len(opts.TeamReviewers))
for _, t := range opts.TeamReviewers {
var teamReviewer *organization.Team

+ 0
- 1
routers/api/v1/repo/repo.go 查看文件

@@ -1084,7 +1084,6 @@ func updateMirror(ctx *context.APIContext, opts api.EditRepoOption) error {

// update MirrorInterval
if opts.MirrorInterval != nil {

// MirrorInterval should be a duration
interval, err := time.ParseDuration(*opts.MirrorInterval)
if err != nil {

+ 0
- 1
routers/api/v1/repo/wiki.go 查看文件

@@ -478,7 +478,6 @@ func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error)
func findWikiRepoCommit(ctx *context.APIContext) (*git.Repository, *git.Commit) {
wikiRepo, err := gitrepo.OpenWikiRepository(ctx, ctx.Repo.Repository)
if err != nil {

if git.IsErrNotExist(err) || err.Error() == "no such file or directory" {
ctx.NotFound(err)
} else {

+ 0
- 1
routers/private/hook_pre_receive.go 查看文件

@@ -198,7 +198,6 @@ func preReceiveBranch(ctx *preReceiveContext, oldCommitID, newCommitID string, r
UserMsg: fmt.Sprintf("branch %s is protected from force push", branchName),
})
return

}
}


+ 0
- 1
routers/web/repo/actions/view.go 查看文件

@@ -644,7 +644,6 @@ func ArtifactsDownloadView(ctx *context_module.Context) {
writer := zip.NewWriter(ctx.Resp)
defer writer.Close()
for _, art := range artifacts {

f, err := storage.ActionsArtifacts.Open(art.StoragePath)
if err != nil {
ctx.Error(http.StatusInternalServerError, err.Error())

+ 0
- 4
routers/web/repo/issue.go 查看文件

@@ -933,7 +933,6 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles
}
}
}

}

if template.Ref != "" && !strings.HasPrefix(template.Ref, "refs/") { // Assume that the ref intended is always a branch - for tags users should use refs/tags/<ref>
@@ -1681,7 +1680,6 @@ func ViewIssue(ctx *context.Context) {
if comment.ProjectID > 0 && comment.Project == nil {
comment.Project = ghostProject
}

} else if comment.Type == issues_model.CommentTypeAssignees || comment.Type == issues_model.CommentTypeReviewRequest {
if err = comment.LoadAssigneeUserAndTeam(ctx); err != nil {
ctx.ServerError("LoadAssigneeUserAndTeam", err)
@@ -2610,7 +2608,6 @@ func SearchIssues(ctx *context.Context) {

var includedAnyLabels []int64
{

labels := ctx.FormTrim("labels")
var includedLabelNames []string
if len(labels) > 0 {
@@ -2994,7 +2991,6 @@ func NewComment(ctx *context.Context) {
if (ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull) || (ctx.IsSigned && issue.IsPoster(ctx.Doer.ID))) &&
(form.Status == "reopen" || form.Status == "close") &&
!(issue.IsPull && issue.PullRequest.HasMerged) {

// Duplication and conflict check should apply to reopen pull request.
var pr *issues_model.PullRequest


+ 0
- 3
routers/web/repo/pull.go 查看文件

@@ -443,7 +443,6 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
}

if pb != nil && pb.EnableStatusCheck {

var missingRequiredChecks []string
for _, requiredContext := range pb.StatusCheckContexts {
contextFound := false
@@ -646,7 +645,6 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi

// Validate the given commit sha to show (if any passed)
if willShowSpecifiedCommit || willShowSpecifiedCommitRange {

foundStartCommit := len(specifiedStartCommit) == 0
foundEndCommit := len(specifiedEndCommit) == 0

@@ -974,7 +972,6 @@ func UpdatePullRequest(ctx *context.Context) {
ctx.Flash.Error(flashError)
ctx.Redirect(issue.Link())
return

}
ctx.Flash.Error(err.Error())
ctx.Redirect(issue.Link())

+ 0
- 1
routers/web/repo/pull_review.go 查看文件

@@ -318,7 +318,6 @@ func UpdateViewedFiles(ctx *context.Context) {

updatedFiles := make(map[string]pull_model.ViewedState, len(data.Files))
for file, viewed := range data.Files {

// Only unviewed and viewed are possible, has-changed can not be set from the outside
state := pull_model.Unviewed
if viewed {

+ 0
- 1
routers/web/repo/view.go 查看文件

@@ -347,7 +347,6 @@ func loadLatestCommitData(ctx *context.Context, latestCommit *git.Commit) bool {
// or of directory if not in root directory.
ctx.Data["LatestCommit"] = latestCommit
if latestCommit != nil {

verification := asymkey_model.ParseCommitWithSignature(ctx, latestCommit)

if err := asymkey_model.CalculateTrustStatus(verification, ctx.Repo.Repository.GetTrustModel(), func(user *user_model.User) (bool, error) {

+ 5
- 3
services/actions/notifier_helper.go 查看文件

@@ -298,13 +298,15 @@ func handleWorkflows(
TriggerEvent: dwf.TriggerEvent.Name,
Status: actions_model.StatusWaiting,
}
if need, err := ifNeedApproval(ctx, run, input.Repo, input.Doer); err != nil {

need, err := ifNeedApproval(ctx, run, input.Repo, input.Doer)
if err != nil {
log.Error("check if need approval for repo %d with user %d: %v", input.Repo.ID, input.Doer.ID, err)
continue
} else {
run.NeedApproval = need
}

run.NeedApproval = need

if err := run.LoadAttributes(ctx); err != nil {
log.Error("LoadAttributes: %v", err)
continue

+ 0
- 1
services/auth/source/ldap/source_sync.go 查看文件

@@ -156,7 +156,6 @@ func (source *Source) Sync(ctx context.Context, updateExisting bool) error {
!strings.EqualFold(usr.Email, su.Mail) ||
usr.FullName != fullName ||
!usr.IsActive {

log.Trace("SyncExternalUsers[%s]: Updating user %s", source.authSource.Name, usr.Name)

opts := &user_service.UpdateOptions{

+ 0
- 2
services/context/repo.go 查看文件

@@ -825,7 +825,6 @@ func getRefName(ctx *Base, repo *Repository, pathType RepoRefType) string {
case RepoRefBranch:
ref := getRefNameFromPath(ctx, repo, path, repo.GitRepo.IsBranchExist)
if len(ref) == 0 {

// check if ref is HEAD
parts := strings.Split(path, "/")
if parts[0] == headRefName {
@@ -968,7 +967,6 @@ func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context
return cancel
}
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()

} else if refType.RefTypeIncludesTags() && ctx.Repo.GitRepo.IsTagExist(refName) {
ctx.Repo.IsViewTag = true
ctx.Repo.TagName = refName

+ 4
- 5
services/gitdiff/gitdiff.go 查看文件

@@ -1044,10 +1044,10 @@ func createDiffFile(diff *Diff, line string) *DiffFile {
// diff --git a/b b/b b/b b/b b/b b/b
//
midpoint := (len(line) + len(cmdDiffHead) - 1) / 2
new, old := line[len(cmdDiffHead):midpoint], line[midpoint+1:]
if len(new) > 2 && len(old) > 2 && new[2:] == old[2:] {
curFile.OldName = old[2:]
curFile.Name = old[2:]
newPart, oldPart := line[len(cmdDiffHead):midpoint], line[midpoint+1:]
if len(newPart) > 2 && len(oldPart) > 2 && newPart[2:] == oldPart[2:] {
curFile.OldName = oldPart[2:]
curFile.Name = oldPart[2:]
}
}
}
@@ -1181,7 +1181,6 @@ func GetDiff(ctx context.Context, gitRepo *git.Repository, opts *DiffOptions, fi
defer deferable()

for _, diffFile := range diff.Files {

isVendored := optional.None[bool]()
isGenerated := optional.None[bool]()
if checker != nil {

+ 4
- 5
services/issue/commit.go 查看文件

@@ -118,7 +118,6 @@ func UpdateIssuesCommit(ctx context.Context, doer *user_model.User, repo *repo_m
var refIssue *issues_model.Issue
var err error
for _, ref := range references.FindAllIssueReferences(c.Message) {

// issue is from another repo
if len(ref.Owner) > 0 && len(ref.Name) > 0 {
refRepo, err = repo_model.GetRepositoryByOwnerAndName(ctx, ref.Owner, ref.Name)
@@ -189,15 +188,15 @@ func UpdateIssuesCommit(ctx context.Context, doer *user_model.User, repo *repo_m
continue
}
}
close := ref.Action == references.XRefActionCloses
if close && len(ref.TimeLog) > 0 {
isClosed := ref.Action == references.XRefActionCloses
if isClosed && len(ref.TimeLog) > 0 {
if err := issueAddTime(ctx, refIssue, doer, c.Timestamp, ref.TimeLog); err != nil {
return err
}
}
if close != refIssue.IsClosed {
if isClosed != refIssue.IsClosed {
refIssue.Repo = refRepo
if err := ChangeStatus(ctx, refIssue, doer, c.Sha1, close); err != nil {
if err := ChangeStatus(ctx, refIssue, doer, c.Sha1, isClosed); err != nil {
return err
}
}

+ 5
- 4
services/markup/processorhelper_codepreview.go 查看文件

@@ -86,12 +86,13 @@ func renderRepoFileCodePreview(ctx context.Context, opts markup.RenderCodePrevie
lineNums := make([]int, 0, lineCount)
lineCodes := make([]string, 0, lineCount)
for i := opts.LineStart; i <= opts.LineStop; i++ {
if line, err := reader.ReadString('\n'); err != nil && line == "" {
line, err := reader.ReadString('\n')
if err != nil && line == "" {
break
} else {
lineNums = append(lineNums, i)
lineCodes = append(lineCodes, line)
}

lineNums = append(lineNums, i)
lineCodes = append(lineCodes, line)
}
realLineStop := max(opts.LineStart, opts.LineStart+len(lineNums)-1)
highlightLines := code.HighlightSearchResultCode(opts.FilePath, language, lineNums, strings.Join(lineCodes, ""))

+ 0
- 1
services/migrations/gitea_downloader.go 查看文件

@@ -410,7 +410,6 @@ func (g *GiteaDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, err
return nil, false, fmt.Errorf("error while listing issues: %w", err)
}
for _, issue := range issues {

labels := make([]*base.Label, 0, len(issue.Labels))
for i := range issue.Labels {
labels = append(labels, g.convertGiteaLabel(issue.Labels[i]))

+ 0
- 1
services/migrations/gitlab.go 查看文件

@@ -421,7 +421,6 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
return nil, false, fmt.Errorf("error while listing issues: %w", err)
}
for _, issue := range issues {

labels := make([]*base.Label, 0, len(issue.Labels))
for _, l := range issue.Labels {
labels = append(labels, &base.Label{

+ 3
- 4
services/mirror/mirror_pull.go 查看文件

@@ -523,13 +523,13 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
theCommits.Commits = theCommits.Commits[:setting.UI.FeedMaxCommitNum]
}

if newCommit, err := gitRepo.GetCommit(newCommitID); err != nil {
newCommit, err := gitRepo.GetCommit(newCommitID)
if err != nil {
log.Error("SyncMirrors [repo: %-v]: unable to get commit %s: %v", m.Repo, newCommitID, err)
continue
} else {
theCommits.HeadCommit = repo_module.CommitToPushCommit(newCommit)
}

theCommits.HeadCommit = repo_module.CommitToPushCommit(newCommit)
theCommits.CompareURL = m.Repo.ComposeCompareURL(oldCommitID, newCommitID)

notify_service.SyncPushCommits(ctx, m.Repo.MustOwner(ctx), m.Repo, &repo_module.PushUpdateOptions{
@@ -557,7 +557,6 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
log.Error("SyncMirrors [repo: %-v]: unable to update repository 'updated_unix': %v", m.Repo, err)
return false
}

}

log.Trace("SyncMirrors [repo: %-v]: Successfully updated", m.Repo)

+ 3
- 3
services/pull/merge.go 查看文件

@@ -231,9 +231,9 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
if err = ref.Issue.LoadRepo(ctx); err != nil {
return err
}
close := ref.RefAction == references.XRefActionCloses
if close != ref.Issue.IsClosed {
if err = issue_service.ChangeStatus(ctx, ref.Issue, doer, pr.MergedCommitID, close); err != nil {
isClosed := ref.RefAction == references.XRefActionCloses
if isClosed != ref.Issue.IsClosed {
if err = issue_service.ChangeStatus(ctx, ref.Issue, doer, pr.MergedCommitID, isClosed); err != nil {
// Allow ErrDependenciesLeft
if !issues_model.IsErrDependenciesLeft(err) {
return err

+ 0
- 1
services/pull/pull.go 查看文件

@@ -807,7 +807,6 @@ func GetSquashMergeCommitMessages(ctx context.Context, pr *issues_model.PullRequ
if err != nil {
log.Error("Unable to get commits between: %s %s Error: %v", pr.HeadBranch, pr.MergeBase, err)
return ""

}
if len(commits) == 0 {
break

+ 0
- 1
services/repository/adopt.go 查看文件

@@ -357,7 +357,6 @@ func ListUnadoptedRepositories(ctx context.Context, query string, opts *db.ListO
return err
}
repoNamesToCheck = repoNamesToCheck[:0]

}
return filepath.SkipDir
}); err != nil {

+ 0
- 1
services/repository/contributors_graph.go 查看文件

@@ -187,7 +187,6 @@ func getExtendedCommitStats(repo *git.Repository, revision string /*, limit int
Stats: &commitStats,
}
extendedCommitStats = append(extendedCommitStats, res)

}
_ = stdoutReader.Close()
return nil

+ 0
- 2
services/repository/files/update.go 查看文件

@@ -208,7 +208,6 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use
return nil, fmt.Errorf("ConvertToSHA1: Invalid last commit ID: %w", err)
}
opts.LastCommitID = lastCommitID.String()

}

for _, file := range opts.Files {
@@ -360,7 +359,6 @@ func handleCheckErrors(file *ChangeRepoFile, commit *git.Commit, opts *ChangeRep
Path: file.Options.treePath,
}
}

}
}


+ 0
- 1
services/user/delete.go 查看文件

@@ -105,7 +105,6 @@ func deleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)

if purge || (setting.Service.UserDeleteWithCommentsMaxTime != 0 &&
u.CreatedUnix.AsTime().Add(setting.Service.UserDeleteWithCommentsMaxTime).After(time.Now())) {

// Delete Comments
const batchSize = 50
for {

+ 3
- 3
services/user/update_test.go 查看文件

@@ -94,7 +94,7 @@ func TestUpdateAuth(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 28})
copy := *user
userCopy := *user

assert.NoError(t, UpdateAuth(db.DefaultContext, user, &UpdateAuthOptions{
LoginName: optional.Some("new-login"),
@@ -106,8 +106,8 @@ func TestUpdateAuth(t *testing.T) {
MustChangePassword: optional.Some(true),
}))
assert.True(t, user.MustChangePassword)
assert.NotEqual(t, copy.Passwd, user.Passwd)
assert.NotEqual(t, copy.Salt, user.Salt)
assert.NotEqual(t, userCopy.Passwd, user.Passwd)
assert.NotEqual(t, userCopy.Salt, user.Salt)

assert.NoError(t, UpdateAuth(db.DefaultContext, user, &UpdateAuthOptions{
ProhibitLogin: optional.Some(true),

+ 0
- 2
services/webhook/discord.go 查看文件

@@ -274,14 +274,12 @@ func newDiscordRequest(ctx context.Context, w *webhook_model.Webhook, t *webhook

func parseHookPullRequestEventType(event webhook_module.HookEventType) (string, error) {
switch event {

case webhook_module.HookEventPullRequestReviewApproved:
return "approved", nil
case webhook_module.HookEventPullRequestReviewRejected:
return "rejected", nil
case webhook_module.HookEventPullRequestReviewComment:
return "comment", nil

default:
return "", errors.New("unknown event type")
}

+ 0
- 1
services/webhook/matrix.go 查看文件

@@ -179,7 +179,6 @@ func (m matrixConvertor) Push(p *api.PushPayload) (MatrixPayload, error) {
if i < len(p.Commits)-1 {
text += "<br>"
}

}

return m.newPayload(text, p.Commits...)

+ 4
- 2
tests/e2e/e2e_test.go 查看文件

@@ -102,18 +102,20 @@ func TestE2e(t *testing.T) {
cmd := exec.Command(runArgs[0], runArgs...)
cmd.Env = os.Environ()
cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL))

var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr

err := cmd.Run()
if err != nil {
// Currently colored output is conflicting. Using Printf until that is resolved.
fmt.Printf("%v", stdout.String())
fmt.Printf("%v", stderr.String())
log.Fatal("Playwright Failed: %s", err)
} else {
fmt.Printf("%v", stdout.String())
}

fmt.Printf("%v", stdout.String())
})
})
}

+ 5
- 5
tests/integration/api_notification_test.go 查看文件

@@ -111,7 +111,7 @@ func TestAPINotification(t *testing.T) {

MakeRequest(t, NewRequest(t, "GET", "/api/v1/notifications/new"), http.StatusUnauthorized)

new := struct {
newStruct := struct {
New int64 `json:"new"`
}{}

@@ -119,8 +119,8 @@ func TestAPINotification(t *testing.T) {
req = NewRequest(t, "GET", "/api/v1/notifications/new").
AddTokenAuth(token)
resp = MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &new)
assert.True(t, new.New > 0)
DecodeJSON(t, resp, &newStruct)
assert.True(t, newStruct.New > 0)

// -- mark notifications as read --
req = NewRequest(t, "GET", "/api/v1/notifications?status-types=unread").
@@ -153,8 +153,8 @@ func TestAPINotification(t *testing.T) {
req = NewRequest(t, "GET", "/api/v1/notifications/new").
AddTokenAuth(token)
resp = MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &new)
assert.True(t, new.New == 0)
DecodeJSON(t, resp, &newStruct)
assert.True(t, newStruct.New == 0)
}

func TestAPINotificationPUT(t *testing.T) {

+ 0
- 1
tests/integration/pull_status_test.go 查看文件

@@ -71,7 +71,6 @@ func TestPullCreate_CommitStatus(t *testing.T) {

// Update commit status, and check if icon is updated as well
for _, status := range statusList {

// Call API to add status for commit
t.Run("CreateStatus", doAPICreateCommitStatus(testCtx, commitID, api.CreateStatusOption{
State: status,

Loading…
取消
儲存