fix(shorebird_cli): don't copy directory before zipping (#1612)
This commit is contained in:
@@ -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'));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user