microsoft / windows-rs

Rust for Windows
https://kennykerr.ca/rust-getting-started/
Apache License 2.0
10.13k stars 473 forks source link

Avoid modifying source files in tests/standalone if they have not changed #3072

Closed sivadeilra closed 1 month ago

sivadeilra commented 1 month ago

This fixes a problem relating to the build script of the crates/tests/standalone crate. This build script runs bindgen on a variety of inputs and generates source code.

The problem is that the build script modifies source code during a build script, and does so unconditionally. Because this process is relatively slow, these filesystem writes sometimes interfere with Git operations, because Git sees the intermediate (partially modified) state of these source files. This has been a big hassle for me in running Git operations.

The solution is to provide an optional behavior for windows-bindgen, which will cause it to check the existing contents of a file and will only overwrite the file if the file's contents have changed. If they are the same, no further action is taken. This is not ideal -- it's not a good idea to have builds modifying source code -- but at least it only does so when the contents need to change. This avoids a lot of conflicts with Rust Analyzer, Git, etc.

kennykerr commented 1 month ago

I think this can be simplified by pushing the logic into the windows-bindgen crate. Here's what I mean: #3079

The other improvements, like using windows-bindgen instead of riddle is great too, but those can be introduced separately.