From 218f27c9c10712c24acf632a8c6294698e20e348 Mon Sep 17 00:00:00 2001 From: Loyalsoldier <10487845+Loyalsoldier@users.noreply.github.com> Date: Tue, 11 May 2021 09:05:43 +0800 Subject: [PATCH] Feat: vformat supports multi-core processing (#996) --- infra/vformat/main.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/infra/vformat/main.go b/infra/vformat/main.go index 323173a29..0ac4ce4bf 100644 --- a/infra/vformat/main.go +++ b/infra/vformat/main.go @@ -77,31 +77,31 @@ func GetGOBIN() string { return GOBIN } -func Run(binary string, args []string) (string, error) { +func Run(binary string, args []string) ([]byte, error) { cmd := exec.Command(binary, args...) cmd.Env = append(cmd.Env, os.Environ()...) output, cmdErr := cmd.CombinedOutput() if cmdErr != nil { - return "", cmdErr + return nil, cmdErr } - if len(output) > 0 { - return string(output), nil - } - return "", nil + return output, nil } func RunMany(binary string, args, files []string) { fmt.Println("Processing...") + + maxTasks := make(chan struct{}, runtime.NumCPU()) for _, file := range files { - args := append(args, file) - output, err := Run(binary, args) - if err != nil { - fmt.Println(err) - continue - } - if len(output) > 0 { - fmt.Println(output) - } + maxTasks <- struct{}{} + go func(file string) { + output, err := Run(binary, append(args, file)) + if err != nil { + fmt.Println(err) + } else if len(output) > 0 { + fmt.Println(string(output)) + } + <-maxTasks + }(file) } } @@ -139,7 +139,7 @@ func main() { goimports = goimportsPath } - rawFilesSlice := make([]string, 0) + rawFilesSlice := make([]string, 0, 1000) walkErr := filepath.Walk("./", func(path string, info os.FileInfo, err error) error { if err != nil { fmt.Println(err)