archive static method
Archives entities into a tar file with trace logging.
Use ArchiveOptions to configure the operation.
Implementation
static void archive(ArchiveOptions options) {
_log(options.logBuffer, '--- Archive Started at ${DateTime.now()} ---');
_log(options.logBuffer, 'Base path: ${options.basePath}');
final isExternalController = options.controller != null;
final tarController =
options.controller ?? StreamController<TarEntry>(sync: true);
final outputSink = options.outputFile.openWrite();
final archiveStream = options.useGzip
? tarController.stream.transform(tarWriter).transform(gzip.encoder)
: tarController.stream.transform(tarWriter);
archiveStream.pipe(outputSink).then((_) {
_log(options.logBuffer, '--- Archive Successfully Completed ---');
options.onSuccess?.call();
}).catchError((e, st) {
_log(options.logBuffer, '!!! Archive Error: $e');
if (!isExternalController) {
tarController.close();
}
outputSink.close();
options.onError?.call(e, st);
});
// Only auto-fill if controller is internal and autoFillEntities is true
if (!isExternalController && options.autoFillEntities) {
_fillController(
options.entities, options.basePath, tarController, options.logBuffer);
}
}