From ea5a09215b8f77112d9b16375c89e4004982bed6 Mon Sep 17 00:00:00 2001 From: Skyler Hawthorne Date: Thu, 9 Oct 2025 17:10:08 -0400 Subject: [PATCH] fix recompiling every time in uv-python (#16214) Cargo is currently recompiling uv-python on every invocation because the minified JSON output file is getting a mod time newer than the last run. Instead, set the mod time of the output file to the same as the input file. --- crates/uv-python/build.rs | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/crates/uv-python/build.rs b/crates/uv-python/build.rs index f732624ca..fa606036f 100644 --- a/crates/uv-python/build.rs +++ b/crates/uv-python/build.rs @@ -1,3 +1,6 @@ +#[allow(clippy::disallowed_types)] +use std::fs::{File, FileTimes}; +use std::io::Write; use std::path::PathBuf; use std::{env, fs}; @@ -36,16 +39,37 @@ fn main() { let json_data: serde_json::Value = serde_json::from_str( #[allow(clippy::disallowed_methods)] - &fs::read_to_string(version_metadata).expect("Failed to read download-metadata.json"), + &fs::read_to_string(&version_metadata).expect("Failed to read download-metadata.json"), ) .expect("Failed to parse JSON"); let filtered_data = process_json(&json_data); + #[allow(clippy::disallowed_types)] + let mut out_file = File::create(version_metadata_minified) + .expect("failed to open download-metadata-minified.json"); + #[allow(clippy::disallowed_methods)] - fs::write( - version_metadata_minified, - serde_json::to_string(&filtered_data).expect("Failed to serialize JSON"), - ) - .expect("Failed to write minified JSON"); + out_file + .write_all( + serde_json::to_string(&filtered_data) + .expect("Failed to serialize JSON") + .as_bytes(), + ) + .expect("Failed to write minified JSON"); + + // Cargo uses the modified times of the paths specified in + // `rerun-if-changed`, so fetch the current file times and set them the same + // on the output file. + #[allow(clippy::disallowed_methods)] + let meta = + fs::metadata(version_metadata).expect("failed to read metadata for download-metadata.json"); + + out_file + .set_times( + FileTimes::new() + .set_accessed(meta.accessed().unwrap()) + .set_modified(meta.modified().unwrap()), + ) + .expect("failed to write file times to download-metadata-minified.json"); }