Skip to content

Commit 107fe18

Browse files
committed
feat: write initial doc separator when annotation present
1 parent 1bed363 commit 107fe18

3 files changed

Lines changed: 84 additions & 1 deletion

File tree

kyaml/kio/byteio_reader.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@ func (r *ByteReader) setResourceAnnotations(n *yaml.RNode, index int, originalYA
356356
r.SetAnnotations[kioutil.SeqIndentAnnotation] = seqIndentStyle
357357
}
358358
}
359-
//
360359
if index == 0 && r.PreserveInitialDocSep &&
361360
strings.HasPrefix(originalYAML, "---") {
362361
r.SetAnnotations[kioutil.InitialDocSepAnnotation] = "true"

kyaml/kio/byteio_writer.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ func (w ByteWriter) Write(inputNodes []*yaml.RNode) error {
6363
// Even though we use the this value further down we must check this before removing annotations
6464
jsonEncodeSingleBareNode := w.shouldJSONEncodeSingleBareNode(nodes)
6565

66+
// Check for InitialDocSepAnnotation on a node
67+
var retainInitialDocSep bool
68+
for i := range nodes {
69+
if len(nodes[i].GetAnnotations(kioutil.InitialDocSepAnnotation)) > 0 {
70+
retainInitialDocSep = true
71+
break
72+
}
73+
}
6674
// store seqindent annotation value for each node in order to set the encoder indentation
6775
var seqIndentsForNodes []string
6876
for i := range nodes {
@@ -85,6 +93,11 @@ func (w ByteWriter) Write(inputNodes []*yaml.RNode) error {
8593
if err != nil {
8694
return errors.Wrap(err)
8795
}
96+
97+
_, err = nodes[i].Pipe(yaml.ClearAnnotation(kioutil.InitialDocSepAnnotation))
98+
if err != nil {
99+
return errors.Wrap(err)
100+
}
88101
}
89102
for _, a := range w.ClearAnnotations {
90103
_, err := nodes[i].Pipe(yaml.ClearAnnotation(a))
@@ -108,7 +121,13 @@ func (w ByteWriter) Write(inputNodes []*yaml.RNode) error {
108121
return errors.Wrap(encoder.Encode(nodes[0]))
109122
}
110123

124+
if retainInitialDocSep {
125+
if _, err := w.Writer.Write([]byte("---\n")); err != nil {
126+
return errors.Wrap(err)
127+
}
128+
}
111129
encoder := yaml.NewEncoder(w.Writer)
130+
112131
defer encoder.Close()
113132
// don't wrap the elements
114133
if w.WrappingKind == "" {

kyaml/kio/byteio_writer_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,71 @@ metadata:
380380
`,
381381
},
382382

383+
//
384+
// Test Case
385+
//
386+
{
387+
name: "add_initial_doc_sep",
388+
instance: ByteWriter{KeepReaderAnnotations: true},
389+
items: []string{
390+
`a: b
391+
metadata:
392+
annotations:
393+
internal.config.kubernetes.io/index: 0
394+
internal.config.kubernetes.io/path: "a/b/a_test.yaml"
395+
internal.config.kubernetes.io/initial-doc-sep: "true"
396+
`,
397+
},
398+
399+
expectedOutput: `---
400+
a: b
401+
metadata:
402+
annotations:
403+
internal.config.kubernetes.io/index: 0
404+
internal.config.kubernetes.io/path: "a/b/a_test.yaml"
405+
internal.config.kubernetes.io/initial-doc-sep: "true"
406+
`,
407+
},
408+
//
409+
// Test Case
410+
//
411+
{
412+
name: "multiple_nodes_with_initial_doc_sep_annotations",
413+
instance: ByteWriter{KeepReaderAnnotations: true},
414+
items: []string{
415+
`a: b
416+
metadata:
417+
annotations:
418+
internal.config.kubernetes.io/index: 0
419+
internal.config.kubernetes.io/path: "a/b/a_test.yaml"
420+
internal.config.kubernetes.io/initial-doc-sep: "true"
421+
`,
422+
`c: d
423+
metadata:
424+
annotations:
425+
internal.config.kubernetes.io/index: 0
426+
internal.config.kubernetes.io/path: "a/b/b_test.yaml"
427+
internal.config.kubernetes.io/inital-doc-sep: "true"
428+
`,
429+
},
430+
431+
expectedOutput: `---
432+
a: b
433+
metadata:
434+
annotations:
435+
internal.config.kubernetes.io/index: 0
436+
internal.config.kubernetes.io/path: "a/b/a_test.yaml"
437+
internal.config.kubernetes.io/initial-doc-sep: "true"
438+
---
439+
c: d
440+
metadata:
441+
annotations:
442+
internal.config.kubernetes.io/index: 0
443+
internal.config.kubernetes.io/path: "a/b/b_test.yaml"
444+
internal.config.kubernetes.io/initial-doc-sep: "true"
445+
`,
446+
},
447+
383448
//
384449
// Test Case
385450
//

0 commit comments

Comments
 (0)