Activate selected overlay collection policies
This commit is contained in:
@@ -9,6 +9,7 @@ type recursiveMergeHooks struct {
|
||||
added func(Path, *document.Node)
|
||||
combined func(Path, *document.Node)
|
||||
replaced func(Path, *document.Node, *document.Node)
|
||||
merge func(Path, *document.Node, *document.Node) (*document.Node, bool)
|
||||
}
|
||||
|
||||
// mergeRecursiveMappings changes an owned mapping and never aliases incoming
|
||||
@@ -18,6 +19,14 @@ func mergeRecursiveMappings(target, incoming *document.Node, current Path, index
|
||||
path := current.Key(entry.Key)
|
||||
position := index.find(target, entry.Key)
|
||||
if position < 0 {
|
||||
if hooks.merge != nil {
|
||||
if merged, handled := hooks.merge(path, nil, entry.Value); handled {
|
||||
cloned := entry
|
||||
cloned.Value = document.Clone(merged)
|
||||
index.append(target, cloned)
|
||||
continue
|
||||
}
|
||||
}
|
||||
cloned := entry
|
||||
cloned.Value = document.Clone(entry.Value)
|
||||
index.append(target, cloned)
|
||||
@@ -35,6 +44,13 @@ func mergeRecursiveMappings(target, incoming *document.Node, current Path, index
|
||||
mergeRecursiveMappings(existing, entry.Value, path, index, hooks)
|
||||
continue
|
||||
}
|
||||
if hooks.merge != nil {
|
||||
if merged, handled := hooks.merge(path, existing, entry.Value); handled {
|
||||
target.Mapping[position] = entry
|
||||
target.Mapping[position].Value = document.Clone(merged)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if hooks.replaced != nil {
|
||||
hooks.replaced(path, existing, entry.Value)
|
||||
|
||||
Reference in New Issue
Block a user