in config/config.go [230:297]
func saveConfig(cfg *Config) *Config {
if _, err := os.Stat(cfg.Dir); err != nil {
os.Mkdir(cfg.Dir, 0700)
}
// Save on missing config
if _, err := os.Stat(cfg.ConfigFile); err != nil {
defaultCoreConfig := defaultCoreConfig()
defaultProfile := defaultProfile()
conf := ini.Empty()
conf.Section(ini.DEFAULT_SECTION).ReflectFrom(&defaultCoreConfig)
conf.Section(defaultCoreConfig.ProfileName).ReflectFrom(&defaultProfile)
conf.SaveTo(cfg.ConfigFile)
}
conf := readConfig(cfg)
core, err := conf.GetSection(ini.DEFAULT_SECTION)
if core == nil || err != nil {
defaultCore := defaultCoreConfig()
section, _ := conf.NewSection(ini.DEFAULT_SECTION)
section.ReflectFrom(&defaultCore)
cfg.Core = &defaultCore
} else {
// Write
if cfg.Core != nil {
conf.Section(ini.DEFAULT_SECTION).ReflectFrom(&cfg.Core)
}
// Update
core := new(Core)
conf.Section(ini.DEFAULT_SECTION).MapTo(core)
if !conf.Section(ini.DEFAULT_SECTION).HasKey("autocomplete") {
core.AutoComplete = true
core.Output = JSON
}
cfg.Core = core
}
profile, err := conf.GetSection(cfg.Core.ProfileName)
if profile == nil {
activeProfile := defaultProfile()
section, _ := conf.NewSection(cfg.Core.ProfileName)
section.ReflectFrom(&activeProfile)
setActiveProfile(cfg, &activeProfile)
} else {
// Write
if cfg.ActiveProfile != nil {
conf.Section(cfg.Core.ProfileName).ReflectFrom(&cfg.ActiveProfile)
}
// Update
profile := new(ServerProfile)
conf.Section(cfg.Core.ProfileName).MapTo(profile)
setActiveProfile(cfg, profile)
}
// Save
conf.SaveTo(cfg.ConfigFile)
// Update available profiles list
profiles = []string{}
for _, profile := range conf.Sections() {
if profile.Name() == ini.DEFAULT_SECTION {
continue
}
profiles = append(profiles, profile.Name())
}
return cfg
}