From 3533670d924f0412723e8f8a8e7d87c3b9c7f880 Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Tue, 17 Mar 2026 09:02:06 +0700 Subject: [PATCH] fix: narrow cache miss recovery behavior --- src/cache.rs | 15 ++++++++------- src/config.rs | 5 ++++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/cache.rs b/src/cache.rs index 2dd19e0..875ff6a 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -166,12 +166,10 @@ impl Cache { let raw = match fs::read_to_string(&path) { Ok(s) => s, Err(e) => { - eprintln!( - "warning: corrupted cache entry for {}/{}, treating as miss: {}", - data_type, symbol, e - ); - let _ = fs::remove_file(&path); - return Ok(None); + if e.kind() == std::io::ErrorKind::NotFound { + return Ok(None); + } + return Err(IdxError::Io(e.to_string())); } }; let entry: CacheEntry = match serde_json::from_str(&raw) { @@ -207,7 +205,10 @@ pub fn cache_dir() -> Result { if let Ok(dir) = std::env::var("XDG_CACHE_HOME") && !dir.is_empty() { - return Ok(PathBuf::from(dir).join("idx")); + let path = PathBuf::from(dir); + if path.is_absolute() { + return Ok(path.join("idx")); + } } ProjectDirs::from("", "", "idx") .map(|d| d.cache_dir().to_path_buf()) diff --git a/src/config.rs b/src/config.rs index 75b029a..0784c96 100644 --- a/src/config.rs +++ b/src/config.rs @@ -200,7 +200,10 @@ pub fn config_path() -> Result { if let Ok(dir) = std::env::var("XDG_CONFIG_HOME") && !dir.is_empty() { - return Ok(PathBuf::from(dir).join("idx").join("config.toml")); + let path = PathBuf::from(dir); + if path.is_absolute() { + return Ok(path.join("idx").join("config.toml")); + } } ProjectDirs::from("", "", "idx") .map(|d| d.config_dir().join("config.toml"))