Preserve nested collection policy ownership
This commit is contained in:
@@ -59,6 +59,7 @@ func (a *assemblyAccumulator) applyOverlay(overlay *document.Node, incomingOrigi
|
||||
func (a *assemblyAccumulator) applyOverlayWithCollectionPolicy(
|
||||
overlay *document.Node,
|
||||
incomingOrigins map[string]Origin,
|
||||
incomingPolicies collectionPolicyScope,
|
||||
applications []historyApplication,
|
||||
layer Layer,
|
||||
sequencePolicy sequencePolicy,
|
||||
@@ -68,7 +69,7 @@ func (a *assemblyAccumulator) applyOverlayWithCollectionPolicy(
|
||||
return invalidOverlayDocument()
|
||||
}
|
||||
mergeOriginContribution(a.current.origins, Path{}, incomingOrigin(incomingOrigins, Path{}, overlay, layer))
|
||||
sequences, diagnostics := mergeOverlayMappingsWithCollectionPolicy(a, overlay, incomingOrigins, layer, sequencePolicy, declarations)
|
||||
sequences, diagnostics := mergeOverlayMappingsWithCollectionPolicy(a, overlay, incomingOrigins, incomingPolicies, layer, sequencePolicy, declarations)
|
||||
if len(diagnostics) != 0 {
|
||||
return diagnostics
|
||||
}
|
||||
@@ -89,6 +90,7 @@ func mergeOverlayMappingsWithCollectionPolicy(
|
||||
assembly *assemblyAccumulator,
|
||||
overlay *document.Node,
|
||||
incomingOrigins map[string]Origin,
|
||||
incomingPolicies collectionPolicyScope,
|
||||
layer Layer,
|
||||
sequencePolicy sequencePolicy,
|
||||
declarations []sequenceDeclarationSpec,
|
||||
@@ -172,7 +174,7 @@ func mergeOverlayMappingsWithCollectionPolicy(
|
||||
combinationDiagnostics = append(combinationDiagnostics, issues...)
|
||||
return existing, false
|
||||
}
|
||||
applyOverlaySequenceEvidence(result, path, existing, incoming, combined, resolution, incomingOrigins, layer)
|
||||
applyOverlaySequenceEvidence(result, path, existing, incoming, combined, resolution, incomingOrigins, incomingPolicies, layer)
|
||||
policyValues[path.String()] = true
|
||||
history := sequenceHistoryContribution{path: path.clone(), mode: sequenceHistoryMapped}
|
||||
if resolution.operation == sequenceModeReplace {
|
||||
@@ -307,6 +309,7 @@ func applyOverlaySequenceEvidence(
|
||||
combined sequenceCombinationResult,
|
||||
resolution collectionPolicyResolution,
|
||||
incomingOrigins map[string]Origin,
|
||||
incomingPolicies collectionPolicyScope,
|
||||
layer Layer,
|
||||
) {
|
||||
lowerPolicy, hadLowerPolicy := result.collectionPolicies.at(path)
|
||||
@@ -383,22 +386,25 @@ func applyOverlaySequenceEvidence(
|
||||
policy := cloneCollectionPolicy(resolution.policy)
|
||||
policy.recordOrder = nil
|
||||
policy.recordPolicies = nil
|
||||
if hadLowerPolicy && resolution.operation != sequenceModeReplace {
|
||||
lowerProjection := newSequenceItemProjectionIndex(combined.lowerItems)
|
||||
higherProjection := newSequenceItemProjectionIndex(combined.higherItems)
|
||||
for outputIndex := range combined.value.Sequence {
|
||||
if _, replaced := higherProjection.inputForOutput(outputIndex); replaced {
|
||||
lowerProjection := newSequenceItemProjectionIndex(combined.lowerItems)
|
||||
higherProjection := newSequenceItemProjectionIndex(combined.higherItems)
|
||||
incomingCollection, hasIncomingCollection := incomingPolicies.at(path)
|
||||
for outputIndex := range combined.value.Sequence {
|
||||
if higherIndex, replaced := higherProjection.inputForOutput(outputIndex); replaced {
|
||||
if record, found := incomingCollection.recordPolicyAt(higherIndex); hasIncomingCollection && found {
|
||||
policy.setRecordPolicyAt(outputIndex, retainedCollectionRecordPolicy(record))
|
||||
} else {
|
||||
policy.setRecordPolicyAt(outputIndex, replacedCollectionRecordPolicy())
|
||||
continue
|
||||
}
|
||||
continue
|
||||
}
|
||||
if hadLowerPolicy && resolution.operation != sequenceModeReplace {
|
||||
if lowerIndex, retained := lowerProjection.inputForOutput(outputIndex); retained {
|
||||
if record, found := lowerPolicy.recordPolicyAt(lowerIndex); found {
|
||||
policy.setRecordPolicyAt(outputIndex, retainedCollectionRecordPolicy(record))
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for outputIndex := range combined.value.Sequence {
|
||||
} else {
|
||||
policy.setRecordPolicyAt(outputIndex, replacedCollectionRecordPolicy())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user