github.com/jgarto/itcv@v0.0.0-20180826224514-4eea09c1aa0d/cmd/stateGen/state_gen.go (about)

     1  /*
     2  
     3  stateGen is a go generate generator that helps to automate the process of
     4  creating state trees for use in GopherJS React web applications.
     5  
     6  For more information see https://github.com/myitcv/react/wiki
     7  
     8  */
     9  package main // import "myitcv.io/react/cmd/stateGen"
    10  
    11  import (
    12  	"flag"
    13  	"fmt"
    14  	"log"
    15  	"os"
    16  
    17  	"myitcv.io/gogenerate"
    18  )
    19  
    20  const (
    21  	stateGenCmd = "stateGen"
    22  )
    23  
    24  var (
    25  	fLicenseFile = gogenerate.LicenseFileFlag()
    26  	fGoGenLog    = gogenerate.LogFlag()
    27  )
    28  
    29  func main() {
    30  	log.SetFlags(0)
    31  	log.SetPrefix(stateGenCmd + ": ")
    32  
    33  	flag.Parse()
    34  
    35  	gogenerate.DefaultLogLevel(fGoGenLog, gogenerate.LogFatal)
    36  
    37  	envFile, ok := os.LookupEnv(gogenerate.GOFILE)
    38  	if !ok {
    39  		fatalf("env not correct; missing %v", gogenerate.GOFILE)
    40  	}
    41  
    42  	wd, err := os.Getwd()
    43  	if err != nil {
    44  		fatalf("unable to get working directory: %v", err)
    45  	}
    46  
    47  	dirFiles, err := gogenerate.FilesContainingCmd(wd, stateGenCmd)
    48  	if err != nil {
    49  		fatalf("could not determine if we are the first file: %v", err)
    50  	}
    51  
    52  	if dirFiles == nil {
    53  		fatalf("cannot find any files containing the %v directive", stateGenCmd)
    54  	}
    55  
    56  	if dirFiles[envFile] != 1 {
    57  		fatalf("expected a single occurrence of %v directive in %v. Got: %v", stateGenCmd, envFile, dirFiles)
    58  	}
    59  
    60  	license, err := gogenerate.CommentLicenseHeader(fLicenseFile)
    61  	if err != nil {
    62  		fatalf("could not comment license file: %v", err)
    63  	}
    64  
    65  	// if we get here, we know we are the first file...
    66  
    67  	dogen(os.Stderr, wd, license)
    68  }
    69  
    70  func fatalf(format string, args ...interface{}) {
    71  	panic(fmt.Errorf(format, args...))
    72  }
    73  
    74  func infof(format string, args ...interface{}) {
    75  	if *fGoGenLog == string(gogenerate.LogInfo) {
    76  		log.Printf(format, args...)
    77  	}
    78  }