From e62fd798b3fc25c7187bbefde607abc1c21ba098 Mon Sep 17 00:00:00 2001 From: Olexiy Buyanskyy Date: Mon, 11 Sep 2023 14:43:28 +0300 Subject: [PATCH] Fix installation on MacOs --- Cargo.lock | 59 +++++++++++++++++----------------- plugins/updater/Cargo.toml | 3 ++ plugins/updater/src/updater.rs | 36 ++++----------------- 3 files changed, 39 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 65bf70eb..eca69f7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -230,7 +230,7 @@ checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] name = "api" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.4" dependencies = [ "log", "serde", @@ -1665,9 +1665,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", "miniz_oxide", @@ -5620,14 +5620,14 @@ dependencies = [ [[package]] name = "tauri-plugin-app" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "tauri", ] [[package]] name = "tauri-plugin-authenticator" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "authenticator", "base64 0.21.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "auto-launch", "log", @@ -5658,7 +5658,7 @@ dependencies = [ [[package]] name = "tauri-plugin-cli" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "clap", "log", @@ -5670,7 +5670,7 @@ dependencies = [ [[package]] name = "tauri-plugin-clipboard-manager" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "arboard", "log", @@ -5683,7 +5683,7 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "glib", "log", @@ -5699,7 +5699,7 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "anyhow", "glob", @@ -5713,7 +5713,7 @@ dependencies = [ [[package]] name = "tauri-plugin-global-shortcut" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "global-hotkey", "log", @@ -5725,7 +5725,7 @@ dependencies = [ [[package]] name = "tauri-plugin-http" -version = "2.0.0-alpha.2" +version = "2.0.0-alpha.3" dependencies = [ "data-url", "glob", @@ -5741,7 +5741,7 @@ dependencies = [ [[package]] name = "tauri-plugin-localhost" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "http", "log", @@ -5754,7 +5754,7 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "android_logger", "byte-unit", @@ -5773,7 +5773,7 @@ dependencies = [ [[package]] name = "tauri-plugin-notification" -version = "2.0.0-alpha.2" +version = "2.0.0-alpha.3" dependencies = [ "log", "notify-rust", @@ -5791,7 +5791,7 @@ dependencies = [ [[package]] name = "tauri-plugin-os" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "gethostname 0.4.3", "log", @@ -5806,7 +5806,7 @@ dependencies = [ [[package]] name = "tauri-plugin-persisted-scope" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "aho-corasick", "bincode", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "tauri-plugin-positioner" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "log", "serde", @@ -5832,14 +5832,14 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "tauri", ] [[package]] name = "tauri-plugin-shell" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "encoding_rs", "log", @@ -5855,7 +5855,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "log", "serde", @@ -5868,7 +5868,7 @@ dependencies = [ [[package]] name = "tauri-plugin-sql" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "futures-core", "log", @@ -5883,7 +5883,7 @@ dependencies = [ [[package]] name = "tauri-plugin-store" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "log", "serde", @@ -5894,7 +5894,7 @@ dependencies = [ [[package]] name = "tauri-plugin-stronghold" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "hex", "iota-crypto 0.23.0", @@ -5911,10 +5911,11 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "base64 0.21.2", "dirs-next", + "flate2", "futures-util", "http", "minisign-verify", @@ -5936,7 +5937,7 @@ dependencies = [ [[package]] name = "tauri-plugin-upload" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "futures-util", "log", @@ -5952,7 +5953,7 @@ dependencies = [ [[package]] name = "tauri-plugin-websocket" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "futures-util", "log", @@ -5967,7 +5968,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "serde", "tauri", @@ -5976,7 +5977,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "2.0.0-alpha.1" +version = "2.0.0-alpha.2" dependencies = [ "bincode", "bitflags 2.3.3", diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index 240666b7..f18c6e3c 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -32,6 +32,9 @@ tar = "0.4" [target."cfg(target_os = \"windows\")".dependencies] zip = { version = "0.6", default-features = false } +[target."cfg(target_os = \"macos\")".dependencies] +flate2 = "1.0.27" + [dev-dependencies] mockito = "0.31" diff --git a/plugins/updater/src/updater.rs b/plugins/updater/src/updater.rs index 385e1e87..5a406c5b 100644 --- a/plugins/updater/src/updater.rs +++ b/plugins/updater/src/updater.rs @@ -658,10 +658,8 @@ impl Update { #[cfg(target_os = "macos")] fn install_inner(&self, bytes: Vec) -> Result<()> { let archive = Cursor::new(bytes); - let mut extracted_files: Vec = Vec::new(); + let archive = flate2::read::GzDecoder::new(archive); - // the first file in the tar.gz will always be - // /Contents let tmp_dir = tempfile::Builder::new() .prefix("tauri_current_app") .tempdir()?; @@ -670,33 +668,11 @@ impl Update { std::fs::rename(&self.extract_path, tmp_dir.path())?; let mut archive = tar::Archive::new(archive); - for mut entry in archive.entries()?.flatten() { - if let Ok(path) = entry.path() { - // skip the first folder (should be the app name) - let collected_path: PathBuf = path.iter().skip(1).collect(); - let extraction_path = &self.extract_path.join(collected_path); - - // if something went wrong during the extraction, we should restore previous app - if let Err(err) = entry.unpack(extraction_path) { - for file in &extracted_files { - // delete all the files we extracted - if file.is_dir() { - std::fs::remove_dir(file)?; - } else { - std::fs::remove_file(file)?; - } - } - std::fs::rename(tmp_dir.path(), &self.extract_path)?; - return Err(err.into()); - } - - extracted_files.push(extraction_path.to_path_buf()); - } - } - - let _ = std::process::Command::new("touch") - .arg(&self.extract_path) - .status(); + if let Err(err) = archive.unpack(&self.extract_path.join("..")) { + std::fs::remove_dir_all(&self.extract_path)?; + std::fs::rename(tmp_dir.path(), &self.extract_path)?; + return Err(err.into()); + }; Ok(()) }