diff --git a/init.go b/init.go index d0f8f03..6e11710 100644 --- a/init.go +++ b/init.go @@ -23,9 +23,6 @@ func Default(opts ...OptionFunc) *Engine { } */ -// todo: use initOnce -// cache.go has Do() -// f.initOnce.Do(f.initWork) func Init() *Forge { f := InitPB() @@ -162,25 +159,27 @@ func (f *Forge) RawInitPB() { // try to NOT use the ENV settings anywhere but here // all initial ENV settings should be stored in the forge struct func (f *Forge) setenv() { - if err := fhelp.ConfigureENV(); err != nil { - log.Info("forge ConfigureENV() failed", err) - os.Exit(-1) - } - f.configDir = os.Getenv("FORGE_CONFIG") - f.goSrc = os.Getenv("FORGE_GOSRC") - f.repoPB = os.Getenv("FORGE_REPOPB") - f.forgeURL = os.Getenv("FORGE_URL") - f.patchDir = os.Getenv("FORGE_PATCHDIR") - if os.Getenv("FORGE_GOWORK") == "true" { - f.goWork = true - } - log.Printf("FORGE_CONFIG = %s\n", f.configDir) - log.Printf("FORGE_GOSRC = %s\n", f.goSrc) - log.Printf("FORGE_GOWORK = %v\n", f.goWork) - log.Printf("FORGE_REPOPB = %s\n", f.repoPB) - log.Printf("FORGE_URL = %s\n", f.forgeURL) - log.Printf("FORGE_PATCHDIR = %s\n", f.patchDir) - log.Printf("HOSTNAME = %s\n", os.Getenv("HOSTNAME")) + f.once.Do(func() { + if err := fhelp.ConfigureENV(); err != nil { + log.Info("forge ConfigureENV() failed", err) + os.Exit(-1) + } + f.configDir = os.Getenv("FORGE_CONFIG") + f.goSrc = os.Getenv("FORGE_GOSRC") + f.repoPB = os.Getenv("FORGE_REPOPB") + f.forgeURL = os.Getenv("FORGE_URL") + f.patchDir = os.Getenv("FORGE_PATCHDIR") + if os.Getenv("FORGE_GOWORK") == "true" { + f.goWork = true + } + log.Printf("FORGE_CONFIG = %s\n", f.configDir) + log.Printf("FORGE_GOSRC = %s\n", f.goSrc) + log.Printf("FORGE_GOWORK = %v\n", f.goWork) + log.Printf("FORGE_REPOPB = %s\n", f.repoPB) + log.Printf("FORGE_URL = %s\n", f.forgeURL) + log.Printf("FORGE_PATCHDIR = %s\n", f.patchDir) + log.Printf("HOSTNAME = %s\n", os.Getenv("HOSTNAME")) + }) } func (f *Forge) GetForgeURL() string { diff --git a/structs.go b/structs.go index 561bf8f..97e088d 100644 --- a/structs.go +++ b/structs.go @@ -10,7 +10,7 @@ import ( // maybe an interface someday? type Forge struct { // one-time initialized data - initOnce sync.Once + once sync.Once initErr error // init error, if any goSrc string // the path to go/src repoPB string // the path to the repos.pb cache file