read method
Reads one immutable snapshot for name.
Throws a not-found CassetteStoreException when name does not exist.
Implementation
@override
Future<CassetteSnapshot> read(CassetteName name) async {
await _waitForWrites(name);
if (!await _rootExists(name, CassetteStoreOperation.read)) {
throw CassetteStoreException.notFound(
name: name,
operation: CassetteStoreOperation.read,
);
}
final file = await _resolver.resolve(
name,
operation: CassetteStoreOperation.read,
);
if (!await file.exists()) {
throw CassetteStoreException.notFound(
name: name,
operation: CassetteStoreOperation.read,
);
}
try {
final bytes = await _readBounded(
file,
name,
CassetteStoreOperation.read,
);
final fileRevision = FileCassetteRevision.takeOwnership(name, bytes);
_fileRevisions[fileRevision.opaque] = fileRevision;
return CassetteSnapshot(
name: name,
bytes: bytes,
revision: fileRevision.opaque,
);
} on CassetteStoreException {
rethrow;
} on FileSystemException {
if (!await file.exists()) {
throw CassetteStoreException.notFound(
name: name,
operation: CassetteStoreOperation.read,
);
}
throw CassetteStoreException.operationFailed(
name: name,
operation: CassetteStoreOperation.read,
);
}
}