summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile12
-rw-r--r--build/code-batch-process.go284
-rw-r--r--build/codeformat/formatimports.go187
-rw-r--r--build/codeformat/formatimports_test.go125
-rw-r--r--build/gitea-format-imports.go27
-rw-r--r--cmd/doctor.go3
-rw-r--r--cmd/mailer.go1
-rw-r--r--cmd/web.go3
-rw-r--r--integrations/api_issue_label_test.go3
-rw-r--r--integrations/api_private_serv_test.go1
-rw-r--r--integrations/api_pull_commits_test.go1
-rw-r--r--integrations/api_repo_git_notes_test.go1
-rw-r--r--integrations/api_team_user_test.go1
-rw-r--r--integrations/api_user_org_perm_test.go1
-rw-r--r--integrations/download_test.go1
-rw-r--r--integrations/eventsource_test.go1
-rw-r--r--integrations/git_clone_wiki_test.go1
-rw-r--r--integrations/goget_test.go1
-rw-r--r--integrations/gpg_git_test.go1
-rw-r--r--integrations/org_count_test.go1
-rw-r--r--integrations/org_test.go1
-rw-r--r--integrations/rename_branch_test.go1
-rw-r--r--integrations/repo_migrate_test.go1
-rw-r--r--integrations/repofiles_delete_test.go3
-rw-r--r--integrations/signup_test.go1
-rw-r--r--integrations/user_avatar_test.go1
-rw-r--r--models/access_test.go1
-rw-r--r--models/admin_test.go1
-rw-r--r--models/attachment_test.go1
-rw-r--r--models/branches_test.go1
-rw-r--r--models/commit_status_test.go1
-rw-r--r--models/consistency_test.go1
-rwxr-xr-xmodels/db/engine.go10
-rw-r--r--models/issue_assignees_test.go1
-rw-r--r--models/issue_comment_test.go1
-rw-r--r--models/issue_dependency_test.go1
-rw-r--r--models/issue_label_test.go1
-rw-r--r--models/issue_list.go1
-rw-r--r--models/issue_test.go1
-rw-r--r--models/issue_tracked_time_test.go1
-rw-r--r--models/issue_user_test.go1
-rw-r--r--models/issue_watch_test.go1
-rw-r--r--models/migrations/v142.go1
-rw-r--r--models/migrations/v144.go1
-rw-r--r--models/migrations/v175.go1
-rw-r--r--models/migrations/v177_test.go1
-rw-r--r--models/migrations/v191.go1
-rw-r--r--models/notification_test.go1
-rw-r--r--models/org_team_test.go1
-rw-r--r--models/pull_test.go1
-rw-r--r--models/repo.go3
-rw-r--r--models/repo_collaboration_test.go1
-rw-r--r--models/repo_indexer.go1
-rw-r--r--models/repo_permission_test.go1
-rw-r--r--models/repo_redirect_test.go1
-rw-r--r--models/repo_transfer_test.go1
-rw-r--r--models/review_test.go1
-rw-r--r--models/ssh_key.go2
-rw-r--r--models/ssh_key_deploy.go1
-rw-r--r--models/ssh_key_fingerprint.go1
-rw-r--r--models/ssh_key_parse.go1
-rw-r--r--models/star_test.go1
-rw-r--r--models/token_test.go1
-rw-r--r--models/topic_test.go1
-rw-r--r--models/unittest/fixtures.go1
-rw-r--r--models/user.go4
-rw-r--r--models/user_email.go1
-rw-r--r--modules/convert/utils_test.go3
-rw-r--r--modules/doctor/fix16961.go1
-rw-r--r--modules/doctor/fix16961_test.go1
-rw-r--r--modules/git/commit_info_test.go1
-rw-r--r--modules/git/pipeline/lfs.go1
-rw-r--r--modules/git/repo_compare_test.go1
-rw-r--r--modules/git/repo_tag_test.go1
-rw-r--r--modules/highlight/highlight.go1
-rw-r--r--modules/highlight/highlight_test.go1
-rw-r--r--modules/indexer/issues/bleve_test.go1
-rw-r--r--modules/indexer/issues/indexer_test.go3
-rw-r--r--modules/indexer/stats/indexer_test.go3
-rw-r--r--modules/log/file_test.go1
-rw-r--r--modules/markup/mdstripper/mdstripper.go3
-rw-r--r--modules/markup/renderer_test.go1
-rw-r--r--modules/notification/action/action_test.go1
-rw-r--r--modules/queue/queue_disk_channel_test.go1
-rw-r--r--modules/queue/queue_disk_test.go1
-rw-r--r--modules/repofiles/blob_test.go1
-rw-r--r--modules/repofiles/content_test.go1
-rw-r--r--modules/repofiles/tree_test.go1
-rw-r--r--modules/repository/commits_test.go1
-rw-r--r--modules/setting/queue.go1
-rw-r--r--routers/api/v1/api.go3
-rw-r--r--routers/utils/utils_test.go1
-rw-r--r--routers/web/goget.go1
-rw-r--r--routers/web/repo/issue_test.go1
-rw-r--r--routers/web/web.go3
-rw-r--r--services/auth/signin.go3
-rw-r--r--services/auth/source/oauth2/store.go1
-rw-r--r--services/auth/source/oauth2/token.go1
-rw-r--r--services/cron/setting.go1
-rw-r--r--services/forms/user_form_auth_openid.go1
-rw-r--r--services/gitdiff/csv_test.go1
-rw-r--r--services/issue/assignee_test.go1
-rw-r--r--services/issue/label_test.go1
-rw-r--r--services/repository/fork_test.go1
-rw-r--r--services/webhook/deliver_test.go1
-rw-r--r--services/webhook/webhook_test.go1
106 files changed, 731 insertions, 42 deletions
diff --git a/Makefile b/Makefile
index ecd91680ee..eea9f7ad53 100644
--- a/Makefile
+++ b/Makefile
@@ -58,8 +58,6 @@ else
SED_INPLACE := sed -i ''
endif
-GOFMT ?= gofmt -s
-
EXTRA_GOFLAGS ?=
MAKE_VERSION := $(shell $(MAKE) -v | head -n 1)
@@ -127,8 +125,6 @@ ifeq ($(filter $(TAGS_SPLIT),bindata),bindata)
GO_SOURCES += $(BINDATA_DEST)
endif
-GO_SOURCES_OWN := $(filter-out vendor/% %/bindata.go, $(GO_SOURCES))
-
#To update swagger use: GO111MODULE=on go get -u github.com/go-swagger/go-swagger/cmd/swagger
SWAGGER := $(GO) run -mod=vendor github.com/go-swagger/go-swagger/cmd/swagger
SWAGGER_SPEC := templates/swagger/v1_json.tmpl
@@ -238,7 +234,7 @@ clean:
.PHONY: fmt
fmt:
@echo "Running go fmt..."
- @$(GOFMT) -w $(GO_SOURCES_OWN)
+ @$(GO) run build/code-batch-process.go gitea-fmt -s -w '{file-list}'
.PHONY: vet
vet:
@@ -298,7 +294,7 @@ misspell-check:
$(GO) install github.com/client9/misspell/cmd/misspell@v0.3.4; \
fi
@echo "Running misspell-check..."
- @misspell -error -i unknwon $(GO_SOURCES_OWN)
+ @$(GO) run build/code-batch-process.go misspell -error -i unknwon '{file-list}'
.PHONY: misspell
misspell:
@@ -306,12 +302,12 @@ misspell:
$(GO) install github.com/client9/misspell/cmd/misspell@v0.3.4; \
fi
@echo "Running go misspell..."
- @misspell -w -i unknwon $(GO_SOURCES_OWN)
+ @$(GO) run build/code-batch-process.go misspell -w -i unknwon '{file-list}'
.PHONY: fmt-check
fmt-check:
# get all go files and run go fmt on them
- @diff=$$($(GOFMT) -d $(GO_SOURCES_OWN)); \
+ @diff=$$($(GO) run build/code-batch-process.go gitea-fmt -s -d '{file-list}'); \
if [ -n "$$diff" ]; then \
echo "Please run 'make fmt' and commit the result:"; \
echo "$${diff}"; \
diff --git a/build/code-batch-process.go b/build/code-batch-process.go
new file mode 100644
index 0000000000..4759baf906
--- /dev/null
+++ b/build/code-batch-process.go
@@ -0,0 +1,284 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+//go:build ignore
+// +build ignore
+
+package main
+
+import (
+ "fmt"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "regexp"
+ "strconv"
+ "strings"
+
+ "code.gitea.io/gitea/build/codeformat"
+)
+
+// Windows has a limitation for command line arguments, the size can not exceed 32KB.
+// So we have to feed the files to some tools (like gofmt/misspell`) batch by batch
+
+// We also introduce a `gitea-fmt` command, it does better import formatting than gofmt/goimports
+
+var optionLogVerbose bool
+
+func logVerbose(msg string, args ...interface{}) {
+ if optionLogVerbose {
+ log.Printf(msg, args...)
+ }
+}
+
+func passThroughCmd(cmd string, args []string) error {
+ foundCmd, err := exec.LookPath(cmd)
+ if err != nil {
+ log.Fatalf("can not find cmd: %s", cmd)
+ }
+ c := exec.Cmd{
+ Path: foundCmd,
+ Args: args,
+ Stdin: os.Stdin,
+ Stdout: os.Stdout,
+ Stderr: os.Stderr,
+ }
+ return c.Run()
+}
+
+type fileCollector struct {
+ dirs []string
+ includePatterns []*regexp.Regexp
+ excludePatterns []*regexp.Regexp
+ batchSize int
+}
+
+func newFileCollector(fileFilter string, batchSize int) (*fileCollector, error) {
+ co := &fileCollector{batchSize: batchSize}
+ if fileFilter == "go-own" {
+ co.dirs = []string{
+ "build",
+ "cmd",
+ "contrib",
+ "integrations",
+ "models",
+ "modules",
+ "routers",
+ "services",
+ "tools",
+ }
+ co.includePatterns = append(co.includePatterns, regexp.MustCompile(`.*\.go$`))
+
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`.*\bbindata\.go$`))
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`integrations/gitea-repositories-meta`))
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`integrations/migration-test`))
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`modules/git/tests`))
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`models/fixtures`))
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`models/migrations/fixtures`))
+ co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`services/gitdiff/testdata`))
+ }
+
+ if co.dirs == nil {
+ return nil, fmt.Errorf("unknown file-filter: %s", fileFilter)
+ }
+ return co, nil
+}
+
+func (fc *fileCollector) matchPatterns(path string, regexps []*regexp.Regexp) bool {
+ path = strings.ReplaceAll(path, "\\", "/")
+ for _, re := range regexps {
+ if re.MatchString(path) {
+ return true
+ }
+ }
+ return false
+}
+
+func (fc *fileCollector) collectFiles() (res [][]string, err error) {
+ var batch []string
+ for _, dir := range fc.dirs {
+ err = filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error {
+ include := len(fc.includePatterns) == 0 || fc.matchPatterns(path, fc.includePatterns)
+ exclude := fc.matchPatterns(path, fc.excludePatterns)
+ process := include && !exclude
+ if !process {
+ if d.IsDir() {
+ if exclude {
+ logVerbose("exclude dir %s", path)
+ return filepath.SkipDir
+ }
+ // for a directory, if it is not excluded explicitly, we should walk into
+ return nil
+ }
+ // for a file, we skip it if it shouldn't be processed
+ logVerbose("skip process %s", path)
+ return nil
+ }
+ if d.IsDir() {
+ // skip dir, we don't add dirs to the file list now
+ return nil
+ }
+ if len(batch) >= fc.batchSize {
+ res = append(res, batch)
+ batch = nil
+ }
+ batch = append(batch, path)
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+ }
+ res = append(res, batch)
+ return res, nil
+}
+
+// substArgFiles expands the {file-list} to a real file list for commands
+func substArgFiles(args []string, files []string) []string {
+ for i, s := range args {
+ if s == "{file-list}" {
+ newArgs := append(args[:i], files...)
+ newArgs = append(newArgs, args[i+1:]...)
+ return newArgs
+ }
+ }
+ return args
+}
+
+func exitWithCmdErrors(subCmd string, subArgs []string, cmdErrors []error) {
+ for _, err := range cmdErrors {
+ if err != nil {
+ if exitError, ok := err.(*exec.ExitError); ok {
+ exitCode := exitError.ExitCode()
+ log.Printf("run command failed (code=%d): %s %v", exitCode, subCmd, subArgs)
+ os.Exit(exitCode)
+ } else {
+ log.Fatalf("run command failed (err=%s) %s %v", err, subCmd, subArgs)
+ }
+ }
+ }
+}
+
+func parseArgs() (mainOptions map[string]string, subCmd string, subArgs []string) {
+ mainOptions = map[string]string{}
+ for i := 1; i < len(os.Args); i++ {
+ arg := os.Args[i]
+ if arg == "" {
+ break
+ }
+ if arg[0] == '-' {
+ arg = strings.TrimPrefix(arg, "-")
+ arg = strings.TrimPrefix(arg, "-")
+ fields := strings.SplitN(arg, "=", 2)
+ if len(fields) == 1 {
+ mainOptions[fields[0]] = "1"
+ } else {
+ mainOptions[fields[0]] = fields[1]
+ }
+ } else {
+ subCmd = arg
+ subArgs = os.Args[i+1:]
+ break
+ }
+ }
+ return
+}
+
+func showUsage() {
+ fmt.Printf(`Usage: %[1]s [options] {command} [arguments]
+
+Options:
+ --verbose
+ --file-filter=go-own
+ --batch-size=100
+
+Commands:
+ %[1]s gofmt ...
+ %[1]s misspell ...
+
+Arguments:
+ {file-list} the file list
+
+Example:
+ %[1]s gofmt -s -d {file-list}
+
+`, "file-batch-exec")
+}
+
+func newFileCollectorFromMainOptions(mainOptions map[string]string) (fc *fileCollector, err error) {
+ fileFilter := mainOptions["file-filter"]
+ if fileFilter == "" {
+ fileFilter = "go-own"
+ }
+ batchSize, _ := strconv.Atoi(mainOptions["batch-size"])
+ if batchSize == 0 {
+ batchSize = 100
+ }
+
+ return newFileCollector(fileFilter, batchSize)
+}
+
+func containsString(a []string, s string) bool {
+ for _, v := range a {
+ if v == s {
+ return true
+ }
+ }
+ return false
+}
+
+func giteaFormatGoImports(files []string) error {
+ for _, file := range files {
+ if err := codeformat.FormatGoImports(file); err != nil {
+ log.Printf("failed to format go imports: %s, err=%v", file, err)
+ return err
+ }
+ }
+ return nil
+}
+
+func main() {
+ mainOptions, subCmd, subArgs := parseArgs()
+ if subCmd == "" {
+ showUsage()
+ os.Exit(1)
+ }
+ optionLogVerbose = mainOptions["verbose"] != ""
+
+ fc, err := newFileCollectorFromMainOptions(mainOptions)
+ if err != nil {
+ log.Fatalf("can not create file collector: %s", err.Error())
+ }
+
+ fileBatches, err := fc.collectFiles()
+ if err != nil {
+ log.Fatalf("can not collect files: %s", err.Error())
+ }
+
+ processed := 0
+ var cmdErrors []error
+ for _, files := range fileBatches {
+ if len(files) == 0 {
+ break
+ }
+ substArgs := substArgFiles(subArgs, files)
+ logVerbose("batch cmd: %s %v", subCmd, substArgs)
+ switch subCmd {
+ case "gitea-fmt":
+ cmdErrors = append(cmdErrors, passThroughCmd("gofmt", substArgs))
+ if containsString(subArgs, "-w") {
+ cmdErrors = append(cmdErrors, giteaFormatGoImports(files))
+ }
+ case "misspell":
+ cmdErrors = append(cmdErrors, passThroughCmd("misspell", substArgs))
+ default:
+ log.Fatalf("unknown cmd: %s %v", subCmd, subArgs)
+ }
+ processed += len(files)
+ }
+
+ logVerbose("processed %d files", processed)
+ exitWithCmdErrors(subCmd, subArgs, cmdErrors)
+}
diff --git a/build/codeformat/formatimports.go b/build/codeformat/formatimports.go
new file mode 100644
index 0000000000..c6427f6a99
--- /dev/null
+++ b/build/codeformat/formatimports.go
@@ -0,0 +1,187 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package codeformat
+
+import (
+ "bytes"
+ "errors"
+ "io"
+ "os"
+ "sort"
+ "strings"
+)
+
+var importPackageGroupOrders = map[string]int{
+ "": 1, // internal
+ "code.gitea.io/gitea/": 2,
+}
+
+var errInvalidCommentBetweenImports = errors.New("comments between imported packages are invalid, please move comments to the end of the package line")
+
+var importBlockBegin = []byte("\nimport (\n")
+var importBlockEnd = []byte("\n)")
+
+type importLineParsed struct {
+ group string
+ pkg string
+ content string
+}
+
+func parseImportLine(line string) (*importLineParsed, error) {
+ il := &importLineParsed{content: line}
+ p1 := strings.IndexRune(line, '"')
+ if p1 == -1 {
+ return nil, errors.New("invalid import line: " + line)
+ }
+ p1++
+ p := strings.IndexRune(line[p1:], '"')
+ if p == -1 {
+ return nil, errors.New("invalid import line: " + line)
+ }
+ p2 := p1 + p
+ il.pkg = line[p1:p2]
+
+ pDot := strings.IndexRune(il.pkg, '.')
+ pSlash := strings.IndexRune(il.pkg, '/')
+ if pDot != -1 && pDot < pSlash {
+ il.group = "domain-package"
+ }
+ for groupName := range importPackageGroupOrders {
+ if groupName == "" {
+ continue // skip internal
+ }
+ if strings.HasPrefix(il.pkg, groupName) {
+ il.group = groupName
+ }
+ }
+ return il, nil
+}
+
+type importLineGroup []*importLineParsed
+type importLineGroupMap map[string]importLineGroup
+
+func formatGoImports(contentBytes []byte) ([]byte, error) {
+ p1 := bytes.Index(contentBytes, importBlockBegin)
+ if p1 == -1 {
+ return nil, nil
+ }
+ p1 += len(importBlockBegin)
+ p := bytes.Index(contentBytes[p1:], importBlockEnd)
+ if p == -1 {
+ return nil, nil
+ }
+ p2 := p1 + p
+
+ importGroups := importLineGroupMap{}
+ r := bytes.NewBuffer(contentBytes[p1:p2])
+ eof := false
+ for !eof {
+ line, err := r.ReadString('\n')
+ eof = err == io.EOF
+ if err != nil && !eof {
+ return nil, err
+ }
+ line = strings.TrimSpace(line)
+ if line != "" {
+ if strings.HasPrefix(line, "//") || strings.HasPrefix(line, "/*") {
+ return nil, errInvalidCommentBetweenImports
+ }
+ importLine, err := parseImportLine(line)
+ if err != nil {
+ return nil, err
+ }
+ importGroups[importLine.group] = append(importGroups[importLine.group], importLine)
+ }
+ }
+
+ var groupNames []string
+ for groupName, importLines := range importGroups {
+ groupNames = append(groupNames, groupName)
+ sort.Slice(importLines, func(i, j int) bool {
+ return strings.Compare(importLines[i].pkg, importLines[j].pkg) < 0
+ })
+ }
+
+ sort.Slice(groupNames, func(i, j int) bool {
+ n1 := groupNames[i]
+ n2 := groupNames[j]
+ o1 := importPackageGroupOrders[n1]
+ o2 := importPackageGroupOrders[n2]
+ if o1 != 0 && o2 != 0 {
+ return o1 < o2
+ }
+ if o1 == 0 && o2 == 0 {
+ return strings.Compare(n1, n2) < 0
+ }
+ return o1 != 0
+ })
+
+ formattedBlock := bytes.Buffer{}
+ for _, groupName := range groupNames {
+ hasNormalImports := false
+ hasDummyImports := false
+ // non-dummy import comes first
+ for _, importLine := range importGroups[groupName] {
+ if strings.HasPrefix(importLine.content, "_") {
+ hasDummyImports = true
+ } else {
+ formattedBlock.WriteString("\t" + importLine.content + "\n")
+ hasNormalImports = true
+ }
+ }
+ // dummy (_ "pkg") comes later
+ if hasDummyImports {
+ if hasNormalImports {
+ formattedBlock.WriteString("\n")
+ }
+ for _, importLine := range importGroups[groupName] {
+ if strings.HasPrefix(importLine.content, "_") {
+ formattedBlock.WriteString("\t" + importLine.content + "\n")
+ }
+ }
+ }
+ formattedBlock.WriteString("\n")
+ }
+ formattedBlockBytes := bytes.TrimRight(formattedBlock.Bytes(), "\n")
+
+ var formattedBytes []byte
+ formattedBytes = append(formattedBytes, contentBytes[:p1]...)
+ formattedBytes = append(formattedBytes, formattedBlockBytes...)
+ formattedBytes = append(formattedBytes, contentBytes[p2:]...)
+ return formattedBytes, nil
+}
+
+//FormatGoImports format the imports by our rules (see unit tests)
+func FormatGoImports(file string) error {
+ f, err := os.Open(file)
+ if err != nil {
+ return err
+ }
+ var contentBytes []byte
+ {
+ defer f.Close()
+ contentBytes, err = io.ReadAll(f)
+ if err != nil {
+ return err
+ }
+ }
+ formattedBytes, err := formatGoImports(contentBytes)
+ if err != nil {
+ return err
+ }
+ if formattedBytes == nil {
+ return nil
+ }
+ if bytes.Equal(contentBytes, formattedBytes) {
+ return nil
+ }
+ f, err = os.OpenFile(file, os.O_TRUNC|os.O_WRONLY, 0644)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ _, err = f.Write(formattedBytes)
+ return err
+}
diff --git a/build/codeformat/formatimports_test.go b/build/codeformat/formatimports_test.go
new file mode 100644
index 0000000000..d308353bda
--- /dev/null
+++ b/build/codeformat/formatimports_test.go
@@ -0,0 +1,125 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package codeformat
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestFormatImportsSimple(t *testing.T) {
+ formatted, err := formatGoImports([]byte(`
+package codeformat
+
+import (
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+`))
+
+ expected := `
+package codeformat
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+`
+
+ assert.NoError(t, err)
+ assert.Equal(t, expected, string(formatted))
+}
+
+func TestFormatImportsGroup(t *testing.T) {
+ // gofmt/goimports won't group the packages, for example, they produce such code:
+ // "bytes"
+ // "image"
+ // (a blank line)
+ // "fmt"
+ // "image/color/palette"
+ // our formatter does better, and these packages are grouped into one.
+
+ formatted, err := formatGoImports([]byte(`
+package test
+
+import (
+ "bytes"
+ "fmt"
+ "image"
+ "image/color/palette"
+
+ _ "image/gif" // for processing gif images
+ _ "image/jpeg" // for processing jpeg images
+ _ "image/png" // for processing png images
+
+ "code.gitea.io/other/package"
+
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/util"
+
+ "xorm.io/the/package"
+
+ "github.com/issue9/identicon"
+ "github.com/nfnt/resize"
+ "github.com/oliamb/cutter"
+)
+`))
+
+ expected := `
+package test
+
+import (
+ "bytes"
+ "fmt"
+ "image"
+ "image/color/palette"
+
+ _ "image/gif" // for processing gif images
+ _ "image/jpeg" // for processing jpeg images
+ _ "image/png" // for processing png images
+
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/util"
+
+ "code.gitea.io/other/package"
+ "github.com/issue9/identicon"
+ "github.com/nfnt/resize"
+ "github.com/oliamb/cutter"
+ "xorm.io/the/package"
+)
+`
+
+ assert.NoError(t, err)
+ assert.Equal(t, expected, string(formatted))
+}
+
+func TestFormatImportsInvalidComment(t *testing.T) {
+ // why we shouldn't write comments between imports: it breaks the grouping of imports
+ // for example:
+ // "pkg1"
+ // "pkg2"
+ // // a comment
+ // "pkgA"
+ // "pkgB"
+ // the comment splits the packages into two groups, pkg1/2 are sorted separately, pkgA/B are sorted separately
+ // we don't want such code, so the code should be:
+ // "pkg1"
+ // "pkg2"
+ // "pkgA" // a comment
+ // "pkgB"
+
+ _, err := formatGoImports([]byte(`
+package test
+
+import (
+ "image/jpeg"
+ // for processing gif images
+ "image/gif"
+)
+`))
+ assert.ErrorIs(t, err, errInvalidCommentBetweenImports)
+}
diff --git a/build/gitea-format-imports.go b/build/gitea-format-imports.go
new file mode 100644
index 0000000000..67c8397b2d
--- /dev/null
+++ b/build/gitea-format-imports.go
@@ -0,0 +1,27 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+//go:build ignore
+// +build ignore
+
+package main
+
+import (
+ "log"
+ "os"
+
+ "code.gitea.io/gitea/build/codeformat"
+)
+
+func main() {
+ if len(os.Args) <= 1 {
+ log.Fatalf("Usage: gitea-format-imports [files...]")
+ }
+
+ for _, file := range os.Args[1:] {
+ if err := codeformat.FormatGoImports(file); err != nil {
+ log.Fatalf("can not format file %s, err=%v", file, err)
+ }
+ }
+}
diff --git a/cmd/doctor.go b/cmd/doctor.go
index 498b859e41..27f91e41bb 100644
--- a/cmd/doctor.go
+++ b/cmd/doctor.go
@@ -18,9 +18,8 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
- "xorm.io/xorm"
-
"github.com/urfave/cli"
+ "xorm.io/xorm"
)
// CmdDoctor represents the available doctor sub-command.
diff --git a/cmd/mailer.go b/cmd/mailer.go
index 1a4b0902e2..a3d6baaa27 100644
--- a/cmd/mailer.go
+++ b/cmd/mailer.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/setting"
+
"github.com/urfave/cli"
)
diff --git a/cmd/web.go b/cmd/web.go
index 80516058fb..4b6dfa71a2 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -9,10 +9,11 @@ import (
"fmt"
"net"
"net/http"
- _ "net/http/pprof" // Used for debugging if enabled and a web server is running
"os"
"strings"
+ _ "net/http/pprof" // Used for debugging if enabled and a web server is running
+
"code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
diff --git a/integrations/api_issue_label_test.go b/integrations/api_issue_label_test.go
index 7cb5df812b..58e09c818e 100644
--- a/integrations/api_issue_label_test.go
+++ b/integrations/api_issue_label_test.go
@@ -10,9 +10,8 @@ import (
"strings"
"testing"
- "code.gitea.io/gitea/models/unittest"
-
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/models/unittest"
api "code.gitea.io/gitea/modules/structs"
"github.com/stretchr/testify/assert"
diff --git a/integrations/api_private_serv_test.go b/integrations/api_private_serv_test.go
index 8d814271cd..c3cb1cf328 100644
--- a/integrations/api_private_serv_test.go
+++ b/integrations/api_private_serv_test.go
@@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/private"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/api_pull_commits_test.go b/integrations/api_pull_commits_test.go
index c537f00208..a3d1bee58a 100644
--- a/integrations/api_pull_commits_test.go
+++ b/integrations/api_pull_commits_test.go
@@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/api_repo_git_notes_test.go b/integrations/api_repo_git_notes_test.go
index 21b8a931b0..293bd769f4 100644
--- a/integrations/api_repo_git_notes_test.go
+++ b/integrations/api_repo_git_notes_test.go
@@ -12,6 +12,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/api_team_user_test.go b/integrations/api_team_user_test.go
index 7e5bb0802e..e7f4b0ee4c 100644
--- a/integrations/api_team_user_test.go
+++ b/integrations/api_team_user_test.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/convert"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/api_user_org_perm_test.go b/integrations/api_user_org_perm_test.go
index abba24701e..0dcdbd77ad 100644
--- a/integrations/api_user_org_perm_test.go
+++ b/integrations/api_user_org_perm_test.go
@@ -10,6 +10,7 @@ import (
"testing"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/download_test.go b/integrations/download_test.go
index 38de75f476..f46122d951 100644
--- a/integrations/download_test.go
+++ b/integrations/download_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/setting"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/eventsource_test.go b/integrations/eventsource_test.go
index ead01da8ca..eb08c004a8 100644
--- a/integrations/eventsource_test.go
+++ b/integrations/eventsource_test.go
@@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/eventsource"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/git_clone_wiki_test.go b/integrations/git_clone_wiki_test.go
index 2139ce5fe0..16cee254bc 100644
--- a/integrations/git_clone_wiki_test.go
+++ b/integrations/git_clone_wiki_test.go
@@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/goget_test.go b/integrations/goget_test.go
index 1003d71023..5dc9c5e0a8 100644
--- a/integrations/goget_test.go
+++ b/integrations/goget_test.go
@@ -10,6 +10,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/setting"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/gpg_git_test.go b/integrations/gpg_git_test.go
index ecc2539784..b136e82281 100644
--- a/integrations/gpg_git_test.go
+++ b/integrations/gpg_git_test.go
@@ -17,6 +17,7 @@ import (
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
"golang.org/x/crypto/openpgp"
"golang.org/x/crypto/openpgp/armor"
diff --git a/integrations/org_count_test.go b/integrations/org_count_test.go
index c473ecd68a..a394dba01c 100644
--- a/integrations/org_count_test.go
+++ b/integrations/org_count_test.go
@@ -12,6 +12,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/org_test.go b/integrations/org_test.go
index ac234de650..e94e4ea74c 100644
--- a/integrations/org_test.go
+++ b/integrations/org_test.go
@@ -11,6 +11,7 @@ import (
"testing"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/rename_branch_test.go b/integrations/rename_branch_test.go
index a8138ff0c5..1fe1983054 100644
--- a/integrations/rename_branch_test.go
+++ b/integrations/rename_branch_test.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/repo_migrate_test.go b/integrations/repo_migrate_test.go
index 5a02b4ba03..e6ba15b137 100644
--- a/integrations/repo_migrate_test.go
+++ b/integrations/repo_migrate_test.go
@@ -11,6 +11,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/integrations/repofiles_delete_test.go b/integrations/repofiles_delete_test.go
index 8150673e2b..eb73348950 100644
--- a/integrations/repofiles_delete_test.go
+++ b/integrations/repofiles_delete_test.go
@@ -8,9 +8,8 @@ import (
"net/url"
"testing"
- "code.gitea.io/gitea/models/unittest"
-
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/repofiles"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/test"
diff --git a/integrations/signup_test.go b/integrations/signup_test.go
index 33e5809b28..38aa069f31 100644
--- a/integrations/signup_test.go
+++ b/integrations/signup_test.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/setting"
+
"github.com/stretchr/testify/assert"
"github.com/unknwon/i18n"
)
diff --git a/integrations/user_avatar_test.go b/integrations/user_avatar_test.go
index e53f0e34fe..edc3a47314 100644
--- a/integrations/user_avatar_test.go
+++ b/integrations/user_avatar_test.go
@@ -16,6 +16,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/avatar"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/access_test.go b/models/access_test.go
index 96aa34edb6..942ca4af42 100644
--- a/models/access_test.go
+++ b/models/access_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/admin_test.go b/models/admin_test.go
index 95415731b2..8c1deda5f8 100644
--- a/models/admin_test.go
+++ b/models/admin_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/attachment_test.go b/models/attachment_test.go
index c394990536..4081811d19 100644
--- a/models/attachment_test.go
+++ b/models/attachment_test.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/branches_test.go b/models/branches_test.go
index 787dd7fe83..187f23d41b 100644
--- a/models/branches_test.go
+++ b/models/branches_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/commit_status_test.go b/models/commit_status_test.go
index 32d6a433ce..02e3849357 100644
--- a/models/commit_status_test.go
+++ b/models/commit_status_test.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/consistency_test.go b/models/consistency_test.go
index 6995f47c87..d49a0132f0 100644
--- a/models/consistency_test.go
+++ b/models/consistency_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/db/engine.go b/models/db/engine.go
index e392008020..b97e954cc3 100755
--- a/models/db/engine.go
+++ b/models/db/engine.go
@@ -16,17 +16,13 @@ import (
"code.gitea.io/gitea/modules/setting"
- // Needed for the MySQL driver
- _ "github.com/go-sql-driver/mysql"
"xorm.io/xorm"
"xorm.io/xorm/names"
"xorm.io/xorm/schemas"
- // Needed for the Postgresql driver
- _ "github.com/lib/pq"
-
- // Needed for the MSSQL driver
- _ "github.com/denisenkom/go-mssqldb"
+ _ "github.com/denisenkom/go-mssqldb" // Needed for the MSSQL driver
+ _ "github.com/go-sql-driver/mysql" // Needed for the MySQL driver
+ _ "github.com/lib/pq" // Needed for the Postgresql driver
)
var (
diff --git a/models/issue_assignees_test.go b/models/issue_assignees_test.go
index 8e2256072a..d1ce000de6 100644
--- a/models/issue_assignees_test.go
+++ b/models/issue_assignees_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_comment_test.go b/models/issue_comment_test.go
index 27c50a3ae4..4d3607b3e1 100644
--- a/models/issue_comment_test.go
+++ b/models/issue_comment_test.go
@@ -9,6 +9,7 @@ import (
"time"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_dependency_test.go b/models/issue_dependency_test.go
index c357d35c50..86ac98b733 100644
--- a/models/issue_dependency_test.go
+++ b/models/issue_dependency_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_label_test.go b/models/issue_label_test.go
index 658c459ba5..d0f807a56e 100644
--- a/models/issue_label_test.go
+++ b/models/issue_label_test.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_list.go b/models/issue_list.go
index ac7ec7ccbf..04dcc58422 100644
--- a/models/issue_list.go
+++ b/models/issue_list.go
@@ -8,6 +8,7 @@ import (
"fmt"
"code.gitea.io/gitea/models/db"
+
"xorm.io/builder"
)
diff --git a/models/issue_test.go b/models/issue_test.go
index f53febb1b3..7942b7e785 100644
--- a/models/issue_test.go
+++ b/models/issue_test.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_tracked_time_test.go b/models/issue_tracked_time_test.go
index 9bc9664521..83420f5a15 100644
--- a/models/issue_tracked_time_test.go
+++ b/models/issue_tracked_time_test.go
@@ -9,6 +9,7 @@ import (
"time"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_user_test.go b/models/issue_user_test.go
index 1be2763703..daa68d731e 100644
--- a/models/issue_user_test.go
+++ b/models/issue_user_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/issue_watch_test.go b/models/issue_watch_test.go
index 18d49bfce5..f75677d68c 100644
--- a/models/issue_watch_test.go
+++ b/models/issue_watch_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/migrations/v142.go b/models/migrations/v142.go
index 1abdd34961..d8ccc112d6 100644
--- a/models/migrations/v142.go
+++ b/models/migrations/v142.go
@@ -6,6 +6,7 @@ package migrations
import (
"code.gitea.io/gitea/modules/log"
+
"xorm.io/builder"
"xorm.io/xorm"
)
diff --git a/models/migrations/v144.go b/models/migrations/v144.go
index 311bb93e3b..81279a54c9 100644
--- a/models/migrations/v144.go
+++ b/models/migrations/v144.go
@@ -6,6 +6,7 @@ package migrations
import (
"code.gitea.io/gitea/modules/log"
+
"xorm.io/builder"
"xorm.io/xorm"
)
diff --git a/models/migrations/v175.go b/models/migrations/v175.go
index 0044ed1845..2dfefe987b 100644
--- a/models/migrations/v175.go
+++ b/models/migrations/v175.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
+
"xorm.io/xorm"
)
diff --git a/models/migrations/v177_test.go b/models/migrations/v177_test.go
index 02cb1d2652..f5fc793aa4 100644
--- a/models/migrations/v177_test.go
+++ b/models/migrations/v177_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/timeutil"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/migrations/v191.go b/models/migrations/v191.go
index 10dfad4f04..c91990e0f3 100644
--- a/models/migrations/v191.go
+++ b/models/migrations/v191.go
@@ -6,6 +6,7 @@ package migrations
import (
"code.gitea.io/gitea/modules/setting"
+
"xorm.io/xorm"
)
diff --git a/models/notification_test.go b/models/notification_test.go
index db2164a2f5..19fad25f99 100644
--- a/models/notification_test.go
+++ b/models/notification_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/org_team_test.go b/models/org_team_test.go
index 9277ac4f5e..b912dd83f2 100644
--- a/models/org_team_test.go
+++ b/models/org_team_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/pull_test.go b/models/pull_test.go
index 0225b421fb..c967cca313 100644
--- a/models/pull_test.go
+++ b/models/pull_test.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/repo.go b/models/repo.go
index 16396e181d..d45f1b2fc3 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -10,7 +10,6 @@ import (
"errors"
"fmt"
"html/template"
- _ "image/jpeg" // Needed for jpeg support
"net"
"net/url"
"os"
@@ -22,6 +21,8 @@ import (
"time"
"unicode/utf8"
+ _ "image/jpeg" // Needed for jpeg support
+
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/webhook"
diff --git a/models/repo_collaboration_test.go b/models/repo_collaboration_test.go
index 9b698c0af6..060afc2139 100644
--- a/models/repo_collaboration_test.go
+++ b/models/repo_collaboration_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/repo_indexer.go b/models/repo_indexer.go
index 7029b0922b..e0511b325e 100644
--- a/models/repo_indexer.go
+++ b/models/repo_indexer.go
@@ -8,6 +8,7 @@ import (
"fmt"
"code.gitea.io/gitea/models/db"
+
"xorm.io/builder"
)
diff --git a/models/repo_permission_test.go b/models/repo_permission_test.go
index b64fe37911..180a85a2f5 100644
--- a/models/repo_permission_test.go
+++ b/models/repo_permission_test.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/repo_redirect_test.go b/models/repo_redirect_test.go
index a9d3cc1494..6e5b9fc080 100644
--- a/models/repo_redirect_test.go
+++ b/models/repo_redirect_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/repo_transfer_test.go b/models/repo_transfer_test.go
index df4f83919b..368fea598d 100644
--- a/models/repo_transfer_test.go
+++ b/models/repo_transfer_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/review_test.go b/models/review_test.go
index 2d07ea2ce4..7b8b86df13 100644
--- a/models/review_test.go
+++ b/models/review_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/ssh_key.go b/models/ssh_key.go
index c08fb72e75..baa0d2a54f 100644
--- a/models/ssh_key.go
+++ b/models/ssh_key.go
@@ -15,8 +15,8 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"
- "golang.org/x/crypto/ssh"
+ "golang.org/x/crypto/ssh"
"xorm.io/builder"
)
diff --git a/models/ssh_key_deploy.go b/models/ssh_key_deploy.go
index 34cf03e925..4e3910d556 100644
--- a/models/ssh_key_deploy.go
+++ b/models/ssh_key_deploy.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
+
"xorm.io/builder"
"xorm.io/xorm"
)
diff --git a/models/ssh_key_fingerprint.go b/models/ssh_key_fingerprint.go
index 93c455e489..85296c961c 100644
--- a/models/ssh_key_fingerprint.go
+++ b/models/ssh_key_fingerprint.go
@@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
+
"golang.org/x/crypto/ssh"
)
diff --git a/models/ssh_key_parse.go b/models/ssh_key_parse.go
index d2c24b0a2a..748c66da7d 100644
--- a/models/ssh_key_parse.go
+++ b/models/ssh_key_parse.go
@@ -22,6 +22,7 @@ import (
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
+
"golang.org/x/crypto/ssh"
)
diff --git a/models/star_test.go b/models/star_test.go
index e131372733..f9a7ddb0f2 100644
--- a/models/star_test.go
+++ b/models/star_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/token_test.go b/models/token_test.go
index 191da7820e..007148870a 100644
--- a/models/token_test.go
+++ b/models/token_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/topic_test.go b/models/topic_test.go
index def946b666..a38ed64940 100644
--- a/models/topic_test.go
+++ b/models/topic_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/models/unittest/fixtures.go b/models/unittest/fixtures.go
index af60df7b68..6277d1c725 100644
--- a/models/unittest/fixtures.go
+++ b/models/unittest/fixtures.go
@@ -12,7 +12,6 @@ import (
"code.gitea.io/gitea/models/db"
"github.com/go-testfixtures/testfixtures/v3"
-
"xorm.io/xorm"
"xorm.io/xorm/schemas"
)
diff --git a/models/user.go b/models/user.go
index e3cf94efe0..a87929a35f 100644
--- a/models/user.go
+++ b/models/user.go
@@ -12,7 +12,6 @@ import (
"encoding/hex"
"errors"
"fmt"
- _ "image/jpeg" // Needed for jpeg support
"net/url"
"os"
"path/filepath"
@@ -21,6 +20,8 @@ import (
"time"
"unicode/utf8"
+ _ "image/jpeg" // Needed for jpeg support
+
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/login"
"code.gitea.io/gitea/models/unit"
@@ -39,7 +40,6 @@ import (
"golang.org/x/crypto/bcrypt"
"golang.org/x/crypto/pbkdf2"
"golang.org/x/crypto/scrypt"
-
"xorm.io/builder"
"xorm.io/xorm"
)
diff --git a/models/user_email.go b/models/user_email.go
index 7de577bc2c..bd0da65405 100644
--- a/models/user_email.go
+++ b/models/user_email.go
@@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/util"
+
"xorm.io/builder"
)
diff --git a/modules/convert/utils_test.go b/modules/convert/utils_test.go
index bd59299c01..e0ab15dfd8 100644
--- a/modules/convert/utils_test.go
+++ b/modules/convert/utils_test.go
@@ -7,8 +7,9 @@ package convert
import (
"testing"
- _ "github.com/mattn/go-sqlite3"
"github.com/stretchr/testify/assert"
+
+ _ "github.com/mattn/go-sqlite3"
)
func TestToCorrectPageSize(t *testing.T) {
diff --git a/modules/doctor/fix16961.go b/modules/doctor/fix16961.go
index e0e44b414b..2e1db834cd 100644
--- a/modules/doctor/fix16961.go
+++ b/modules/doctor/fix16961.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/timeutil"
+
"xorm.io/builder"
)
diff --git a/modules/doctor/fix16961_test.go b/modules/doctor/fix16961_test.go
index 017f585335..986425b4d8 100644
--- a/modules/doctor/fix16961_test.go
+++ b/modules/doctor/fix16961_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/git/commit_info_test.go b/modules/git/commit_info_test.go
index 0608801f9d..8467bdaa90 100644
--- a/modules/git/commit_info_test.go
+++ b/modules/git/commit_info_test.go
@@ -12,6 +12,7 @@ import (
"time"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/git/pipeline/lfs.go b/modules/git/pipeline/lfs.go
index 46a48b710c..4551ccd3f4 100644
--- a/modules/git/pipeline/lfs.go
+++ b/modules/git/pipeline/lfs.go
@@ -17,6 +17,7 @@ import (
"time"
"code.gitea.io/gitea/modules/git"
+
gogit "github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object"
)
diff --git a/modules/git/repo_compare_test.go b/modules/git/repo_compare_test.go
index 3a6cda955c..ecd1aa4e6d 100644
--- a/modules/git/repo_compare_test.go
+++ b/modules/git/repo_compare_test.go
@@ -11,6 +11,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/git/repo_tag_test.go b/modules/git/repo_tag_test.go
index cfab9edd8f..136287e1a9 100644
--- a/modules/git/repo_tag_test.go
+++ b/modules/git/repo_tag_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/highlight/highlight.go b/modules/highlight/highlight.go
index 6684fbe842..9a876d2a6b 100644
--- a/modules/highlight/highlight.go
+++ b/modules/highlight/highlight.go
@@ -17,6 +17,7 @@ import (
"code.gitea.io/gitea/modules/analyze"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
+
"github.com/alecthomas/chroma"
"github.com/alecthomas/chroma/formatters/html"
"github.com/alecthomas/chroma/lexers"
diff --git a/modules/highlight/highlight_test.go b/modules/highlight/highlight_test.go
index 0a67e4c602..29a15c0b53 100644
--- a/modules/highlight/highlight_test.go
+++ b/modules/highlight/highlight_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/setting"
+
"gopkg.in/ini.v1"
)
diff --git a/modules/indexer/issues/bleve_test.go b/modules/indexer/issues/bleve_test.go
index 70a9582e1d..036b318d85 100644
--- a/modules/indexer/issues/bleve_test.go
+++ b/modules/indexer/issues/bleve_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/indexer/issues/indexer_test.go b/modules/indexer/issues/indexer_test.go
index edfaddb648..8353891c7c 100644
--- a/modules/indexer/issues/indexer_test.go
+++ b/modules/indexer/issues/indexer_test.go
@@ -15,9 +15,8 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
- "gopkg.in/ini.v1"
-
"github.com/stretchr/testify/assert"
+ "gopkg.in/ini.v1"
)
func TestMain(m *testing.M) {
diff --git a/modules/indexer/stats/indexer_test.go b/modules/indexer/stats/indexer_test.go
index c451e80238..f52d73a32e 100644
--- a/modules/indexer/stats/indexer_test.go
+++ b/modules/indexer/stats/indexer_test.go
@@ -13,9 +13,8 @@ import (
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/setting"
- "gopkg.in/ini.v1"
-
"github.com/stretchr/testify/assert"
+ "gopkg.in/ini.v1"
)
func TestMain(m *testing.M) {
diff --git a/modules/log/file_test.go b/modules/log/file_test.go
index 39d2467a1f..09a07b1e27 100644
--- a/modules/log/file_test.go
+++ b/modules/log/file_test.go
@@ -15,6 +15,7 @@ import (
"time"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/markup/mdstripper/mdstripper.go b/modules/markup/mdstripper/mdstripper.go
index 52464f3e1b..2977c81977 100644
--- a/modules/markup/mdstripper/mdstripper.go
+++ b/modules/markup/mdstripper/mdstripper.go
@@ -6,12 +6,11 @@ package mdstripper
import (
"bytes"
+ "io"
"net/url"
"strings"
"sync"
- "io"
-
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup/common"
"code.gitea.io/gitea/modules/setting"
diff --git a/modules/markup/renderer_test.go b/modules/markup/renderer_test.go
index 118fa2632b..4cfa022463 100644
--- a/modules/markup/renderer_test.go
+++ b/modules/markup/renderer_test.go
@@ -8,6 +8,7 @@ import (
"testing"
. "code.gitea.io/gitea/modules/markup"
+
_ "code.gitea.io/gitea/modules/markup/markdown"
"github.com/stretchr/testify/assert"
diff --git a/modules/notification/action/action_test.go b/modules/notification/action/action_test.go
index 3adcae83fd..448242bcdf 100644
--- a/modules/notification/action/action_test.go
+++ b/modules/notification/action/action_test.go
@@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/queue/queue_disk_channel_test.go b/modules/queue/queue_disk_channel_test.go
index 99fb65934e..d464a183a0 100644
--- a/modules/queue/queue_disk_channel_test.go
+++ b/modules/queue/queue_disk_channel_test.go
@@ -10,6 +10,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/queue/queue_disk_test.go b/modules/queue/queue_disk_test.go
index 549a04104e..a2c21fec08 100644
--- a/modules/queue/queue_disk_test.go
+++ b/modules/queue/queue_disk_test.go
@@ -11,6 +11,7 @@ import (
"time"
"code.gitea.io/gitea/modules/util"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/repofiles/blob_test.go b/modules/repofiles/blob_test.go
index c219892aec..8950c349e6 100644
--- a/modules/repofiles/blob_test.go
+++ b/modules/repofiles/blob_test.go
@@ -8,7 +8,6 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
-
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/test"
diff --git a/modules/repofiles/content_test.go b/modules/repofiles/content_test.go
index e3230698bc..f6a953fab9 100644
--- a/modules/repofiles/content_test.go
+++ b/modules/repofiles/content_test.go
@@ -9,7 +9,6 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
-
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/test"
diff --git a/modules/repofiles/tree_test.go b/modules/repofiles/tree_test.go
index 512313c43b..6917b8915b 100644
--- a/modules/repofiles/tree_test.go
+++ b/modules/repofiles/tree_test.go
@@ -8,7 +8,6 @@ import (
"testing"
"code.gitea.io/gitea/models/unittest"
-
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/test"
diff --git a/modules/repository/commits_test.go b/modules/repository/commits_test.go
index 0d6c2e4c5c..b6a63dc127 100644
--- a/modules/repository/commits_test.go
+++ b/modules/repository/commits_test.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/git"
+
"github.com/stretchr/testify/assert"
)
diff --git a/modules/setting/queue.go b/modules/setting/queue.go
index 1668cc63a3..56a036aeef 100644
--- a/modules/setting/queue.go
+++ b/modules/setting/queue.go
@@ -10,6 +10,7 @@ import (
"time"
"code.gitea.io/gitea/modules/log"
+
ini "gopkg.in/ini.v1"
)
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index f312df23db..ab8b07d609 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -83,11 +83,12 @@ import (
"code.gitea.io/gitea/routers/api/v1/org"
"code.gitea.io/gitea/routers/api/v1/repo"
"code.gitea.io/gitea/routers/api/v1/settings"
- _ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation
"code.gitea.io/gitea/routers/api/v1/user"
"code.gitea.io/gitea/services/auth"
"code.gitea.io/gitea/services/forms"
+ _ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation
+
"gitea.com/go-chi/binding"
"github.com/go-chi/cors"
)
diff --git a/routers/utils/utils_test.go b/routers/utils/utils_test.go
index bca5263311..f49ed77b6f 100644
--- a/routers/utils/utils_test.go
+++ b/routers/utils/utils_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/setting"
+
"github.com/stretchr/testify/assert"
)
diff --git a/routers/web/goget.go b/routers/web/goget.go
index 9f367a9277..8a8e1797dc 100644
--- a/routers/web/goget.go
+++ b/routers/web/goget.go
@@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
+
"github.com/unknwon/com"
)
diff --git a/routers/web/repo/issue_test.go b/routers/web/repo/issue_test.go
index 6638baf34a..b8862cf43d 100644
--- a/routers/web/repo/issue_test.go
+++ b/routers/web/repo/issue_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"code.gitea.io/gitea/models"
+
"github.com/stretchr/testify/assert"
)
diff --git a/routers/web/web.go b/routers/web/web.go
index 132e649d45..f84d357bb1 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -36,8 +36,7 @@ import (
"code.gitea.io/gitea/services/lfs"
"code.gitea.io/gitea/services/mailer"
- // to registers all internal adapters
- _ "code.gitea.io/gitea/modules/session"
+ _ "code.gitea.io/gitea/modules/session" // to registers all internal adapters
"gitea.com/go-chi/captcha"
"github.com/NYTimes/gziphandler"
diff --git a/services/auth/signin.go b/services/auth/signin.go
index 5477e8643e..504214f9f1 100644
--- a/services/auth/signin.go
+++ b/services/auth/signin.go
@@ -13,8 +13,7 @@ import (
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/log"
- // Register the sources
- _ "code.gitea.io/gitea/services/auth/source/db"
+ _ "code.gitea.io/gitea/services/auth/source/db" // register the sources (and below)
_ "code.gitea.io/gitea/services/auth/source/ldap"
_ "code.gitea.io/gitea/services/auth/source/oauth2"
_ "code.gitea.io/gitea/services/auth/source/pam"
diff --git a/services/auth/source/oauth2/store.go b/services/auth/source/oauth2/store.go
index fc29056c24..4026abb6ec 100644
--- a/services/auth/source/oauth2/store.go
+++ b/services/auth/source/oauth2/store.go
@@ -10,6 +10,7 @@ import (
"net/http"
"code.gitea.io/gitea/modules/log"
+
chiSession "gitea.com/go-chi/session"
"github.com/gorilla/sessions"
)
diff --git a/services/auth/source/oauth2/token.go b/services/auth/source/oauth2/token.go
index 0c7c5d8caa..c9a45340a1 100644
--- a/services/auth/source/oauth2/token.go
+++ b/services/auth/source/oauth2/token.go
@@ -9,6 +9,7 @@ import (
"time"
"code.gitea.io/gitea/modules/timeutil"
+
"github.com/golang-jwt/jwt"
)
diff --git a/services/cron/setting.go b/services/cron/setting.go
index d55e5b60ad..a0393e23dc 100644
--- a/services/cron/setting.go
+++ b/services/cron/setting.go
@@ -8,6 +8,7 @@ import (
"time"
"code.gitea.io/gitea/models"
+
"github.com/unknwon/i18n"
)
diff --git a/services/forms/user_form_auth_openid.go b/services/forms/user_form_auth_openid.go
index b34f9dcc97..fd3368d303 100644
--- a/services/forms/user_form_auth_openid.go
+++ b/services/forms/user_form_auth_openid.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/web/middleware"
+
"gitea.com/go-chi/binding"
)
diff --git a/services/gitdiff/csv_test.go b/services/gitdiff/csv_test.go
index 4101477d89..b4f725e558 100644
--- a/services/gitdiff/csv_test.go
+++ b/services/gitdiff/csv_test.go
@@ -11,6 +11,7 @@ import (
csv_module "code.gitea.io/gitea/modules/csv"
"code.gitea.io/gitea/modules/setting"
+
"github.com/stretchr/testify/assert"
)
diff --git a/services/issue/assignee_test.go b/services/issue/assignee_test.go
index b0bbe42273..bc2721ebd4 100644
--- a/services/issue/assignee_test.go
+++ b/services/issue/assignee_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/services/issue/label_test.go b/services/issue/label_test.go
index fa6ad613b6..fdc2c4ffb6 100644
--- a/services/issue/label_test.go
+++ b/services/issue/label_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/services/repository/fork_test.go b/services/repository/fork_test.go
index 197d76b056..1280a3d84d 100644
--- a/services/repository/fork_test.go
+++ b/services/repository/fork_test.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
+
"github.com/stretchr/testify/assert"
)
diff --git a/services/webhook/deliver_test.go b/services/webhook/deliver_test.go
index cfc99d796a..551c957c8d 100644
--- a/services/webhook/deliver_test.go
+++ b/services/webhook/deliver_test.go
@@ -10,6 +10,7 @@ import (
"testing"
"code.gitea.io/gitea/modules/setting"
+
"github.com/stretchr/testify/assert"
)
diff --git a/services/webhook/webhook_test.go b/services/webhook/webhook_test.go
index 0a649d36ae..c332332787 100644
--- a/services/webhook/webhook_test.go
+++ b/services/webhook/webhook_test.go
@@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models/unittest"
webhook_model "code.gitea.io/gitea/models/webhook"
api "code.gitea.io/gitea/modules/structs"
+
"github.com/stretchr/testify/assert"
)