Use chunked reader from package:async
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d5a2f0..6aa953f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.3
+
+- Drop `chunked_stream` dependency in favor of `package:async`.
+
## 0.3.2
- Allow arbitrarily many zero bytes at the end of an archive when
diff --git a/lib/src/reader.dart b/lib/src/reader.dart
index eff4135..de84d6a 100644
--- a/lib/src/reader.dart
+++ b/lib/src/reader.dart
@@ -3,7 +3,7 @@
import 'dart:convert';
import 'dart:typed_data';
-import 'package:chunked_stream/chunked_stream.dart';
+import 'package:async/async.dart';
import 'package:meta/meta.dart';
import 'package:typed_data/typed_data.dart';
@@ -23,7 +23,7 @@
@sealed
class TarReader implements StreamIterator<TarEntry> {
/// A chunked stream iterator to enable us to get our data.
- final ChunkedStreamIterator<int> _chunkedStream;
+ final ChunkedStreamReader<int> _chunkedStream;
final PaxHeaders _paxHeaders = PaxHeaders();
final int _maxSpecialFileSize;
@@ -88,7 +88,7 @@
TarReader(Stream<List<int>> tarStream,
{int maxSpecialFileSize = defaultSpecialLength,
bool disallowTrailingData = false})
- : _chunkedStream = ChunkedStreamIterator(tarStream),
+ : _chunkedStream = ChunkedStreamReader(tarStream),
_checkNoTrailingData = disallowTrailingData,
_maxSpecialFileSize = maxSpecialFileSize;
@@ -315,6 +315,7 @@
if (_checkNoTrailingData) {
// Trailing zeroes are okay, but don't allow any more data here.
Uint8List block;
+
do {
block = await _chunkedStream.readBytes(blockSize);
if (!block.isAllZeroes) {
@@ -394,7 +395,7 @@
final streamLength = nextBlockSize(sparseDataLength);
final safeStream =
- _publishStream(_chunkedStream.substream(streamLength), streamLength);
+ _publishStream(_chunkedStream.readStream(streamLength), streamLength);
return sparseStream(safeStream, sparseHoles, header.size);
} else {
var size = header.size;
@@ -409,7 +410,7 @@
} else {
_markPaddingToSkip(size);
return _publishStream(
- _chunkedStream.substream(header.size), header.size);
+ _chunkedStream.readStream(header.size), header.size);
}
}
}
@@ -860,7 +861,7 @@
/// Event-sink tracking the length of emitted tar entry streams.
///
-/// [ChunkedStreamIterator.substream] might return a stream shorter than
+/// [ChunkedStreamReader.readStream] might return a stream shorter than
/// expected. That indicates an invalid tar file though, since the correct size
/// is stored in the header.
class _OutgoingStreamGuard extends EventSink<List<int>> {
diff --git a/lib/src/sparse.dart b/lib/src/sparse.dart
index dc59444..06b88b1 100644
--- a/lib/src/sparse.dart
+++ b/lib/src/sparse.dart
@@ -1,4 +1,4 @@
-import 'package:chunked_stream/chunked_stream.dart';
+import 'package:async/async.dart';
import 'package:meta/meta.dart';
import 'exception.dart';
@@ -37,7 +37,7 @@
Stream<List<int>> sparseStream(
Stream<List<int>> source, List<SparseEntry> sparseHoles, int size) {
if (sparseHoles.isEmpty) {
- return ChunkedStreamIterator(source).substream(size);
+ return ChunkedStreamReader(source).readStream(size);
}
return _sparseStream(source, sparseHoles, size);
@@ -56,7 +56,7 @@
var sparseHoleIndex = 0;
// Iterator through [source] to obtain the data bytes.
- final iterator = ChunkedStreamIterator(source);
+ final iterator = ChunkedStreamReader(source);
while (position < size) {
// Yield all the necessary sparse holes.
@@ -79,7 +79,7 @@
// Yield data as substream, but make sure that we have enough data.
var checkedPosition = position;
- await for (final chunk in iterator.substream(yieldTo - position)) {
+ await for (final chunk in iterator.readStream(yieldTo - position)) {
yield chunk;
checkedPosition += chunk.length;
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 56ef9db..71c6f2a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,13 +1,13 @@
name: tar
description: Memory-efficient, streaming implementation of the tar file format
-version: 0.3.2
+version: 0.3.3
repository: https://github.com/simolus3/tar/
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
- chunked_stream: ^1.4.0
+ async: ^2.6.0
meta: ^1.3.0
typed_data: ^1.3.0
diff --git a/test/reader_test.dart b/test/reader_test.dart
index 04a0572..a8944a0 100644
--- a/test/reader_test.dart
+++ b/test/reader_test.dart
@@ -3,7 +3,7 @@
import 'dart:io';
import 'dart:typed_data';
-import 'package:chunked_stream/chunked_stream.dart';
+import 'package:async/async.dart';
import 'package:tar/src/reader.dart';
import 'package:tar/src/utils.dart';
import 'package:test/test.dart';
@@ -95,12 +95,11 @@
test('if the stream emits an error in content', () async {
// Craft a stream that starts with a valid tar file, but then emits an
// error in the middle of an entry. First 512 bytes are headers.
- final iterator =
- ChunkedStreamIterator(File('reference/v7.tar').openRead());
+ final iterator = ChunkedStreamReader(File('reference/v7.tar').openRead());
final controller = StreamController<List<int>>();
controller.onListen = () async {
// headers + 3 bytes of content
- await controller.addStream(iterator.substream(515));
+ await controller.addStream(iterator.readStream(515));
controller.addError('foo');
};
diff --git a/test/sparse_test.dart b/test/sparse_test.dart
index a819abd..6e3c695 100644
--- a/test/sparse_test.dart
+++ b/test/sparse_test.dart
@@ -3,7 +3,7 @@
import 'dart:math';
import 'dart:typed_data';
-import 'package:chunked_stream/chunked_stream.dart';
+import 'package:async/async.dart';
import 'package:tar/src/sparse.dart';
import 'package:tar/tar.dart';
import 'package:test/test.dart';
@@ -77,12 +77,12 @@
fail('Unexpected file $fileName in tar file');
}
- final actualContents = ChunkedStreamIterator(File(matchingFile).openRead());
- final tarContents = ChunkedStreamIterator(reader.current.contents);
+ final actualContents = ChunkedStreamReader(File(matchingFile).openRead());
+ final tarContents = ChunkedStreamReader(reader.current.contents);
while (true) {
- final actualChunk = await actualContents.read(1024);
- final tarChunk = await tarContents.read(1024);
+ final actualChunk = await actualContents.readBytes(1024);
+ final tarChunk = await tarContents.readBytes(1024);
expect(tarChunk, actualChunk);
if (actualChunk.isEmpty) break;