diff --git a/crates/uv-build-backend/src/lib.rs b/crates/uv-build-backend/src/lib.rs index 5800d04d2..319925b6a 100644 --- a/crates/uv-build-backend/src/lib.rs +++ b/crates/uv-build-backend/src/lib.rs @@ -622,7 +622,7 @@ mod tests { // Check that the wheel is reproducible across platforms. assert_snapshot!( format!("{:x}", sha2::Sha256::digest(fs_err::read(&wheel_path).unwrap())), - @"ac3f68ac448023bca26de689d80401bff57f764396ae802bf4666234740ffbe3" + @"342bf60c8406144f459358cde92408686c1631fe22389d042ce80379e589d6ec" ); assert_snapshot!(build.wheel_contents.join("\n"), @r" built_by_uv-0.1.0.data/data/ diff --git a/crates/uv-build-backend/src/wheel.rs b/crates/uv-build-backend/src/wheel.rs index 6eeb899d0..4800bb435 100644 --- a/crates/uv-build-backend/src/wheel.rs +++ b/crates/uv-build-backend/src/wheel.rs @@ -621,8 +621,8 @@ impl ZipDirectoryWriter { path: &str, executable_bit: bool, ) -> Result, Error> { - // 644 is the default of the zip crate. - let permissions = if executable_bit { 775 } else { 664 }; + // Set file permissions: 644 (rw-r--r--) for regular files, 755 (rwxr-xr-x) for executables + let permissions = if executable_bit { 0o755 } else { 0o644 }; let options = zip::write::SimpleFileOptions::default() .unix_permissions(permissions) .compression_method(self.compression); @@ -634,7 +634,10 @@ impl ZipDirectoryWriter { impl DirectoryWriter for ZipDirectoryWriter { fn write_bytes(&mut self, path: &str, bytes: &[u8]) -> Result<(), Error> { trace!("Adding {}", path); - let options = zip::write::SimpleFileOptions::default().compression_method(self.compression); + // Set appropriate permissions for metadata files (644 = rw-r--r--) + let options = zip::write::SimpleFileOptions::default() + .unix_permissions(0o644) + .compression_method(self.compression); self.writer.start_file(path, options)?; self.writer.write_all(bytes)?;