github.com/inturn/pre-commit-gobuild@v1.0.12/hooks/go-goimports/go-goimports.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"log"
     7  	"os"
     8  	"os/exec"
     9  	"strings"
    10  	"sync"
    11  
    12  	"github.com/inturn/pre-commit-gobuild/internal/helpers"
    13  )
    14  
    15  func main() {
    16  	workDir, err := os.Getwd()
    17  	if err != nil {
    18  		log.Fatal(err)
    19  	}
    20  	dirs := helpers.DirsWith(workDir, "\\.go$")
    21  
    22  	wg := &sync.WaitGroup{}
    23  
    24  	for _, dir := range dirs {
    25  		wg.Add(1)
    26  		go func(d, wd string) {
    27  			defer wg.Done()
    28  			if !strings.Contains(d, "/vendor/") {
    29  				files, err := ioutil.ReadDir(d)
    30  				if err != nil {
    31  					log.Printf("error occured on read dir %s: %s", d, err)
    32  				}
    33  				for _, f := range files {
    34  					if !strings.HasSuffix(f.Name(), ".go") {
    35  						continue
    36  					}
    37  					cmd := exec.Command("goimports", "-w", "-l", fmt.Sprintf("%s/%s", d, f.Name()))
    38  					if _, err := cmd.Output(); err != nil {
    39  						log.Printf("error occured on goimports execute: %s\n", err)
    40  					}
    41  				}
    42  			}
    43  		}(dir, workDir)
    44  	}
    45  	wg.Wait()
    46  }