Fix patch YAML without new line on end of file
This commit is contained in:
@@ -109,6 +109,13 @@ func AddOrReplace(src []byte, key string, value any, nodeParent *yaml.Node) ([]b
|
|||||||
i0 := LineOffset(src, nodeKey.Line)
|
i0 := LineOffset(src, nodeKey.Line)
|
||||||
i1 := LineOffset(src, LastChild(nodeValue).Line+1)
|
i1 := LineOffset(src, LastChild(nodeValue).Line+1)
|
||||||
|
|
||||||
|
if i1 < 0 { // no new line on the end of file
|
||||||
|
if value != nil {
|
||||||
|
return append(src[:i0], put...), nil
|
||||||
|
}
|
||||||
|
return src[:i0], nil
|
||||||
|
}
|
||||||
|
|
||||||
dst := make([]byte, 0, len(src)+len(put))
|
dst := make([]byte, 0, len(src)+len(put))
|
||||||
dst = append(dst, src[:i0]...)
|
dst = append(dst, src[:i0]...)
|
||||||
if value != nil {
|
if value != nil {
|
||||||
@@ -121,6 +128,14 @@ func AddOrReplace(src []byte, key string, value any, nodeParent *yaml.Node) ([]b
|
|||||||
|
|
||||||
i := LineOffset(src, LastChild(nodeParent).Line+1)
|
i := LineOffset(src, LastChild(nodeParent).Line+1)
|
||||||
|
|
||||||
|
if i < 0 { // no new line on the end of file
|
||||||
|
src = append(src, '\n')
|
||||||
|
if value != nil {
|
||||||
|
src = append(src, put...)
|
||||||
|
}
|
||||||
|
return src, nil
|
||||||
|
}
|
||||||
|
|
||||||
dst := make([]byte, 0, len(src)+len(put))
|
dst := make([]byte, 0, len(src)+len(put))
|
||||||
dst = append(dst, src[:i]...)
|
dst = append(dst, src[:i]...)
|
||||||
if value != nil {
|
if value != nil {
|
||||||
|
|||||||
@@ -104,3 +104,43 @@ func TestPatch2(t *testing.T) {
|
|||||||
camera2: url3
|
camera2: url3
|
||||||
`, string(b))
|
`, string(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNoNewLineEnd1(t *testing.T) {
|
||||||
|
b := []byte(`streams:
|
||||||
|
camera1: url4
|
||||||
|
camera2:
|
||||||
|
- url2
|
||||||
|
- url3`)
|
||||||
|
|
||||||
|
b, err := Patch(b, "camera2", "url5", "streams")
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, `streams:
|
||||||
|
camera1: url4
|
||||||
|
camera2: url5
|
||||||
|
`, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNoNewLineEnd2(t *testing.T) {
|
||||||
|
b := []byte(`streams:
|
||||||
|
camera1: url1
|
||||||
|
homekit:
|
||||||
|
camera1:
|
||||||
|
pin: 123-45-678`)
|
||||||
|
|
||||||
|
// 1. Add new key
|
||||||
|
pairings := []string{"client1", "client2"}
|
||||||
|
|
||||||
|
b, err := Patch(b, "pairings", pairings, "homekit", "camera1")
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, `streams:
|
||||||
|
camera1: url1
|
||||||
|
homekit:
|
||||||
|
camera1:
|
||||||
|
pin: 123-45-678
|
||||||
|
pairings:
|
||||||
|
- client1
|
||||||
|
- client2
|
||||||
|
`, string(b))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user