package config import ( "os" "path/filepath" "sync" ) type Config struct { ListenAddr string DataDir string DBPath string ReposDir string } var instance *Config var initOnce sync.Once func Get() *Config { initOnce.Do(func() { instance = &Config{ ListenAddr: ":9000", DataDir: "./data", } }) return instance } func (c *Config) SetDataDir(dir string) { c.DataDir = dir c.DBPath = filepath.Join(dir, "gitm.db") c.ReposDir = filepath.Join(dir, "repos") } func (c *Config) EnsureDirs() error { if err := os.MkdirAll(c.DataDir, 0755); err != nil { return err } return os.MkdirAll(c.ReposDir, 0755) }