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"); }