public override async Task <IDictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate> > RestoreModules(RootConfiguration configuration, IEnumerable <OciArtifactModuleReference> references) { var statuses = new Dictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate>(); foreach (var reference in references) { using var timer = new ExecutionTimer($"Restore module {reference.FullyQualifiedReference}"); var(result, errorMessage) = await this.TryPullArtifactAsync(configuration, reference); if (result is null) { if (errorMessage is not null) { statuses.Add(reference, x => x.ModuleRestoreFailedWithMessage(reference.FullyQualifiedReference, errorMessage)); timer.OnFail(errorMessage); } else { statuses.Add(reference, x => x.ModuleRestoreFailed(reference.FullyQualifiedReference)); timer.OnFail(); } } } return(statuses); }
// base implementation for cache invalidation that should fit all external registries protected async Task <IDictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate> > InvalidateModulesCacheInternal(RootConfiguration configuration, IEnumerable <TModuleReference> references) { var statuses = new Dictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate>(); foreach (var reference in references) { using var timer = new ExecutionTimer($"Delete module {reference.FullyQualifiedReference} from cache"); try { if (Directory.Exists(GetModuleDirectoryPath(reference))) { await this.TryDeleteModuleDirectoryAsync(reference); } } catch (Exception exception) { if (exception.Message is { } message) { statuses.Add(reference, x => x.ModuleDeleteFailedWithMessage(reference.FullyQualifiedReference, message)); timer.OnFail($"Unexpected exception {exception}: {message}"); return(statuses); } statuses.Add(reference, x => x.ModuleDeleteFailed(reference.FullyQualifiedReference)); timer.OnFail($"Unexpected exception {exception}."); } } return(statuses); }
public override async Task <IDictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate> > RestoreModules(RootConfiguration configuration, IEnumerable <TemplateSpecModuleReference> references) { var statuses = new Dictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate>(); foreach (var reference in references) { using var timer = new ExecutionTimer($"Restore module {reference.FullyQualifiedReference}"); try { var repository = this.repositoryFactory.CreateRepository(configuration, reference.SubscriptionId); var templateSpecEntity = await repository.FindTemplateSpecByIdAsync(reference.TemplateSpecResourceId); await this.SaveModuleToDisk(reference, templateSpecEntity); } catch (TemplateSpecException templateSpecException) { statuses.Add(reference, x => x.ModuleRestoreFailedWithMessage(reference.FullyQualifiedReference, templateSpecException.Message)); timer.OnFail(templateSpecException.Message); } catch (Exception exception) { if (exception.Message is { } message) { statuses.Add(reference, x => x.ModuleRestoreFailedWithMessage(reference.FullyQualifiedReference, message)); timer.OnFail($"Unexpected exception {exception}: {message}"); return(statuses); } statuses.Add(reference, x => x.ModuleRestoreFailed(reference.FullyQualifiedReference)); timer.OnFail($"Unexpected exception {exception}."); } } return(statuses); }