Wire load lifecycle through input acquisition
This commit is contained in:
@@ -35,9 +35,6 @@ type Options[T any] struct {
|
||||
importDefaults importDefaults
|
||||
destination Path
|
||||
placementMode placementMode
|
||||
sequencePolicy sequencePolicy
|
||||
deferAssembly bool
|
||||
directiveContext rootDirectiveContext
|
||||
}
|
||||
|
||||
// FilesystemContext supplies filesystem roots for imports and overlays. For an
|
||||
@@ -184,17 +181,10 @@ func loadWithSecretLookup[T any](source Source, secrets SecretBinding, lookup se
|
||||
func executeLoadRequest[T any](request loadRequest[T], secrets SecretBinding, lookup secretLookup) (*Loaded[T], error) {
|
||||
accumulator := diagnosticAccumulator{}
|
||||
accounting := &importAccounting{}
|
||||
mainOptions := Options[T]{Definition: request.definition, Imports: request.main.imports, Filesystem: request.main.filesystem, destination: request.main.destination.clone(), placementMode: request.main.placementMode}
|
||||
mainOptions.importDefaults = snapshotImportDefaults(request.importDefaults)
|
||||
mainOptions.sequencePolicy = request.sequencePolicy
|
||||
mainOptions.deferAssembly = true
|
||||
mainOptions.SourceVersionMode = request.sourceVersionMode
|
||||
mainOptions.Definition.Version = request.protectionVersion()
|
||||
if request.ordinary {
|
||||
mainOptions.Overlay = request.overlay
|
||||
mainOptions.directiveContext = rootDirectiveContextSource
|
||||
} else {
|
||||
mainOptions.directiveContext = rootDirectiveContextLayered
|
||||
policy := acquisitionPolicy{
|
||||
importDefaults: snapshotImportDefaults(request.importDefaults),
|
||||
sequencePolicy: request.sequencePolicy,
|
||||
importLimits: defaultImportLimits(),
|
||||
}
|
||||
|
||||
var schema *schemaDescriptor
|
||||
@@ -209,8 +199,19 @@ func executeLoadRequest[T any](request loadRequest[T], secrets SecretBinding, lo
|
||||
versionState := &sourceVersionState{
|
||||
localRule: request.definition.Version, effectiveRule: request.protectionVersion(), mode: request.sourceVersionMode,
|
||||
}
|
||||
state := &acquisitionState{accounting: accounting, versionState: versionState}
|
||||
accumulator.versionState = versionState
|
||||
input, diagnostics := assembleBaseInputTrackedWithVersion(request.main.source, mainOptions, request.main.destination, accounting, nil, nil, versionState)
|
||||
directiveContext := rootDirectiveContextLayered
|
||||
ordinaryOverlay := ""
|
||||
if request.ordinary {
|
||||
directiveContext = rootDirectiveContextSource
|
||||
ordinaryOverlay = request.overlay
|
||||
}
|
||||
input, diagnostics := acquireInput(inputAcquisitionRequest{
|
||||
input: request.main, role: sourceVersionMain, directiveContext: directiveContext,
|
||||
protectionRule: request.protectionVersion(), deferAssembly: true,
|
||||
ordinaryOverlay: ordinaryOverlay,
|
||||
}, policy, state, &tierAcquisitionState{visited: make(map[resourceIdentity]importRoute)})
|
||||
request.main.source = input.source
|
||||
accumulator.sources = input.sources
|
||||
accumulator.add(versionState.diagnostics...)
|
||||
@@ -228,7 +229,7 @@ func executeLoadRequest[T any](request loadRequest[T], secrets SecretBinding, lo
|
||||
}
|
||||
}
|
||||
if request.ordinary && (input.document != nil || input.composition != nil) {
|
||||
input.composition, diagnostics = compositionForInputWithPolicy(input, request.sequencePolicy)
|
||||
input.composition, diagnostics = compositionForInputWithPolicy(input, policy.sequencePolicy)
|
||||
if len(diagnostics) != 0 {
|
||||
accumulator.add(diagnostics...)
|
||||
return nil, accumulator.loadError()
|
||||
@@ -244,10 +245,9 @@ func executeLoadRequest[T any](request loadRequest[T], secrets SecretBinding, lo
|
||||
}
|
||||
if request.ordinary {
|
||||
versionState.locateMainVersion(input.document)
|
||||
mainOptions.Definition.Version = versionState.effectiveRule
|
||||
input, diagnostics = applyInputLayers(request.main.source, mainOptions, input)
|
||||
input, diagnostics = applyInputLayers(request.main.source, request.main.filesystem, request.overlay, versionState.effectiveRule, policy.sequencePolicy, input)
|
||||
} else {
|
||||
input, diagnostics = assembleLayeredInput(request, input, accounting)
|
||||
input, diagnostics = assembleLayeredInput(request, input, policy, state)
|
||||
}
|
||||
accumulator.add(versionState.diagnostics[reportedVersionDiagnostics:]...)
|
||||
accumulator.sources = input.sources
|
||||
@@ -279,7 +279,7 @@ func executeLoadRequest[T any](request loadRequest[T], secrets SecretBinding, lo
|
||||
return nil, accumulator.loadError()
|
||||
}
|
||||
expanded, problems := expandInheritanceWithCollectionRules(
|
||||
composition.root, composition.origins, composition.collectionPolicies, request.sequencePolicy, defaultProjectionLimits(),
|
||||
composition.root, composition.origins, composition.collectionPolicies, policy.sequencePolicy, defaultProjectionLimits(),
|
||||
)
|
||||
if len(problems) != 0 {
|
||||
accumulator.add(problems...)
|
||||
@@ -351,7 +351,7 @@ func executeLoadRequest[T any](request loadRequest[T], secrets SecretBinding, lo
|
||||
if hasErrors(secretResolution.diagnostics) {
|
||||
return nil, accumulator.loadError()
|
||||
}
|
||||
identityDiagnostics := validateFinalSequenceIdentities(resolved.referenceInput, request.sequencePolicy)
|
||||
identityDiagnostics := validateFinalSequenceIdentities(resolved.referenceInput, policy.sequencePolicy)
|
||||
accumulator.add(identityDiagnostics...)
|
||||
if hasErrors(identityDiagnostics) {
|
||||
return nil, accumulator.loadError()
|
||||
|
||||
Reference in New Issue
Block a user