Limit inheritance policy work to the relevant scope
This commit is contained in:
@@ -11,6 +11,7 @@ type inheritanceWalker struct {
|
||||
nodes int // logical non-directive nodes in the entire working tree
|
||||
origins map[string]Origin
|
||||
collectionPolicies collectionPolicyScope
|
||||
policyIndex *inheritancePolicyIndex
|
||||
applicationPolicy sequencePolicy
|
||||
limits projectionLimits
|
||||
retained *retainedNodeCounter
|
||||
@@ -66,6 +67,7 @@ func expandInheritanceWithCollectionRuleBudgets(input *document.Node, inputOrigi
|
||||
applicationPolicy: applicationPolicy,
|
||||
retained: newRetainedNodeCounter(historyLimit),
|
||||
}
|
||||
walker.policyIndex = newInheritancePolicyIndex(walker.collectionPolicies)
|
||||
if problem := walker.visit(&root, Path{}, true); problem != nil {
|
||||
return nil, []Diagnostic{*problem}
|
||||
}
|
||||
@@ -113,20 +115,13 @@ func (w *inheritanceWalker) visit(node **document.Node, path Path, unscoped bool
|
||||
limits.nodes -= w.nodes - before
|
||||
}
|
||||
resolved, diagnostics := expandSiblingDefinitionsWithCollectionRules(
|
||||
*node, path, limits, w.origins, w.collectionPolicies, w.applicationPolicy, w.retained,
|
||||
*node, path, limits, w.origins, w.policyIndex.absoluteScope(path), w.applicationPolicy, w.retained,
|
||||
)
|
||||
if len(diagnostics) != 0 {
|
||||
return &diagnostics[0]
|
||||
}
|
||||
*node = resolved.root
|
||||
for pointer, entry := range w.collectionPolicies.collections {
|
||||
if pathHasPrefix(entry.destination, path) {
|
||||
delete(w.collectionPolicies.collections, pointer)
|
||||
}
|
||||
}
|
||||
for _, entry := range resolved.collectionPolicies.collections {
|
||||
w.collectionPolicies.set(entry.destination, entry.policy)
|
||||
}
|
||||
w.policyIndex.replace(&w.collectionPolicies, path, resolved.collectionPolicies)
|
||||
deleteOriginSubtree(w.origins, path, original)
|
||||
for pointer, origin := range resolved.origins {
|
||||
w.origins[pointer] = origin
|
||||
@@ -203,20 +198,13 @@ func (w *inheritanceWalker) expandIdentifiedSequence(node **document.Node, path
|
||||
limits.nodes -= w.nodes - before
|
||||
}
|
||||
resolved, diagnostics := applyIdentifiedInheritanceTemplates(
|
||||
graph, limits, w.origins, w.collectionPolicies, w.applicationPolicy, w.retained,
|
||||
graph, limits, w.origins, w.policyIndex.absoluteScope(path), w.applicationPolicy, w.retained,
|
||||
)
|
||||
if len(diagnostics) != 0 {
|
||||
return &diagnostics[0]
|
||||
}
|
||||
*node = resolved.root
|
||||
for pointer, entry := range w.collectionPolicies.collections {
|
||||
if pathHasPrefix(entry.destination, path) {
|
||||
delete(w.collectionPolicies.collections, pointer)
|
||||
}
|
||||
}
|
||||
for _, entry := range resolved.collectionPolicies.collections {
|
||||
w.collectionPolicies.set(entry.destination, entry.policy)
|
||||
}
|
||||
w.policyIndex.replace(&w.collectionPolicies, path, resolved.collectionPolicies)
|
||||
deleteOriginSubtree(w.origins, path, original)
|
||||
for pointer, origin := range resolved.origins {
|
||||
w.origins[pointer] = origin
|
||||
|
||||
Reference in New Issue
Block a user