add show comment features.

This commit is contained in:
liupeidong 2018-10-19 15:29:06 +08:00
parent 7a6689eb40
commit b3aad24733
2 changed files with 23 additions and 1 deletions

View File

@ -7,6 +7,19 @@ import (
yaml "gopkg.in/mikefarah/yaml.v2" yaml "gopkg.in/mikefarah/yaml.v2"
) )
func getRealIndex(array []interface{}, index int64) int64 {
for i, value := range array {
switch value.(type) {
case yaml.Comment:
index++
}
if int64(i) == index {
break
}
}
return index
}
func entryInSlice(context yaml.MapSlice, key interface{}) *yaml.MapItem { func entryInSlice(context yaml.MapSlice, key interface{}) *yaml.MapItem {
for idx := range context { for idx := range context {
var entry = &context[idx] var entry = &context[idx]
@ -99,6 +112,7 @@ func writeArray(context interface{}, paths []string, value interface{}) []interf
index, _ = strconv.ParseInt(rawIndex, 10, 64) // nolint index, _ = strconv.ParseInt(rawIndex, 10, 64) // nolint
// writeArray is only called by updatedChildValue which handles parsing the // writeArray is only called by updatedChildValue which handles parsing the
// index, as such this renders this dead code. // index, as such this renders this dead code.
index = getRealIndex(array, index)
} }
for index >= int64(len(array)) { for index >= int64(len(array)) {
@ -164,6 +178,7 @@ func recurse(value interface{}, head string, tail []string) (interface{}, error)
} }
func readArray(array []interface{}, head int64, tail []string) (interface{}, error) { func readArray(array []interface{}, head int64, tail []string) (interface{}, error) {
head = getRealIndex(array, head)
if head >= int64(len(array)) { if head >= int64(len(array)) {
return nil, nil return nil, nil
} }
@ -249,6 +264,7 @@ func deleteArray(context interface{}, paths []string, index int64) interface{} {
return context return context
} }
index = getRealIndex(array, index)
if index >= int64(len(array)) { if index >= int64(len(array)) {
return array return array
} }

8
yq.go
View File

@ -25,6 +25,7 @@ var overwriteFlag = false
var appendFlag = false var appendFlag = false
var verbose = false var verbose = false
var version = false var version = false
var commentEnable = false
var docIndex = "0" var docIndex = "0"
var log = logging.MustGetLogger("yq") var log = logging.MustGetLogger("yq")
@ -99,6 +100,7 @@ yq r things.yaml a.array[*].blah
} }
cmdRead.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)") cmdRead.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)")
cmdRead.PersistentFlags().BoolVarP(&outputToJSON, "tojson", "j", false, "output as json") cmdRead.PersistentFlags().BoolVarP(&outputToJSON, "tojson", "j", false, "output as json")
cmdRead.Flags().BoolVarP(&commentEnable, "comment", "C", false, "Load comment enable.")
return cmdRead return cmdRead
} }
@ -134,6 +136,7 @@ a.b.e:
cmdWrite.PersistentFlags().BoolVarP(&writeInplace, "inplace", "i", false, "update the yaml file inplace") cmdWrite.PersistentFlags().BoolVarP(&writeInplace, "inplace", "i", false, "update the yaml file inplace")
cmdWrite.PersistentFlags().StringVarP(&writeScript, "script", "s", "", "yaml script for updating yaml") cmdWrite.PersistentFlags().StringVarP(&writeScript, "script", "s", "", "yaml script for updating yaml")
cmdWrite.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)") cmdWrite.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)")
cmdWrite.Flags().BoolVarP(&commentEnable, "comment", "C", false, "Load comment enable.")
return cmdWrite return cmdWrite
} }
@ -155,6 +158,7 @@ Outputs to STDOUT unless the inplace flag is used, in which case the file is upd
} }
cmdDelete.PersistentFlags().BoolVarP(&writeInplace, "inplace", "i", false, "update the yaml file inplace") cmdDelete.PersistentFlags().BoolVarP(&writeInplace, "inplace", "i", false, "update the yaml file inplace")
cmdDelete.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)") cmdDelete.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)")
cmdDelete.Flags().BoolVarP(&commentEnable, "comment", "C", false, "Load comment enable.")
return cmdDelete return cmdDelete
} }
@ -223,6 +227,7 @@ func readProperty(cmd *cobra.Command, args []string) error {
if errorParsingDocIndex != nil { if errorParsingDocIndex != nil {
return errorParsingDocIndex return errorParsingDocIndex
} }
yaml.DefaultCommentsEnable = commentEnable
var mappedDocs []interface{} var mappedDocs []interface{}
var dataBucket interface{} var dataBucket interface{}
var currentIndex = 0 var currentIndex = 0
@ -377,6 +382,7 @@ func writeProperty(cmd *cobra.Command, args []string) error {
if errorParsingDocIndex != nil { if errorParsingDocIndex != nil {
return errorParsingDocIndex return errorParsingDocIndex
} }
yaml.DefaultCommentsEnable = commentEnable
var updateData = func(dataBucket interface{}, currentIndex int) (interface{}, error) { var updateData = func(dataBucket interface{}, currentIndex int) (interface{}, error) {
if updateAll || currentIndex == docIndexInt { if updateAll || currentIndex == docIndexInt {
@ -429,7 +435,7 @@ func deleteProperty(cmd *cobra.Command, args []string) error {
if errorParsingDocIndex != nil { if errorParsingDocIndex != nil {
return errorParsingDocIndex return errorParsingDocIndex
} }
yaml.DefaultCommentsEnable = commentEnable
var updateData = func(dataBucket interface{}, currentIndex int) (interface{}, error) { var updateData = func(dataBucket interface{}, currentIndex int) (interface{}, error) {
if updateAll || currentIndex == docIndexInt { if updateAll || currentIndex == docIndexInt {
log.Debugf("Deleting path in doc %v", currentIndex) log.Debugf("Deleting path in doc %v", currentIndex)