Skip to content
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

Merged
merged 1 commit into from
May 31, 2024

Conversation

epage
Copy link
Contributor

@epage epage commented May 31, 2024

What does this PR try to resolve?

With #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 #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

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
@rustbot
Copy link
Collaborator

rustbot commented May 31, 2024

r? @weihanglo

rustbot has assigned @weihanglo.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added A-manifest Area: Cargo.toml issues S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels May 31, 2024
Copy link
Member

@weihanglo weihanglo left a 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!

@weihanglo
Copy link
Member

@bors r+

@bors
Copy link
Collaborator

bors commented May 31, 2024

📌 Commit 40b9fec has been approved by weihanglo

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels May 31, 2024
@bors
Copy link
Collaborator

bors commented May 31, 2024

⌛ Testing commit 40b9fec with merge 4a86f6f...

@bors
Copy link
Collaborator

bors commented May 31, 2024

☀️ Test successful - checks-actions
Approved by: weihanglo
Pushing 4a86f6f to master...

1 similar comment
@bors
Copy link
Collaborator

bors commented May 31, 2024

☀️ Test successful - checks-actions
Approved by: weihanglo
Pushing 4a86f6f to master...

@bors bors merged commit 4a86f6f into rust-lang:master May 31, 2024
21 checks passed
@bors
Copy link
Collaborator

bors commented May 31, 2024

👀 Test was successful, but fast-forwarding failed: 422 Changes must be made through a pull request.

@epage epage deleted the target-sort branch May 31, 2024 18:14
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 1, 2024
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
@rustbot rustbot added this to the 1.80.0 milestone Jun 1, 2024
bors added a commit that referenced this pull request Jun 3, 2024
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-manifest Area: Cargo.toml issues S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Non determinist vendoring of git dependencies
4 participants