fix(shorebird_cli): don't copy directory before zipping (#1612)

This commit is contained in:
Bryan Oltman
2024-01-03 12:26:19 -05:00
committed by GitHub
parent 86cba525f8
commit bcb2c57d26
2 changed files with 42 additions and 3 deletions
@@ -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;
}
@@ -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<File>().firstWhere(
(entity) => p.basename(entity.path) == 'a.txt',
);
final extractedFileB = extractedContents.whereType<File>().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'));
});
});
});
}