From caf10396bc99b048ff64de7c0027e67df2fe18da Mon Sep 17 00:00:00 2001 From: Cory Forsstrom Date: Fri, 2 Jul 2021 11:29:55 -0700 Subject: [PATCH 1/2] properly remove .lua and .lua.bak files --- Cargo.lock | 64 ++++++++++++++++++++++++++++ crates/core/Cargo.toml | 3 ++ crates/core/src/addon.rs | 2 +- crates/core/src/fs/addon.rs | 83 ++++++++++++++++++++++++++++++++++++- 4 files changed, 149 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8663ef8c..6887c133 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -113,6 +113,7 @@ dependencies = [ "serde_urlencoded", "serde_yaml", "tar", + "tempfile", "thiserror", "urlencoding", "walkdir", @@ -3128,6 +3129,18 @@ dependencies = [ "rand_hc 0.2.0", ] +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", +] + [[package]] name = "rand_chacha" version = "0.1.1" @@ -3148,6 +3161,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -3172,6 +3195,15 @@ dependencies = [ "getrandom 0.1.16", ] +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.2", +] + [[package]] name = "rand_hc" version = "0.1.0" @@ -3190,6 +3222,15 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core 0.6.3", +] + [[package]] name = "rand_isaac" version = "0.1.1" @@ -3346,6 +3387,15 @@ version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "retry" version = "1.2.0" @@ -3775,6 +3825,20 @@ dependencies = [ "xattr", ] +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "rand 0.8.4", + "redox_syscall 0.2.5", + "remove_dir_all", + "winapi 0.3.9", +] + [[package]] name = "textwrap" version = "0.11.0" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 5bf55043..aea30c84 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -52,6 +52,9 @@ urlencoding = "1.3.3" iced_native = { version = "0.4.0", optional = true } +[dev-dependencies] +tempfile = "3.2.0" + [target.'cfg(target_os = "macos")'.dependencies] flate2 = "1.0" tar = "0.4" diff --git a/crates/core/src/addon.rs b/crates/core/src/addon.rs index b3698323..a90a5df7 100644 --- a/crates/core/src/addon.rs +++ b/crates/core/src/addon.rs @@ -33,7 +33,7 @@ pub enum AddonState { /// Struct that stores the metadata parsed from an Addon folder's /// `.toc` file -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Default)] pub struct AddonFolder { /// ID is always the folder name pub id: String, diff --git a/crates/core/src/fs/addon.rs b/crates/core/src/fs/addon.rs index b27948ea..0d979e26 100644 --- a/crates/core/src/fs/addon.rs +++ b/crates/core/src/fs/addon.rs @@ -34,9 +34,9 @@ pub fn delete_saved_variables(addon_folders: &[AddonFolder], wtf_path: &Path) -> if parent_name == Some("SavedVariables") { let file_name = path - .file_stem() + .file_name() .and_then(|a| a.to_str()) - .map(|a| a.trim_end_matches(".bak")); + .map(|a| a.trim_end_matches(".bak").trim_end_matches(".lua")); // NOTE: Will reject "Foobar_". if let Some(file_name_str) = file_name { @@ -128,3 +128,82 @@ pub async fn install_addon( Ok(addon_folders) } + +#[cfg(test)] +mod test { + use std::fs; + + use tempfile::tempdir; + + use super::*; + + #[test] + fn test_delete_saved_variables() { + let folders = vec![ + AddonFolder { + id: "AddonA".to_string(), + ..Default::default() + }, + AddonFolder { + id: "AddonB".to_string(), + ..Default::default() + }, + AddonFolder { + id: "AddonC".to_string(), + ..Default::default() + }, + AddonFolder { + id: "AddonD".to_string(), + ..Default::default() + }, + AddonFolder { + id: "AddonE".to_string(), + ..Default::default() + }, + AddonFolder { + id: "AddonF".to_string(), + ..Default::default() + }, + AddonFolder { + id: "AddonG".to_string(), + ..Default::default() + }, + ]; + + let tempdir = tempdir().unwrap(); + let root = tempdir.path(); + let sv = root.join("SavedVariables"); + + fs::create_dir_all(&sv).unwrap(); + + let mut files = vec![]; + for (idx, folder) in folders.iter().enumerate() { + let mut name = if idx % 2 == 0 { + format!("{}.lua", &folder.id) + } else { + format!("{}.lua.bak", &folder.id) + }; + + // change filename of last file, it shouldn't get removed + if idx == folders.len() - 1 { + name = format!("{}.nonlua", &folder.id) + } + + let path = sv.join(&name); + fs::File::create(&path).unwrap(); + + files.push(path); + } + + delete_saved_variables(&folders, &root).unwrap(); + + let mut exists = 0; + for file in files { + if file.exists() { + exists += 1; + } + } + + assert_eq!(exists, 1); + } +} From ee253539411a5096a4a8ba8e7344d3e8cc06f885 Mon Sep 17 00:00:00 2001 From: Cory Forsstrom Date: Fri, 2 Jul 2021 11:32:30 -0700 Subject: [PATCH 2/2] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee3ca76d..47472718 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and `Removed`. - Fixed error importing Gitlab addons from repos under a nested subgroup - Fixed inconsistent size & styling in the segmented mode button +- Fixed bug where SavedVariables files ending in `.bak` weren't deleted ## [1.2.0] - 2021-05-18