Merge pull request #2350 from pwittrock/comments

fix copy comments to include document comments
This commit is contained in:
Kubernetes Prow Robot
2020-04-08 10:53:44 -07:00
committed by GitHub
2 changed files with 72 additions and 6 deletions

View File

@@ -11,6 +11,7 @@ import (
// CopyComments recursively copies the comments on fields in from to fields in to
func CopyComments(from, to *yaml.RNode) error {
copy(from, to)
// walk the fields copying comments
_, err := walk.Walker{
Sources: []*yaml.RNode{from, to},
@@ -44,13 +45,13 @@ func copy(from, to *yaml.RNode) {
if from == nil || to == nil {
return
}
if from.YNode().LineComment != "" {
to.YNode().LineComment = from.YNode().LineComment
if from.Document().LineComment != "" {
to.Document().LineComment = from.Document().LineComment
}
if from.YNode().HeadComment != "" {
to.YNode().HeadComment = from.YNode().HeadComment
if from.Document().HeadComment != "" {
to.Document().HeadComment = from.Document().HeadComment
}
if from.YNode().FootComment != "" {
to.YNode().FootComment = from.YNode().FootComment
if from.Document().FootComment != "" {
to.Document().FootComment = from.Document().FootComment
}
}

View File

@@ -0,0 +1,65 @@
// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package comments
import (
"testing"
"github.com/stretchr/testify/assert"
"sigs.k8s.io/kustomize/kyaml/yaml"
)
func TestCopyComments(t *testing.T) {
from, err := yaml.Parse(`# A
#
# B
# C
apiVersion: apps/v1
kind: Deployment
spec: # comment 1
# comment 2
replicas: 3 # comment 3
# comment 4
`)
if !assert.NoError(t, err) {
t.FailNow()
}
to, err := yaml.Parse(`apiVersion: apps/v1
kind: Deployment
spec:
replicas: 4
`)
if !assert.NoError(t, err) {
t.FailNow()
}
err = CopyComments(from, to)
if !assert.NoError(t, err) {
t.FailNow()
}
actual, err := to.String()
if !assert.NoError(t, err) {
t.FailNow()
}
expected := `# A
#
# B
# C
apiVersion: apps/v1
kind: Deployment
spec: # comment 1
# comment 2
replicas: 4 # comment 3
# comment 4
`
if !assert.Equal(t, expected, actual) {
t.FailNow()
}
}