From 784c15c05ccfe9ff67563b5fd97279fdb0e8d411 Mon Sep 17 00:00:00 2001 From: "Hatter Jiang@Pixelbook" Date: Sat, 18 Apr 2020 17:14:21 +0800 Subject: [PATCH] add compress_file --- Cargo.lock | 35 +++++++++++++++++++++++++++++++++++ Cargo.toml | 2 ++ src/main.rs | 2 +- src/zip_util.rs | 20 ++++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index a507a6e..87b4710 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -502,6 +502,17 @@ name = "fake-simd" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "filetime" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fixedbitset" version = "0.1.9" @@ -1061,6 +1072,7 @@ dependencies = [ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", "hmac 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "indicatif 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "json 0.11.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1068,6 +1080,7 @@ dependencies = [ "rust_util 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sequoia-openpgp 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", "urlencoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "zip 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1678,6 +1691,17 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "tar" +version = "0.4.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", + "xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "tempfile" version = "3.1.0" @@ -2044,6 +2068,14 @@ dependencies = [ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "xattr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "zip" version = "0.5.5" @@ -2118,6 +2150,7 @@ dependencies = [ "checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" "checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e" "checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" "checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" @@ -2249,6 +2282,7 @@ dependencies = [ "checksum subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" "checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" +"checksum tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "b3196bfbffbba3e57481b6ea32249fbaf590396a52505a2615adbb79d9d826d3" "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" "checksum term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" "checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327" @@ -2292,4 +2326,5 @@ dependencies = [ "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +"checksum xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" "checksum zip 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6df134e83b8f0f8153a094c7b0fd79dfebe437f1d76e7715afa18ed95ebe2fd7" diff --git a/Cargo.toml b/Cargo.toml index a7e9233..e8aae50 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,4 +25,6 @@ reqwest = "0.9.22" sequoia-openpgp = { version = "0.16.0", optional = true } chrono = "0.4.10" zip = "0.5.3" +tar = "0.4.26" +flate2 = "1.0.14" rust_util = "0.2.1" diff --git a/src/main.rs b/src/main.rs index 9b8932d..de0b107 100644 --- a/src/main.rs +++ b/src/main.rs @@ -131,7 +131,7 @@ fn process_config_item(options: &Options, config_item: &OSSBackupdConfigItem, #[cfg(not(feature = "use_zip"))] let zip_file = || { - if let Err(e) = zip_util::zip_file(target, temp_zip_file) { + if let Err(e) = zip_util::compress_file(target, temp_zip_file) { print_message(MessageType::ERROR, &format!("Error in zip file: {}, at item index: {}", e, item_index)); return false; }; diff --git a/src/zip_util.rs b/src/zip_util.rs index 0c89fad..41b2573 100644 --- a/src/zip_util.rs +++ b/src/zip_util.rs @@ -9,6 +9,10 @@ use zip::{ CompressionMethod, write::{ ZipWriter, FileOptions, }, }; +use flate2:: { + Compression, + write::GzEncoder, +}; use rust_util::{ XResult, new_box_ioerror, @@ -17,6 +21,22 @@ use rust_util::{ util_file::*, }; +pub fn compress_file(target: &str, compress_file: &str) -> XResult<()> { + match target { + target_zip if target_zip.ends_with(".zip") => zip_file(target, compress_file), + target_tar if target_tar.ends_with(".tar.gz") => tar_file(target, compress_file), + target => Err(new_box_ioerror(&format!("Unknown target type: {}", target))), + } +} + +pub fn tar_file(target: &str, tar_file: &str) -> XResult<()> { + let target_tar_gz = File::create(target)?; + let enc = GzEncoder::new(target_tar_gz, Compression::default()); + let mut tar = tar::Builder::new(enc); + tar.append_path(tar_file)?; + Ok(()) +} + // http://mvdnes.github.io/rust-docs/zip-rs/zip/index.html pub fn zip_file(target: &str, zip_file: &str) -> XResult<()> { if Path::new(zip_file).exists() {