Close owned import roots during panic unwinding
This commit is contained in:
@@ -61,6 +61,16 @@ func acquireImportedInput(request importAcquisitionRequest, policy *acquisitionP
|
||||
}
|
||||
|
||||
func acquireImportedWithAccess(request importAcquisitionRequest, policy *acquisitionPolicy, loadState *acquisitionState, tier *tierAcquisitionState, access *filesystemAccess, resolved resolvedFilesystemContext) (*composedDocument, []SourceInfo, []Diagnostic) {
|
||||
closed := false
|
||||
closeAccess := func() error {
|
||||
if closed {
|
||||
return nil
|
||||
}
|
||||
closed = true
|
||||
return access.close()
|
||||
}
|
||||
defer func() { _ = closeAccess() }()
|
||||
|
||||
main := request.main
|
||||
destination := request.input.input.destination
|
||||
limits := policy.importLimits
|
||||
@@ -73,13 +83,13 @@ func acquireImportedWithAccess(request importAcquisitionRequest, policy *acquisi
|
||||
}
|
||||
visited := tier.visited
|
||||
if !access.contains(basePath) || (mainPath != "" && !access.contains(mainPath)) {
|
||||
_ = access.close()
|
||||
_ = closeAccess()
|
||||
return nil, sourceInfos(main.source), []Diagnostic{importDiagnostic(CodeImportOutsideRoot, "selected source and import base must stay inside the configuration root", nil)}
|
||||
}
|
||||
for _, directory := range []string{access.rootPath, basePath} {
|
||||
info, err := access.stat(directory)
|
||||
if err != nil || !info.IsDir() {
|
||||
_ = access.close()
|
||||
_ = closeAccess()
|
||||
return nil, sourceInfos(main.source), []Diagnostic{importDiagnostic(CodeImportInvalid, "configuration root and import base must be directories", nil)}
|
||||
}
|
||||
}
|
||||
@@ -95,7 +105,7 @@ func acquireImportedWithAccess(request importAcquisitionRequest, policy *acquisi
|
||||
mainResource = access.syntheticIdentity()
|
||||
}
|
||||
if previous, repeated := visited[mainResource]; repeated {
|
||||
_ = access.close()
|
||||
_ = closeAccess()
|
||||
return nil, sourceInfos(main.source), []Diagnostic{importRepeatedDiagnostic(Location{SourceID: main.source.ID}, previous, importRoute{})}
|
||||
}
|
||||
accounting.sources++
|
||||
@@ -125,7 +135,7 @@ func acquireImportedWithAccess(request importAcquisitionRequest, policy *acquisi
|
||||
}
|
||||
|
||||
if diagnostic := state.checkInitialLimits(); diagnostic != nil {
|
||||
_ = access.close()
|
||||
_ = closeAccess()
|
||||
return nil, cloneSourceInfos(state.sources), []Diagnostic{*diagnostic}
|
||||
}
|
||||
|
||||
@@ -181,7 +191,7 @@ func acquireImportedWithAccess(request importAcquisitionRequest, policy *acquisi
|
||||
scheduleAcquisitionScopes(&state.scope, indexImportDependencies(state.importGraph))
|
||||
}
|
||||
|
||||
closeErr := access.close()
|
||||
closeErr := closeAccess()
|
||||
if len(diagnostics) != 0 {
|
||||
if mainIsItem {
|
||||
diagnostics = prependCompositionDiagnosticPaths(diagnostics, destination.Index(0))
|
||||
|
||||
Reference in New Issue
Block a user