Add selected profile overlays
This commit is contained in:
@@ -34,6 +34,43 @@ func metadataFromDecoded(decoded decodedConfiguration) Metadata {
|
||||
return metadata
|
||||
}
|
||||
|
||||
func applyOverlayMetadata(metadata *Metadata, records []overlayRecord) {
|
||||
for _, record := range records {
|
||||
for _, displaced := range record.displaced {
|
||||
pointer := displaced.path.String()
|
||||
history := metadata.history[pointer]
|
||||
profileIndex := -1
|
||||
for index := len(history) - 1; index >= 0; index-- {
|
||||
if history[index].Origin.Layer == LayerProfile {
|
||||
profileIndex = index
|
||||
break
|
||||
}
|
||||
}
|
||||
baseChange := Change{Path: displaced.path.clone(), Origin: cloneOrigin(displaced.origin)}
|
||||
if len(history) != 0 && history[len(history)-1].Origin.Layer == LayerDefault {
|
||||
baseChange.Previous = []Origin{cloneOrigin(history[len(history)-1].Origin)}
|
||||
}
|
||||
if profileIndex >= 0 {
|
||||
history = append(history[:profileIndex], append([]Change{baseChange}, history[profileIndex:]...)...)
|
||||
} else {
|
||||
history = append(history, baseChange)
|
||||
}
|
||||
|
||||
change := cloneChange(record.change)
|
||||
change.Previous = []Origin{cloneOrigin(displaced.origin)}
|
||||
if profileIndex >= 0 {
|
||||
// The effective-input projection created a leaf-shaped profile
|
||||
// record. Replace it with the actual parent operation.
|
||||
profileIndex++
|
||||
history[profileIndex] = change
|
||||
} else {
|
||||
history = append(history, change)
|
||||
}
|
||||
metadata.history[pointer] = history
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func collectFieldInfo(node *document.Node, path Path, decoded decodedConfiguration, fields map[string]FieldInfo) {
|
||||
pointer := path.String()
|
||||
_, explicit := decoded.presence[pointer]
|
||||
|
||||
Reference in New Issue
Block a user