mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-07 03:57:29 +08:00
fix
This commit is contained in:
@@ -305,63 +305,20 @@ func ensureConfigOnboard(configPath string, defaults *config.Config) (string, er
|
|||||||
return "", fmt.Errorf("defaults is nil")
|
return "", fmt.Errorf("defaults is nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exists := true
|
||||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
||||||
if err := config.SaveConfig(configPath, defaults); err != nil {
|
exists = false
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return "created", nil
|
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultData, err := json.Marshal(defaults)
|
if err := config.SaveConfig(configPath, defaults); err != nil {
|
||||||
if err != nil {
|
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
var defaultMap map[string]interface{}
|
if exists {
|
||||||
if err := json.Unmarshal(defaultData, &defaultMap); err != nil {
|
return "overwritten", nil
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
|
return "created", nil
|
||||||
existingMap, err := configops.LoadConfigAsMap(configPath)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
changed := mergeMissingConfigValues(existingMap, defaultMap)
|
|
||||||
if !changed {
|
|
||||||
return "up-to-date", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
mergedData, err := json.MarshalIndent(existingMap, "", " ")
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if _, err := configops.WriteConfigAtomicWithBackup(configPath, mergedData); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return "updated (incremental)", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeMissingConfigValues(dst map[string]interface{}, defaults map[string]interface{}) bool {
|
|
||||||
changed := false
|
|
||||||
for key, dv := range defaults {
|
|
||||||
existing, ok := dst[key]
|
|
||||||
if !ok {
|
|
||||||
dst[key] = dv
|
|
||||||
changed = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
dm, dIsMap := dv.(map[string]interface{})
|
|
||||||
em, eIsMap := existing.(map[string]interface{})
|
|
||||||
if dIsMap && eIsMap {
|
|
||||||
if mergeMissingConfigValues(em, dm) {
|
|
||||||
changed = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return changed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createWorkspaceTemplates(workspace string) error {
|
func createWorkspaceTemplates(workspace string) error {
|
||||||
|
|||||||
Reference in New Issue
Block a user