fix(repo/config) validate against struct before writing to disk
When setting config keys, the program doesn't know whether the key-to-be-modified exists on the Config struct. (Perhaps, with reflection, it is possible to find the field). To allow callers to write non-existent keys, the program would... Before: 1) converts the in-memory *Config to a map 2) sets the key on the map, and 3) writes this map to disk. 4) Then, it converts this map back into an in-memory struct. This commit swaps 3 and 4 so the map can be validated against the struct before being written to disk. This prevents the bug identified in #740.
Brian Tiger Chow committed
Feb 3, 2015 at 16:52 UTC
d1da1d40c218d9953a304f3f599ee274e3919d5e
1 file changed
+3
-5
repo/fsrepo/component/config.go
+3
-5
@@ -93,15 +93,13 @@ func (c *ConfigComponent) SetConfigKey(key string, value interface{}) error {
93
if err := common.MapSetKV(mapconf, key, value); err != nil {
94
return err
95
}
96
- if err := serialize.WriteConfigFile(filename, mapconf); err != nil {
97
- return err
98
- }
99
- // in order to get the updated values, read updated config from the
100
- // file-system.
96
conf, err := config.FromMap(mapconf)
97
if err != nil {
98
return err
99
}
100
+ if err := serialize.WriteConfigFile(filename, mapconf); err != nil {
101
+ return err
102
+ }
103
return c.setConfigUnsynced(conf) // TODO roll this into this method
104
}
105