archive static method

void archive(
  1. ArchiveOptions options
)

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);
  }
}