From bcb2c57d262eb5b095fd75ffc96a19fe8d1bae74 Mon Sep 17 00:00:00 2001 From: Bryan Oltman Date: Wed, 3 Jan 2024 12:26:19 -0500 Subject: [PATCH] fix(shorebird_cli): don't copy directory before zipping (#1612) --- .../lib/src/archive/directory_archive.dart | 4 +- .../src/archive/directory_archive_test.dart | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 packages/shorebird_cli/test/src/archive/directory_archive_test.dart diff --git a/packages/shorebird_cli/lib/src/archive/directory_archive.dart b/packages/shorebird_cli/lib/src/archive/directory_archive.dart index b9d610df..51ab5b87 100644 --- a/packages/shorebird_cli/lib/src/archive/directory_archive.dart +++ b/packages/shorebird_cli/lib/src/archive/directory_archive.dart @@ -1,7 +1,6 @@ import 'dart:isolate'; import 'package:archive/archive_io.dart'; -import 'package:io/io.dart'; import 'package:path/path.dart' as p; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; @@ -11,8 +10,7 @@ extension DirectoryArchive on Directory { final tempDir = await Directory.systemTemp.createTemp(); final outFile = File(p.join(tempDir.path, '${p.basename(path)}.zip')); await Isolate.run(() { - copyPathSync(path, tempDir.path); - ZipFileEncoder().zipDirectory(tempDir, filename: outFile.path); + ZipFileEncoder().zipDirectory(this, filename: outFile.path); }); return outFile; } diff --git a/packages/shorebird_cli/test/src/archive/directory_archive_test.dart b/packages/shorebird_cli/test/src/archive/directory_archive_test.dart new file mode 100644 index 00000000..62c42e11 --- /dev/null +++ b/packages/shorebird_cli/test/src/archive/directory_archive_test.dart @@ -0,0 +1,41 @@ +import 'package:archive/archive_io.dart'; +import 'package:path/path.dart' as p; +import 'package:shorebird_cli/src/archive/directory_archive.dart'; +import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; +import 'package:test/test.dart'; + +void main() { + group('DirectoryArchive', () { + group('zipToTempFile', () { + test('zips directory to location in system temp', () async { + final directoryToZip = Directory.systemTemp.createTempSync(); + File('${directoryToZip.path}/a.txt') + ..createSync() + ..writeAsStringSync('a'); + File('${directoryToZip.path}/b.txt') + ..createSync() + ..writeAsStringSync('b'); + + final zipFile = await directoryToZip.zipToTempFile(); + expect(zipFile.existsSync(), isTrue); + expect(p.extension(zipFile.path), equals('.zip')); + + final tempDir = await Directory.systemTemp.createTemp(); + await extractFileToDisk(zipFile.path, tempDir.path); + final extractedContents = tempDir.listSync(recursive: true); + expect(extractedContents, hasLength(2)); + + final extractedFileA = extractedContents.whereType().firstWhere( + (entity) => p.basename(entity.path) == 'a.txt', + ); + final extractedFileB = extractedContents.whereType().firstWhere( + (entity) => p.basename(entity.path) == 'b.txt', + ); + expect(extractedFileA.existsSync(), isTrue); + expect(extractedFileB.existsSync(), isTrue); + expect(extractedFileA.readAsStringSync(), equals('a')); + expect(extractedFileB.readAsStringSync(), equals('b')); + }); + }); + }); +}