From 27e26d6930aec54a2eda11be23e77eb1417e44e0 Mon Sep 17 00:00:00 2001 From: Gleb Kanterov Date: Wed, 26 Jun 2024 15:37:50 +0200 Subject: [PATCH] merge.Override: Fix handling of dyn.NilValue --- libs/dyn/merge/override.go | 8 +++----- libs/dyn/merge/override_test.go | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/libs/dyn/merge/override.go b/libs/dyn/merge/override.go index 97e8f10098..81bbaa4d53 100644 --- a/libs/dyn/merge/override.go +++ b/libs/dyn/merge/override.go @@ -30,10 +30,6 @@ func Override(leftRoot dyn.Value, rightRoot dyn.Value, visitor OverrideVisitor) } func override(basePath dyn.Path, left dyn.Value, right dyn.Value, visitor OverrideVisitor) (dyn.Value, error) { - if left == dyn.NilValue && right == dyn.NilValue { - return dyn.NilValue, nil - } - if left.Kind() != right.Kind() { return visitor.VisitUpdate(basePath, left, right) } @@ -98,9 +94,11 @@ func override(basePath dyn.Path, left dyn.Value, right dyn.Value, visitor Overri } else { return visitor.VisitUpdate(basePath, left, right) } + case dyn.KindNil: + return left, nil } - return dyn.InvalidValue, fmt.Errorf("unexpected kind %s", left.Kind()) + return dyn.InvalidValue, fmt.Errorf("unexpected kind %s at %s", left.Kind(), basePath.String()) } func overrideMapping(basePath dyn.Path, leftMapping dyn.Mapping, rightMapping dyn.Mapping, visitor OverrideVisitor) (dyn.Mapping, error) { diff --git a/libs/dyn/merge/override_test.go b/libs/dyn/merge/override_test.go index a34f234243..d8fd4e178c 100644 --- a/libs/dyn/merge/override_test.go +++ b/libs/dyn/merge/override_test.go @@ -330,9 +330,9 @@ func TestOverride_Primitive(t *testing.T) { { name: "nil (not updated)", state: visitorState{}, - left: dyn.NilValue, - right: dyn.NilValue, - expected: dyn.NilValue, + left: dyn.NilValue.WithLocation(leftLocation), + right: dyn.NilValue.WithLocation(rightLocation), + expected: dyn.NilValue.WithLocation(leftLocation), }, { name: "nil (updated)",