dignifiedquire / dignifiedquire/async-tar
Builder::finish() does not 'close' inner Writer
- Dominant language
- Rust
- Stars
- 83
- Forks
- 70
- PR merge metrics
- No merged PRs in 30d
Description
`Builder::finish()` doesn't seem to flush the state of the inner writer. this means the following snippet doesn't work-
```rust
use async_compression::futures::write::GzipEncoder;
use async_std::{fs::File, path::Path};
use async_tar::Builder;
use futures::io::AsyncWrite;
async fn write_archive(writer: W, src_directory: impl AsRef) -> std::io::Result<()>
where
W: AsyncWrite + Unpin + Send + Sync,
{
let mut archive_builder = Builder::new(writer);
archive_builder.append_dir_all("", src_directory).await?;
archive_builder.finish().await
}
#[async_std::main]
async fn main() {
let file = File::create("foo.tar.gz").await.unwrap();
let encoder = GzipEncoder::new(file);
write_archive(encoder, "sample-directory").await.unwrap();
}
```
but this snippet *does* work
```rust
use async_compression::futures::write::GzipEncoder;
use async_std::{fs::File, path::Path};
use async_tar::Builder;
use futures::io::{AsyncWrite, AsyncWriteExt};
async fn write_archive(writer: W, src_directory: impl AsRef) -> std::io::Result<()>
where
W: AsyncWrite + Unpin + Send + Sync,
{
let mut archive_builder = Builder::new(writer);
archive_builder.append_dir_all("", src_directory).await?;
archive_builder.finish().await?;
archive_builder.into_inner().await?.close().await
}
#[async_std::main]
async fn main() {
let file = File::create("foo.tar.gz").await.unwrap();
let encoder = GzipEncoder::new(file);
write_archive(encoder, "docker-context").await.unwrap();
}
```
that's more than a little surprising.
`Builder::finish()` should flush the inner writer, or at the very least, this behaviour should be clearly documented
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.