resolve method
Try to resolve the source specification.
Returns a ResolvedSource if this provider can handle the
specification, or null to skip to the next provider.
Implementation
@override
Future<ResolvedSource?> resolve(SourceResolutionContext context) async {
final spec = context.specification;
if (spec is! ArchiveSource) return null;
final cacheDir = context.sourceCacheDirectory(key: spec.sha256);
if (cacheDir.existsSync()) {
logger?.info('Using cached archive source: ${spec.label}');
return ResolvedSource(
directory: _applySubdirectory(cacheDir, spec.subdirectory),
origin: SourceOrigin.cache,
revision: spec.sha256,
);
}
logger?.info('Downloading source archive: ${spec.label}');
await _downloadAndExtract(spec, cacheDir, logger: logger);
return ResolvedSource(
directory: _applySubdirectory(cacheDir, spec.subdirectory),
origin: SourceOrigin.archive,
revision: spec.sha256,
);
}