From 20283096380f86595c959de8d5f045437e84c964 Mon Sep 17 00:00:00 2001 From: boasting-squirrel Date: Thu, 14 Mar 2019 20:30:06 +0100 Subject: Switched to tar-rs 0.4.22 and propagate no-symlink argument to tar generation --- src/archive.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/archive.rs') diff --git a/src/archive.rs b/src/archive.rs index b71d50f..b351fb9 100644 --- a/src/archive.rs +++ b/src/archive.rs @@ -49,14 +49,15 @@ impl CompressionMethod { pub fn create_archive_file( method: &CompressionMethod, dir: &PathBuf, + skip_symlinks: bool ) -> Result<(String, Bytes), errors::CompressionError> { match method { - CompressionMethod::TarGz => tgz_compress(&dir), + CompressionMethod::TarGz => tgz_compress(&dir, skip_symlinks), } } /// Compresses a given folder in .tar.gz format -fn tgz_compress(dir: &PathBuf) -> Result<(String, Bytes), errors::CompressionError> { +fn tgz_compress(dir: &PathBuf, skip_symlinks: bool) -> Result<(String, Bytes), errors::CompressionError> { let src_dir = dir.display().to_string(); let inner_folder = match dir.file_name() { Some(directory_name) => match directory_name.to_str() { @@ -76,7 +77,7 @@ fn tgz_compress(dir: &PathBuf) -> Result<(String, Bytes), errors::CompressionErr let dst_filename = format!("{}.tar", inner_folder); let dst_tgz_filename = format!("{}.gz", dst_filename); - let tar_content = tar(src_dir, inner_folder.to_string()) + let tar_content = tar(src_dir, inner_folder.to_string(), skip_symlinks) .context(errors::CompressionErrorKind::TarContentError)?; let gz_data = gzip(&tar_content).context(errors::CompressionErrorKind::GZipContentError)?; @@ -87,14 +88,11 @@ fn tgz_compress(dir: &PathBuf) -> Result<(String, Bytes), errors::CompressionErr } /// Creates a temporary tar file of a given directory, reads it and returns its content as bytes -fn tar(src_dir: String, inner_folder: String) -> Result, errors::CompressionError> { +fn tar(src_dir: String, inner_folder: String, skip_symlinks: bool) -> Result, errors::CompressionError> { // Create a TAR file of src_dir let mut tar_builder = Builder::new(Vec::new()); - // Temporary workaround for known issue: - // https://github.com/alexcrichton/tar-rs/issues/147 - // https://github.com/alexcrichton/tar-rs/issues/174 - tar_builder.follow_symlinks(false); + tar_builder.follow_symlinks(!skip_symlinks); tar_builder.append_dir_all(inner_folder, &src_dir).context( errors::CompressionErrorKind::TarBuildingError { message: format!( -- cgit v1.2.3