From 37ead26e36073342edd1c36fa7cd3503297d2ce9 Mon Sep 17 00:00:00 2001 From: silverwind Date: Sun, 6 Feb 2022 07:44:30 -0800 Subject: [PATCH] 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 * as per silverwind Signed-off-by: Andrew Thornton * Apply suggestions from code review * use -l instead of -d for fmt-check Signed-off-by: Andrew Thornton Co-authored-by: Lunny Xiao Co-authored-by: Andrew Thornton --- Makefile | 11 ++++++----- build/code-batch-process.go | 11 ++++++----- build/codeformat/formatimports.go | 20 +++++++++++++++----- services/mailer/mail_test.go | 1 + 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 88e08c1e7..e3c948e33 100644 --- a/Makefile +++ b/Makefile @@ -231,13 +231,11 @@ clean: .PHONY: 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 \ $(GO) install mvdan.cc/gofumpt@latest; \ 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 vet: @@ -285,8 +283,11 @@ errcheck: .PHONY: 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 - @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 \ 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 index 02f54b9c0..8139fe762 100644 --- a/build/code-batch-process.go +++ b/build/code-batch-process.go @@ -229,9 +229,9 @@ func containsString(a []string, s string) bool { return false } -func giteaFormatGoImports(files []string) error { +func giteaFormatGoImports(files []string, hasChangedFiles, doWriteFile bool) error { 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) return err } @@ -267,10 +267,11 @@ func main() { logVerbose("batch cmd: %s %v", subCmd, substArgs) switch subCmd { case "gitea-fmt": - if containsString(subArgs, "-w") { - cmdErrors = append(cmdErrors, giteaFormatGoImports(files)) + if containsString(subArgs, "-d") { + 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": cmdErrors = append(cmdErrors, passThroughCmd("misspell", substArgs)) default: diff --git a/build/codeformat/formatimports.go b/build/codeformat/formatimports.go index fedc5cc09..5d051b272 100644 --- a/build/codeformat/formatimports.go +++ b/build/codeformat/formatimports.go @@ -7,6 +7,7 @@ package codeformat import ( "bytes" "errors" + "fmt" "io" "os" "sort" @@ -158,7 +159,7 @@ func formatGoImports(contentBytes []byte) ([]byte, error) { } // 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) if err != nil { return err @@ -181,11 +182,20 @@ func FormatGoImports(file string) error { if bytes.Equal(contentBytes, formattedBytes) { 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 } - defer f.Close() - _, err = f.Write(formattedBytes) + return err } diff --git a/services/mailer/mail_test.go b/services/mailer/mail_test.go index 6c800e457..ba82fc6ff 100644 --- a/services/mailer/mail_test.go +++ b/services/mailer/mail_test.go @@ -17,6 +17,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" + "github.com/stretchr/testify/assert" )