Fix `make fmt` and `make fmt-check` (#18633)

* Run 'make fmt'

'make fmt' currently produces this change, I'm not sure how CI did not
fail on it, I made sure I have `mvdan.cc/gofumpt@latest`.

* Fix 'make fmt-check'

`make fmt-check` did not run all commands that `make fmt` did, resulting
in missed diffs. Fix that by just depending on the `fmt` target.

Includes: https://github.com/go-gitea/gitea/pull/18633

* Make gitea-fmt work with -l and -d and integrate gofumpt

This implements -l, -w and -d with gitea-fmt and merges gofumpt.

Signed-off-by: Andrew Thornton <art27@cantab.net>

* as per silverwind

Signed-off-by: Andrew Thornton <art27@cantab.net>

* Apply suggestions from code review

* use -l instead of -d for fmt-check

Signed-off-by: Andrew Thornton <art27@cantab.net>

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
silverwind 2022-02-06 07:44:30 -08:00 committed by GitHub
parent 7b6c1f809f
commit 37ead26e36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 15 deletions

View File

@ -231,13 +231,11 @@ clean:
.PHONY: fmt .PHONY: fmt
fmt: fmt:
@echo "Running gitea-fmt(with gofmt)..."
@$(GO) run build/code-batch-process.go gitea-fmt -s -w '{file-list}'
@echo "Running gofumpt"
@hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ @hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
$(GO) install mvdan.cc/gofumpt@latest; \ $(GO) install mvdan.cc/gofumpt@latest; \
fi fi
@gofumpt -w -l -extra -lang 1.16 . @echo "Running gitea-fmt (with gofumpt)..."
@$(GO) run build/code-batch-process.go gitea-fmt -w '{file-list}'
.PHONY: vet .PHONY: vet
vet: vet:
@ -285,8 +283,11 @@ errcheck:
.PHONY: fmt-check .PHONY: fmt-check
fmt-check: fmt-check:
@hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
$(GO) install mvdan.cc/gofumpt@latest; \
fi
# get all go files and run gitea-fmt (with gofmt) on them # get all go files and run gitea-fmt (with gofmt) on them
@diff=$$($(GO) run build/code-batch-process.go gitea-fmt -s -d '{file-list}'); \ @diff=$$($(GO) run build/code-batch-process.go gitea-fmt -l '{file-list}'); \
if [ -n "$$diff" ]; then \ if [ -n "$$diff" ]; then \
echo "Please run 'make fmt' and commit the result:"; \ echo "Please run 'make fmt' and commit the result:"; \
echo "$${diff}"; \ echo "$${diff}"; \

View File

@ -229,9 +229,9 @@ func containsString(a []string, s string) bool {
return false return false
} }
func giteaFormatGoImports(files []string) error { func giteaFormatGoImports(files []string, hasChangedFiles, doWriteFile bool) error {
for _, file := range files { for _, file := range files {
if err := codeformat.FormatGoImports(file); err != nil { if err := codeformat.FormatGoImports(file, hasChangedFiles, doWriteFile); err != nil {
log.Printf("failed to format go imports: %s, err=%v", file, err) log.Printf("failed to format go imports: %s, err=%v", file, err)
return err return err
} }
@ -267,10 +267,11 @@ func main() {
logVerbose("batch cmd: %s %v", subCmd, substArgs) logVerbose("batch cmd: %s %v", subCmd, substArgs)
switch subCmd { switch subCmd {
case "gitea-fmt": case "gitea-fmt":
if containsString(subArgs, "-w") { if containsString(subArgs, "-d") {
cmdErrors = append(cmdErrors, giteaFormatGoImports(files)) log.Print("the -d option is not supported by gitea-fmt")
} }
cmdErrors = append(cmdErrors, passThroughCmd("gofmt", substArgs)) cmdErrors = append(cmdErrors, giteaFormatGoImports(files, containsString(subArgs, "-l"), containsString(subArgs, "-w")))
cmdErrors = append(cmdErrors, passThroughCmd("gofumpt", append([]string{"-extra", "-lang", "1.16"}, substArgs...)))
case "misspell": case "misspell":
cmdErrors = append(cmdErrors, passThroughCmd("misspell", substArgs)) cmdErrors = append(cmdErrors, passThroughCmd("misspell", substArgs))
default: default:

View File

@ -7,6 +7,7 @@ package codeformat
import ( import (
"bytes" "bytes"
"errors" "errors"
"fmt"
"io" "io"
"os" "os"
"sort" "sort"
@ -158,7 +159,7 @@ func formatGoImports(contentBytes []byte) ([]byte, error) {
} }
// FormatGoImports format the imports by our rules (see unit tests) // FormatGoImports format the imports by our rules (see unit tests)
func FormatGoImports(file string) error { func FormatGoImports(file string, doChangedFiles, doWriteFile bool) error {
f, err := os.Open(file) f, err := os.Open(file)
if err != nil { if err != nil {
return err return err
@ -181,11 +182,20 @@ func FormatGoImports(file string) error {
if bytes.Equal(contentBytes, formattedBytes) { if bytes.Equal(contentBytes, formattedBytes) {
return nil return nil
} }
f, err = os.OpenFile(file, os.O_TRUNC|os.O_WRONLY, 0o644)
if err != nil { if doChangedFiles {
fmt.Println(file)
}
if doWriteFile {
f, err = os.OpenFile(file, os.O_TRUNC|os.O_WRONLY, 0o644)
if err != nil {
return err
}
defer f.Close()
_, err = f.Write(formattedBytes)
return err return err
} }
defer f.Close()
_, err = f.Write(formattedBytes)
return err return err
} }

View File

@ -17,6 +17,7 @@ import (
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )