use anyhow::Result; use std::path::Path; /// Last-known-published version per package, so re-runs don't re-flag a /// version already handled. Deliberately just one file per package for /// now — this is where a real review-queue persistence layer plugs in /// later (see SPEC.md > Architecture > Reviewer queue). pub fn load_last_version(state_dir: &Path, name: &str) -> Option { std::fs::read_to_string(state_dir.join(format!("{name}.version"))) .ok() .map(|s| s.trim().to_string()) } pub fn save_last_version(state_dir: &Path, name: &str, version: &str) -> Result<()> { std::fs::create_dir_all(state_dir)?; std::fs::write(state_dir.join(format!("{name}.version")), version)?; Ok(()) } #[cfg(test)] mod tests { use super::*; #[test] fn load_last_version_missing_file_returns_none() { let dir = tempfile::tempdir().unwrap(); assert_eq!(load_last_version(dir.path(), "nonexistent"), None); } #[test] fn save_then_load_roundtrips() { let dir = tempfile::tempdir().unwrap(); save_last_version(dir.path(), "uv", "0.12.15").unwrap(); assert_eq!( load_last_version(dir.path(), "uv"), Some("0.12.15".to_string()) ); } #[test] fn load_last_version_trims_trailing_whitespace() { let dir = tempfile::tempdir().unwrap(); std::fs::write(dir.path().join("uv.version"), "0.12.15\n").unwrap(); assert_eq!( load_last_version(dir.path(), "uv"), Some("0.12.15".to_string()) ); } #[test] fn save_last_version_creates_state_dir_if_missing() { let dir = tempfile::tempdir().unwrap(); let nested = dir.path().join("nested/state"); save_last_version(&nested, "uv", "0.12.15").unwrap(); assert_eq!( load_last_version(&nested, "uv"), Some("0.12.15".to_string()) ); } }