2019-06-12 22:41:28 +03:00
linters :
enable :
2022-12-08 11:21:37 +03:00
- bidichk
# - deadcode # deprecated - https://github.com/golangci/golangci-lint/issues/1841
- depguard
2019-06-12 22:41:28 +03:00
- dupl
2022-12-08 11:21:37 +03:00
- errcheck
2022-03-21 06:22:34 +03:00
- gocritic
2022-12-08 11:21:37 +03:00
# - gocyclo # The cyclomatic complexety of a lot of functions is too high, we should refactor those another time.
- gofmt
2022-01-20 20:46:10 +03:00
- gofumpt
2022-12-08 11:21:37 +03:00
- gosimple
- govet
- ineffassign
2022-06-20 13:02:49 +03:00
- nakedret
- nolintlint
2022-12-08 11:21:37 +03:00
- revive
- staticcheck
# - structcheck # deprecated - https://github.com/golangci/golangci-lint/issues/1841
2022-06-20 13:02:49 +03:00
- stylecheck
2022-12-08 11:21:37 +03:00
- typecheck
- unconvert
- unused
# - varcheck # deprecated - https://github.com/golangci/golangci-lint/issues/1841
# - wastedassign # disabled - https://github.com/golangci/golangci-lint/issues/2649
2019-06-12 22:41:28 +03:00
enable-all : false
disable-all : true
fast : false
2019-10-08 23:42:30 +03:00
run :
2023-02-03 19:23:52 +03:00
go : 1.20
2022-03-16 05:50:26 +03:00
timeout : 10m
2022-02-12 10:08:53 +03:00
skip-dirs :
- node_modules
- public
- web_src
2019-10-08 23:42:30 +03:00
2019-06-12 22:41:28 +03:00
linters-settings :
2022-06-20 13:02:49 +03:00
stylecheck :
checks : [ "all" , "-ST1005" , "-ST1003" ]
nakedret :
2022-09-20 12:39:00 +03:00
max-func-lines : 0
2019-06-12 22:41:28 +03:00
gocritic :
disabled-checks :
- ifElseChain
2021-03-09 11:38:18 +03:00
- singleCaseSwitch # Every time this occurred in the code, there was no other way.
2022-01-02 22:30:40 +03:00
revive :
ignore-generated-header : false
severity : warning
confidence : 0.8
errorCode : 1
warningCode : 1
rules :
- name : blank-imports
- name : context-as-argument
- name : context-keys-type
- name : dot-imports
- name : error-return
- name : error-strings
- name : error-naming
- name : exported
- name : if-return
- name : increment-decrement
- name : var-naming
- name : var-declaration
- name : package-comments
- name : range
- name : receiver-naming
- name : time-naming
- name : unexported-return
- name : indent-error-flow
- name : errorf
- name : duplicated-imports
- name : modifies-value-receiver
2022-01-20 20:46:10 +03:00
gofumpt :
extra-rules : true
2023-02-03 19:23:52 +03:00
lang-version : "1.20"
2022-04-01 11:47:50 +03:00
depguard :
list-type : denylist
# Check the list against standard lib.
include-go-root : true
packages-with-error-message :
- encoding/json : "use gitea's modules/json instead of encoding/json"
- github.com/unknwon/com : "use gitea's util and replacements"
2023-01-12 18:35:53 +03:00
- io/ioutil : "use os or io instead"
- golang.org/x/exp : "it's experimental and unreliable."
Refactor git command package to improve security and maintainability (#22678)
This PR follows #21535 (and replace #22592)
## Review without space diff
https://github.com/go-gitea/gitea/pull/22678/files?diff=split&w=1
## Purpose of this PR
1. Make git module command completely safe (risky user inputs won't be
passed as argument option anymore)
2. Avoid low-level mistakes like
https://github.com/go-gitea/gitea/pull/22098#discussion_r1045234918
3. Remove deprecated and dirty `CmdArgCheck` function, hide the `CmdArg`
type
4. Simplify code when using git command
## The main idea of this PR
* Move the `git.CmdArg` to the `internal` package, then no other package
except `git` could use it. Then developers could never do
`AddArguments(git.CmdArg(userInput))` any more.
* Introduce `git.ToTrustedCmdArgs`, it's for user-provided and already
trusted arguments. It's only used in a few cases, for example: use git
arguments from config file, help unit test with some arguments.
* Introduce `AddOptionValues` and `AddOptionFormat`, they make code more
clear and simple:
* Before: `AddArguments("-m").AddDynamicArguments(message)`
* After: `AddOptionValues("-m", message)`
* -
* Before: `AddArguments(git.CmdArg(fmt.Sprintf("--author='%s <%s>'",
sig.Name, sig.Email)))`
* After: `AddOptionFormat("--author='%s <%s>'", sig.Name, sig.Email)`
## FAQ
### Why these changes were not done in #21535 ?
#21535 is mainly a search&replace, it did its best to not change too
much logic.
Making the framework better needs a lot of changes, so this separate PR
is needed as the second step.
### The naming of `AddOptionXxx`
According to git's manual, the `--xxx` part is called `option`.
### How can it guarantee that `internal.CmdArg` won't be not misused?
Go's specification guarantees that. Trying to access other package's
internal package causes compilation error.
And, `golangci-lint` also denies the git/internal package. Only the
`git/command.go` can use it carefully.
### There is still a `ToTrustedCmdArgs`, will it still allow developers
to make mistakes and pass untrusted arguments?
Generally speaking, no. Because when using `ToTrustedCmdArgs`, the code
will be very complex (see the changes for examples). Then developers and
reviewers can know that something might be unreasonable.
### Why there was a `CmdArgCheck` and why it's removed?
At the moment of #21535, to reduce unnecessary changes, `CmdArgCheck`
was introduced as a hacky patch. Now, almost all code could be written
as `cmd := NewCommand(); cmd.AddXxx(...)`, then there is no need for
`CmdArgCheck` anymore.
### Why many codes for `signArg == ""` is deleted?
Because in the old code, `signArg` could never be empty string, it's
either `-S[key-id]` or `--no-gpg-sign`. So the `signArg == ""` is just
dead code.
---------
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
2023-02-04 05:30:43 +03:00
- code.gitea.io/gitea/modules/git/internal : "do not use the internal package, use AddXxx function instead"
2019-06-12 22:41:28 +03:00
issues :
2022-09-20 12:39:00 +03:00
max-issues-per-linter : 0
max-same-issues : 0
2019-06-12 22:41:28 +03:00
exclude-rules :
# Exclude some linters from running on tests files.
- path : _test\.go
linters :
- gocyclo
- errcheck
- dupl
- gosec
- unparam
- staticcheck
- path : models/migrations/v
linters :
- gocyclo
- errcheck
- dupl
- gosec
- linters :
- dupl
text : "webhook"
- linters :
- gocritic
text : "`ID' should not be capitalized"
- path : modules/templates/helper.go
linters :
- gocritic
- linters :
- unused
- deadcode
text : "swagger"
- path : contrib/pr/checkout.go
linters :
- errcheck
- path : models/issue.go
linters :
- errcheck
- path : models/migrations/
linters :
- errcheck
- path : modules/log/
linters :
- errcheck
2019-11-02 18:27:49 +03:00
- path : routers/api/v1/repo/issue_subscription.go
linters :
- dupl
2019-06-12 22:41:28 +03:00
- path : routers/repo/view.go
linters :
- dupl
- path : models/migrations/
linters :
- unused
- linters :
- staticcheck
text : "argument x is overwritten before first use"
- path : modules/httplib/httplib.go
linters :
- staticcheck
# Enabling this would require refactoring the methods and how they are called.
- path : models/issue_comment_list.go
linters :
- dupl
2020-02-02 23:27:34 +03:00
- path : models/update.go
linters :
- unused
2020-09-29 12:05:13 +03:00
- path : cmd/dump.go
linters :
- dupl
2020-12-08 13:41:14 +03:00
- path : services/webhook/webhook.go
linters :
- structcheck
2020-10-11 23:27:20 +03:00
- text : "commentFormatting: put a space between `//` and comment text"
linters :
- gocritic
- text : "exitAfterDefer:"
linters :
- gocritic
2021-05-07 12:27:31 +03:00
- path : modules/graceful/manager_windows.go
linters :
- staticcheck
text : "svc.IsAnInteractiveSession is deprecated: Use IsWindowsService instead."
2021-11-17 12:58:31 +03:00
- path : models/user/openid.go
linters :
- golint
2022-08-18 02:25:25 +03:00
- path : models/user/badge.go
linters :
- revive
text : "exported: type name will be used as user.UserBadge by other packages, and that stutters; consider calling this Badge"