dignifiedquire / dignifiedquire/async-tar

Builder::finish() does not 'close' inner Writer

Open
#9 5 comments 2 reactions 0 assignees View on GitHub
help wanted
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.