Separate underlay acquisition from composition
This commit is contained in:
@@ -285,6 +285,10 @@ func loadImportedWithAccessTrackedAndProcessingPolicyDeferred(access *filesystem
|
||||
// the already acquired documents and graph; source handles are closed before
|
||||
// this handoff.
|
||||
func composeAcquiredInputWithPolicy(input assembledInput, policy sequencePolicy) (*composedDocument, []Diagnostic) {
|
||||
return composeAcquiredInputWithPolicies(input, collectionPolicyScope{}, policy)
|
||||
}
|
||||
|
||||
func composeAcquiredInputWithPolicies(input assembledInput, lower collectionPolicyScope, policy sequencePolicy) (*composedDocument, []Diagnostic) {
|
||||
if input.composition == nil || input.composition.root != nil || len(input.composition.acquisition) == 0 {
|
||||
return input.composition, nil
|
||||
}
|
||||
@@ -370,7 +374,30 @@ func composeAcquiredInputWithPolicy(input assembledInput, policy sequencePolicy)
|
||||
composition.importGraph = acquired.importGraph.clone()
|
||||
return composition, nil
|
||||
}
|
||||
if diagnostics := traversal.composePendingItems(&scope); len(diagnostics) != 0 {
|
||||
return composeAcquiredScopeWithPolicy(
|
||||
&scope, lower, policy, acquired.importGraph, input.sources, rule, input.versionState, accounting,
|
||||
)
|
||||
}
|
||||
|
||||
// composeAcquiredScopeWithPolicy is shared by per-input and underlay-group
|
||||
// handoffs. Lower policy is carried separately from registered application
|
||||
// constraints; current strict composition continues to use its existing rules.
|
||||
func composeAcquiredScopeWithPolicy(
|
||||
scope *acquisitionScope,
|
||||
lower collectionPolicyScope,
|
||||
policy sequencePolicy,
|
||||
graph importInclusionGraph,
|
||||
sources []SourceInfo,
|
||||
rule *VersionRule,
|
||||
versionState *sourceVersionState,
|
||||
accounting *importAccounting,
|
||||
) (*composedDocument, []Diagnostic) {
|
||||
_ = lower
|
||||
traversal := importTraversal{
|
||||
accounting: accounting, limits: defaultImportLimits(), rule: rule,
|
||||
versionState: versionState, importGraph: graph.clone(),
|
||||
}
|
||||
if diagnostics := traversal.composePendingItems(scope); len(diagnostics) != 0 {
|
||||
return nil, diagnostics
|
||||
}
|
||||
documents := make([]*document.Node, 0, len(scope.contributions))
|
||||
@@ -381,15 +408,15 @@ func composeAcquiredInputWithPolicy(input assembledInput, policy sequencePolicy)
|
||||
if len(diagnostics) != 0 {
|
||||
return nil, diagnostics
|
||||
}
|
||||
if diagnostic := importedVersionClaim(documents, scope, composition, rule); diagnostic != nil {
|
||||
if diagnostic := importedVersionClaim(documents, *scope, composition, rule); diagnostic != nil {
|
||||
return nil, []Diagnostic{*diagnostic}
|
||||
}
|
||||
projectNestedEvidence(composition, scope)
|
||||
projectAcquiredDestinations(composition, scope, input.sources)
|
||||
composition.acquisition = []acquisitionScope{cloneAcquisitionScope(scope)}
|
||||
projectNestedEvidence(composition, *scope)
|
||||
projectAcquiredDestinations(composition, *scope, sources)
|
||||
composition.acquisition = []acquisitionScope{cloneAcquisitionScope(*scope)}
|
||||
composition.inputBytes = accounting.bytes
|
||||
composition.inputNodes = accounting.nodes
|
||||
composition.importGraph = acquired.importGraph.clone()
|
||||
composition.importGraph = graph.clone()
|
||||
return composition, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user