]> git.lizzy.rs Git - micro.git/blobdiff - internal/config/settings.go
Don't apply cli options to settings.json
[micro.git] / internal / config / settings.go
index a306389cf98b0ab8121c0fa417b71a578c2ec3ed..55aed63ed851995c72238982832be0e2110dcdf7 100644 (file)
@@ -28,9 +28,14 @@ var (
 
        // This is the raw parsed json
        parsedSettings map[string]interface{}
+
+       // ModifiedSettings is a map of settings which should be written to disk
+       // because they have been modified by the user in this session
+       ModifiedSettings map[string]bool
 )
 
 func init() {
+       ModifiedSettings = make(map[string]bool)
        parsedSettings = make(map[string]interface{})
 }
 
@@ -148,8 +153,25 @@ func InitLocalSettings(settings map[string]interface{}, path string) error {
 func WriteSettings(filename string) error {
        var err error
        if _, e := os.Stat(ConfigDir); e == nil {
+               defaults := DefaultGlobalSettings()
+
+               // remove any options froms parsedSettings that have since been marked as default
+               for k, v := range parsedSettings {
+                       if !strings.HasPrefix(reflect.TypeOf(v).String(), "map") {
+                               cur, okcur := GlobalSettings[k]
+                               if def, ok := defaults[k]; ok && okcur && reflect.DeepEqual(cur, def) {
+                                       delete(parsedSettings, k)
+                               }
+                       }
+               }
+
+               // add any options to parsedSettings that have since been marked as non-default
                for k, v := range GlobalSettings {
-                       parsedSettings[k] = v
+                       if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) {
+                               if _, wr := ModifiedSettings[k]; wr {
+                                       parsedSettings[k] = v
+                               }
+                       }
                }
 
                txt, _ := json.MarshalIndent(parsedSettings, "", "    ")
@@ -158,10 +180,23 @@ func WriteSettings(filename string) error {
        return err
 }
 
+// OverwriteSettings writes the current settings to settings.json and
+// resets any user configuration of local settings present in settings.json
 func OverwriteSettings(filename string) error {
+       settings := make(map[string]interface{})
+
        var err error
        if _, e := os.Stat(ConfigDir); e == nil {
-               txt, _ := json.MarshalIndent(GlobalSettings, "", "    ")
+               defaults := DefaultGlobalSettings()
+               for k, v := range GlobalSettings {
+                       if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) {
+                               if _, wr := ModifiedSettings[k]; wr {
+                                       settings[k] = v
+                               }
+                       }
+               }
+
+               txt, _ := json.MarshalIndent(settings, "", "    ")
                err = ioutil.WriteFile(filename, append(txt, '\n'), 0644)
        }
        return err