From 9f43a4a2652482cb0cd9512f4464aebb944a7d83 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Tue, 8 Sep 2020 09:46:04 +1000 Subject: [PATCH] Keep comments when using the write commandt o update values --- cmd/utils.go | 3 ++- cmd/write_test.go | 18 ++++++++++++++++++ pkg/yqlib/lib.go | 1 + pkg/yqlib/update_navigation_strategy.go | 8 +++++--- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/cmd/utils.go b/cmd/utils.go index b48a00f3..8696a30b 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -511,7 +511,8 @@ func readUpdateCommands(args []string, expectedArgs int, badArgsMessage string) log.Debug("args %v", args) log.Debug("path %v", args[expectedArgs-2]) log.Debug("Value %v", args[expectedArgs-1]) - updateCommands[0] = yqlib.UpdateCommand{Command: "update", Path: args[expectedArgs-2], Value: valueParser.Parse(args[expectedArgs-1], customTag, customStyle, anchorName, makeAlias), Overwrite: true} + value := valueParser.Parse(args[expectedArgs-1], customTag, customStyle, anchorName, makeAlias) + updateCommands[0] = yqlib.UpdateCommand{Command: "update", Path: args[expectedArgs-2], Value: value, Overwrite: true, DontUpdateComments: true} } else if len(args) == expectedArgs-1 { // don't update the value updateCommands = make([]yqlib.UpdateCommand, 1) diff --git a/cmd/write_test.go b/cmd/write_test.go index f653ca3a..8249a890 100644 --- a/cmd/write_test.go +++ b/cmd/write_test.go @@ -27,6 +27,24 @@ func TestWriteCmd(t *testing.T) { test.AssertResult(t, expectedOutput, result.Output) } +func TestWriteKeepCommentsCmd(t *testing.T) { + content := `b: + c: 3 # comment +` + filename := test.WriteTempYamlFile(content) + defer test.RemoveTempYamlFile(filename) + + cmd := getRootCommand() + result := test.RunCmd(cmd, fmt.Sprintf("write %s b.c 7", filename)) + if result.Error != nil { + t.Error(result.Error) + } + expectedOutput := `b: + c: 7 # comment +` + test.AssertResult(t, expectedOutput, result.Output) +} + func TestWriteWithTaggedStyleCmd(t *testing.T) { content := `b: c: dog diff --git a/pkg/yqlib/lib.go b/pkg/yqlib/lib.go index 90682186..60d99fb7 100644 --- a/pkg/yqlib/lib.go +++ b/pkg/yqlib/lib.go @@ -18,6 +18,7 @@ type UpdateCommand struct { Value *yaml.Node Overwrite bool DontUpdateNodeValue bool + DontUpdateComments bool } func KindString(kind yaml.Kind) string { diff --git a/pkg/yqlib/update_navigation_strategy.go b/pkg/yqlib/update_navigation_strategy.go index bfb376e6..4721a26a 100644 --- a/pkg/yqlib/update_navigation_strategy.go +++ b/pkg/yqlib/update_navigation_strategy.go @@ -27,9 +27,11 @@ func UpdateNavigationStrategy(updateCommand UpdateCommand, autoCreate bool) Navi node.Content = changesToApply.Content node.Anchor = changesToApply.Anchor node.Alias = changesToApply.Alias - node.HeadComment = changesToApply.HeadComment - node.LineComment = changesToApply.LineComment - node.FootComment = changesToApply.FootComment + if !updateCommand.DontUpdateComments { + node.HeadComment = changesToApply.HeadComment + node.LineComment = changesToApply.LineComment + node.FootComment = changesToApply.FootComment + } } else { log.Debug("skipping update as node already has value %v and overwriteFlag is ", node.Value, updateCommand.Overwrite) }