-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(toml): Ensure targets are in a deterministic order #13989
Conversation
With rust-lang#13713, we enumerate all targets in `Cargo.toml` on `cargo publish` and `cargo vendor`. However, the order of the targets is non-determistic. This can be annoying for comparing the published `Cargo.toml` across releases but even worse is the churn it causes for `cargo vendor`. So we sort all the targets during publish. This keeps costs minimal with the following risks - If the non-determinism shows up in a way that affects developers during development - If there is a reason the user wants to control target order for explicit targets Fixes rust-lang#13988
r? @weihanglo rustbot has assigned @weihanglo. Use |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes sense. I just checked the other sections. They should all be controlled by BTreeMap so should be fine.
Thanks for the fix!
@bors r+ |
☀️ Test successful - checks-actions |
1 similar comment
☀️ Test successful - checks-actions |
👀 Test was successful, but fast-forwarding failed: 422 Changes must be made through a pull request. |
Update cargo 9 commits in 431db31d0dbeda320caf8ef8535ea48eb3093407..7a6fad0984d28c8330974636972aa296b67c4513 2024-05-28 18:17:31 +0000 to 2024-05-31 22:26:03 +0000 - fix(config): Ensure `--config net.git-fetch-with-cli=true` is respected (rust-lang/cargo#13992) - Fix libcurl proxy documentation link (rust-lang/cargo#13990) - fix(new): Dont say were adding to a workspace when a regular package is in root (rust-lang/cargo#13987) - fix: adjust custom err from cert-check due to libgit2 1.8 change (rust-lang/cargo#13970) - fix(toml): Ensure targets are in a deterministic order (rust-lang/cargo#13989) - doc(cargo-package): explain no guarantee of vcs provenance (rust-lang/cargo#13984) - chore: fix some comments (rust-lang/cargo#13982) - feat: stabilize `cargo update --precise <yanked>` (rust-lang/cargo#13974) - Update openssl-src to 111.28.2+1.1.1w (rust-lang/cargo#13976) r? ghost
fix(vendor): Ensure sort happens for vendor ### What does this PR try to resolve? This is a follow up to #13989 which sorted in time for `cargo package` and `cargo publish` but too late for `cargo vendor`. This moves the sorting earlier and puts it in a place that will only run when resolving. Fixes #13988 ### How should we test and review this PR? I had assumed tests existed but just happened to write in a way that leads to sorting. Apparently not. I've added some tests. The `cargo vendor` test has to elide paths because `/`s are normalized during publish, rather than resolve, so the output varies across platforms, even with cargo-test-support normalizing slashes because `toml` will switch between `"` and `'`. ### Additional information
What does this PR try to resolve?
With #13713, we enumerate all targets in
Cargo.toml
oncargo publish
andcargo vendor
.However, the order of the targets is non-determistic. This can be annoying for comparing the published
Cargo.toml
across releases but even worse is the churn it causes forcargo vendor
.So we sort all the targets during publish.
This keeps costs minimal with the following risks
Fixes #13988
How should we test and review this PR?
As for writing of tests, I'm unsure why none of our existing tests failed which makes it unclear to me what would be needed to write a test for this.
Additional information