on main help sign in
fix: sync
4509fe7Carlos Alexandro Becker
internal/config/init.go+13−21
@@ -5,40 +5,32 @@ import (
5 "os"
5 "os"
6 "path/filepath"
6 "path/filepath"
7 "strings"
7 "strings"
8− "sync"
8+ "sync/atomic"
9)
9)
10
10
11+const (
11−const InitFlagFilename = "init"
12+ InitFlagFilename = "init"
13+)
12
14
13type ProjectInitFlag struct {
15type ProjectInitFlag struct {
14 Initialized bool `json:"initialized"`
16 Initialized bool `json:"initialized"`
15}
17}
16
18
17// TODO: we need to remove the global config instance keeping it now just until everything is migrated
19// TODO: we need to remove the global config instance keeping it now just until everything is migrated
18−var (
19− instance *Config
20+var instance atomic.Pointer[Config]
20− cwd string
21− once sync.Once
22− wg sync.WaitGroup
23−)
24
21
25func Init(workingDir string, debug bool) (*Config, error) {
22func Init(workingDir string, debug bool) (*Config, error) {
26− var err error
27− wg.Add(1)
28− once.Do(func() {
29− cwd = workingDir
23+ cfg, err := Load(workingDir, debug)
30− var cfg *Config
24+ if err != nil {
31− cfg, err = Load(cwd, debug)
25+ return nil, err
32− instance = cfg
33− wg.Done()
34− })
26+ }
35−
27+ instance.Store(cfg)
36− return instance, err
28+ return instance.Load(), nil
37}
29}
38
30
39func Get() *Config {
31func Get() *Config {
40− wg.Wait()
32+ cfg := instance.Load()
41− return instance
33+ return cfg
42}
34}
43
35
44func ProjectNeedsInitialization() (bool, error) {
36func ProjectNeedsInitialization() (bool, error) {