Fixed writeCommands to maintain the same execution as was read in

This commit is contained in:
Mike Farah 2017-04-18 15:55:43 +10:00
parent 08ba0083be
commit c2000a446b

36
yaml.go
View File

@ -140,24 +140,19 @@ func newProperty(cmd *cobra.Command, args []string) {
} }
func newYaml(args []string) interface{} { func newYaml(args []string) interface{} {
var writeCommands map[string]interface{} var writeCommands yaml.MapSlice
if writeScript != "" { if writeScript != "" {
readData(writeScript, &writeCommands, false) readData(writeScript, &writeCommands, false)
} else if len(args) < 2 { } else if len(args) < 2 {
die("Must provide <path_to_update> <value>") die("Must provide <path_to_update> <value>")
} else { } else {
writeCommands = make(map[string]interface{}) writeCommands = make(yaml.MapSlice, 1)
writeCommands[args[0]] = parseValue(args[1]) writeCommands[0] = yaml.MapItem{Key: args[0], Value: parseValue(args[1])}
} }
parsedData := make(yaml.MapSlice, 0) parsedData := make(yaml.MapSlice, 0)
for path, value := range writeCommands { return updateParsedData(parsedData, writeCommands)
var paths = parsePath(path)
parsedData = writeMap(parsedData, paths, value)
}
return parsedData
} }
func writeProperty(cmd *cobra.Command, args []string) { func writeProperty(cmd *cobra.Command, args []string) {
@ -172,26 +167,31 @@ func writeProperty(cmd *cobra.Command, args []string) {
} }
} }
func updateParsedData(parsedData yaml.MapSlice, writeCommands yaml.MapSlice) yaml.MapSlice {
for _, entry := range writeCommands {
path := entry.Key
value := entry.Value
var paths = parsePath(path.(string))
parsedData = writeMap(parsedData, paths, value)
}
return parsedData
}
func updateYaml(args []string) interface{} { func updateYaml(args []string) interface{} {
var writeCommands map[string]interface{} var writeCommands yaml.MapSlice
if writeScript != "" { if writeScript != "" {
readData(writeScript, &writeCommands, false) readData(writeScript, &writeCommands, false)
} else if len(args) < 3 { } else if len(args) < 3 {
die("Must provide <filename> <path_to_update> <value>") die("Must provide <filename> <path_to_update> <value>")
} else { } else {
writeCommands = make(map[string]interface{}) writeCommands = make(yaml.MapSlice, 1)
writeCommands[args[1]] = parseValue(args[2]) writeCommands[0] = yaml.MapItem{Key: args[1], Value: parseValue(args[2])}
} }
var parsedData yaml.MapSlice var parsedData yaml.MapSlice
readData(args[0], &parsedData, inputJSON) readData(args[0], &parsedData, inputJSON)
for path, value := range writeCommands { return updateParsedData(parsedData, writeCommands)
var paths = parsePath(path)
parsedData = writeMap(parsedData, paths, value)
}
return parsedData
} }
func parseValue(argument string) interface{} { func parseValue(argument string) interface{} {