diff --git a/Cargo.lock b/Cargo.lock index d8cee0c..0ab0e3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,6 +203,7 @@ name = "breadarr-shared" version = "0.1.0" dependencies = [ "anyhow", + "bread-utils", "chrono", "reqwest", "serde", diff --git a/breadarr-shared/Cargo.toml b/breadarr-shared/Cargo.toml index 0018ea6..5900351 100644 --- a/breadarr-shared/Cargo.toml +++ b/breadarr-shared/Cargo.toml @@ -9,3 +9,5 @@ anyhow.workspace = true toml.workspace = true reqwest.workspace = true chrono.workspace = true +# TODO(owner): switch to tag-pinned git dependency once bread-utils is merged and tagged, matching the bread-theme pattern +bread-utils = { path = "../../bread-ecosystem-fix-worktree/bread-utils" } diff --git a/breadarr-shared/src/config.rs b/breadarr-shared/src/config.rs index 64e47b6..1a9928b 100644 --- a/breadarr-shared/src/config.rs +++ b/breadarr-shared/src/config.rs @@ -314,10 +314,16 @@ fn config_path() -> PathBuf { } fn expand_home(input: &str) -> PathBuf { + // Was: falls through to `PathBuf::from(input)` — a literal, unexpanded + // "~/..." string — whenever the `HOME` env var itself isn't set. + // PathBuf/std::fs never expand `~`, so that fallback silently produced + // a path relative to the current working directory instead of the + // user's actual home. Same bug class as breadclip-core/breadpad-shared/ + // breadmon (see bread_utils::xdg's doc comment); bread_utils::xdg::home_dir + // resolves a real home directory (falling back to `/root`, never a + // literal tilde) before this ever needs to fall back at all. if let Some(stripped) = input.strip_prefix("~/") { - if let Ok(home) = env::var("HOME") { - return Path::new(&home).join(stripped); - } + return bread_utils::xdg::home_dir().join(stripped); } PathBuf::from(input) }