Skip to content

Commit 38b0183

Browse files
committed
Fixed zstd compression
1 parent 6e95621 commit 38b0183

File tree

4 files changed

+33
-30
lines changed

4 files changed

+33
-30
lines changed

Cargo.lock

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ members = [
1515
resolver = "2"
1616

1717
[workspace.package]
18-
version = "0.30.0"
18+
version = "0.32.0"
1919
authors = [
2020
"University of Helsinki <mooc@cs.helsinki.fi>",
2121
"Daniel Martinez <daniel.x.martinez@helsinki.fi>",

crates/tmc-langs-framework/src/archive.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,34 +241,38 @@ pub enum Compression {
241241

242242
impl Compression {
243243
pub fn compress(self, path: &Path) -> Result<Vec<u8>, TmcError> {
244-
let buf = Cursor::new(Vec::new());
245244
let buf = match self {
246245
Self::Tar => {
246+
let buf = Cursor::new(Vec::new());
247247
let mut builder = tar::Builder::new(buf);
248248
builder
249249
.append_dir_all(".", path)
250250
.map_err(TmcError::TarWrite)?;
251-
builder.into_inner().map_err(TmcError::TarWrite)?
251+
builder
252+
.into_inner()
253+
.map_err(TmcError::TarWrite)?
254+
.into_inner()
252255
}
253256
Self::Zip => {
257+
let buf = Cursor::new(Vec::new());
254258
let mut writer = zip::ZipWriter::new(buf);
255259
let path_str = path
256260
.to_str()
257261
.ok_or_else(|| TmcError::InvalidUtf8(path.to_path_buf()))?;
258262
writer.add_directory(path_str, Default::default())?;
259-
writer.finish()?
263+
writer.finish()?.into_inner()
260264
}
261265
Self::TarZstd => {
262-
let mut builder = tar::Builder::new(buf);
266+
let tar_buf = vec![];
267+
let mut builder = tar::Builder::new(tar_buf);
263268
builder
264269
.append_dir_all(".", path)
265270
.map_err(TmcError::TarWrite)?;
266-
let buf = builder.into_inner().map_err(TmcError::TarWrite)?;
267-
let encoder = zstd::Encoder::new(buf, 0).map_err(TmcError::ZstdWrite)?;
268-
encoder.finish().map_err(TmcError::ZstdWrite)?
271+
let tar_buf = builder.into_inner().map_err(TmcError::TarWrite)?;
272+
zstd::stream::encode_all(tar_buf.as_slice(), 0).map_err(TmcError::ZstdWrite)?
269273
}
270274
};
271-
Ok(buf.into_inner())
275+
Ok(buf)
272276
}
273277
}
274278

crates/tmc-langs-plugins/src/archive.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
//! Contains types that abstract over the various archive formats.
22
33
use std::{
4-
io::{self, Cursor, Seek, Write},
4+
io::{Cursor, Seek, Write},
55
path::Path,
66
};
77
use tar::Builder;
88
use tmc_langs_framework::{Compression, TmcError};
99
use tmc_langs_util::file_util;
1010
use zip::{write::FileOptions, ZipWriter};
11-
use zstd::Encoder;
1211

1312
pub enum ArchiveBuilder<W: Write + Seek> {
1413
Tar(Builder<W>),
@@ -65,11 +64,11 @@ impl<W: Write + Seek> ArchiveBuilder<W> {
6564
pub fn finish(self) -> Result<W, TmcError> {
6665
let res = match self {
6766
Self::Tar(builder) => builder.into_inner().map_err(TmcError::TarWrite)?,
68-
Self::TarZstd(writer, builder) => {
69-
let mut tar_data = builder.into_inner().map_err(TmcError::TarWrite)?;
70-
let mut encoder = Encoder::new(writer, 0).map_err(TmcError::ZstdWrite)?;
71-
io::copy(&mut tar_data, &mut encoder).map_err(TmcError::ZstdWrite)?;
72-
encoder.finish().map_err(TmcError::ZstdWrite)?
67+
Self::TarZstd(mut writer, builder) => {
68+
let tar_data = builder.into_inner().map_err(TmcError::TarWrite)?;
69+
zstd::stream::copy_encode(tar_data.get_ref().as_slice(), &mut writer, 0)
70+
.map_err(TmcError::ZstdWrite)?;
71+
writer
7372
}
7473
Self::Zip(mut builder) => builder.finish()?,
7574
};

0 commit comments

Comments
 (0)