-
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
feat: stabilize lockfile v4 #12852
feat: stabilize lockfile v4 #12852
Conversation
r? @ehuss (rustbot has picked a reviewer for you, use r? to override) |
Is there a reason we are wanting to go forward with this now rather than wait? |
I cannot predict how long we will wait for other issues getting addressed. It's more meaningful to ship a fix when we already have one. I've waited for #10801 but #11938 failed. I gave a shot on #12464 but after chatting with Eh2406 today, I quit. Fixing #12464 entails a fundamental overhaul of the current resolver that I am not capable of. |
@@ -80,11 +80,9 @@ pub enum ResolveVersion { | |||
/// V3 by default staring in 1.53. | |||
#[default] |
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.
What do we plan to do to track updating the default
?
btw now that we have MSRV piped into the resolve logic (#12560), should we make the default based on MSRV with a fallback if no MSRV is set?
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.
See #12120 (comment)
I'll post another PR for doc update.
For MSRV-aware lockfile generating, see #12861.
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.
At the latest, we might want to default to the new format for 2024-edition crates, since those crates won't build with old cargo anyway so there won't be any "flapping" between formats for different Cargo versions.
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.
Further more, it does sound like we might want to check if edition
and rust-version
are in sync and don't conflict with each other.
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.
We should have checks that the rust-version isn't older than the edition allows.
Falling back to an edition check if the rust-version isn't set would be useful. The problem is we don't have a workspace edition field. We could do something like rust-version
and check the oldest edition present.
let unstable_lockfile_version_allowed = ws.config().cli_unstable().next_lockfile_bump; | ||
let path_deps = build_path_deps(ws)?; | ||
let mut checksums = HashMap::new(); | ||
|
||
let mut version = match self.version { | ||
Some(4) if ws.config().nightly_features_allowed => { | ||
if unstable_lockfile_version_allowed { |
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.
Should we create V5 at the same time?
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.
Nice suggestion. Done.
Team member @epage has proposed to merge this. The next step is review by the rest of the tagged team members: No concerns currently listed. Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up! See this document for info about what commands tagged team members can give me. |
☔ The latest upstream changes (presumably #12860) made this pull request unmergeable. Please resolve the merge conflicts. |
75f409f
to
bec5a26
Compare
🔔 This is now entering its final comment period, as per the review above. 🔔 |
The final comment period, with a disposition to merge, as per the review above, is now complete. As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed. This will be merged soon. |
Thanks, sorry for the delay! @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 24 commits in 7bb7b539558dc88bea44cee4168b6269bf8177b0..cdf84b69d0416c57ac9dc3459af80dfb4883d27a 2024-01-20 00:15:32 +0000 to 2024-02-02 19:39:16 +0000 - Apply `-Zpanic-abort-tests` to doctests too (rust-lang/cargo#13388) - Don't print rustdoc command lines on failure by default (rust-lang/cargo#13387) - Ensure `nonzero_exit_code` test isn't affected by developers `RUST_BACKTRACE` setting (rust-lang/cargo#13385) - Add `docsrs` cfg as a well known `--check-cfg` (rust-lang/cargo#13383) - fix(new): Print a note, rather than a comment, for more information (rust-lang/cargo#13371) - Change tests to support changes to suggestion (rust-lang/cargo#13382) - chore(ci): enable m1 runner (rust-lang/cargo#13377) - fix(toml): Improve map/sequence error message (rust-lang/cargo#13376) - fix(diagnostic): Don't panic on empty spans (rust-lang/cargo#13375) - doc: Hide `cargo-fetch` description in offline man page (rust-lang/cargo#13364) - feat: stabilize lockfile v4 (rust-lang/cargo#12852) - fix(new): Print a 'Creating', rather than 'Created' status (rust-lang/cargo#13367) - fix: use spec id instead of name to match package (rust-lang/cargo#13335) - refactor(shell): Use new fancy anstyle API (rust-lang/cargo#13368) - feat(cargo-update): `--precise` to allow yanked versions (rust-lang/cargo#13333) - refactor: remove unnecessary Option in `Freshness::Dirty` (rust-lang/cargo#13361) - doc: Replace version with `latest` for jobserver link (rust-lang/cargo#13366) - test: data layout fix for `x86_64-unknown-none-gnu` (rust-lang/cargo#13362) - docs(ref): Try to improve reg auth docs (rust-lang/cargo#13351) - fix typo of rustbuild, instead of rustuild (rust-lang/cargo#13357) - fix(config): Deprecate non-extension files (rust-lang/cargo#13349) - fix(cli): Improve errors related to cargo script (rust-lang/cargo#13346) - fix list option description starting with uppercase (rust-lang/cargo#13344) - Fix typo in test (rust-lang/cargo#13342)
Pkgsrc changes: * Adapt checksums and patches, some have beene intregrated upstream. Upstream chnages: Version 1.78.0 (2024-05-02) =========================== Language -------- - [Stabilize `#[cfg(target_abi = ...)]`] (rust-lang/rust#119590) - [Stabilize the `#[diagnostic]` namespace and `#[diagnostic::on_unimplemented]` attribute] (rust-lang/rust#119888) - [Make async-fn-in-trait implementable with concrete signatures] (rust-lang/rust#120103) - [Make matching on NaN a hard error, and remove the rest of `illegal_floating_point_literal_pattern`] (rust-lang/rust#116284) - [static mut: allow mutable reference to arbitrary types, not just slices and arrays] (rust-lang/rust#117614) - [Extend `invalid_reference_casting` to include references casting to bigger memory layout] (rust-lang/rust#118983) - [Add `non_contiguous_range_endpoints` lint for singleton gaps after exclusive ranges] (rust-lang/rust#118879) - [Add `wasm_c_abi` lint for use of older wasm-bindgen versions] (rust-lang/rust#117918) This lint currently only works when using Cargo. - [Update `indirect_structural_match` and `pointer_structural_match` lints to match RFC] (rust-lang/rust#120423) - [Make non-`PartialEq`-typed consts as patterns a hard error] (rust-lang/rust#120805) - [Split `refining_impl_trait` lint into `_reachable`, `_internal` variants] (rust-lang/rust#121720) - [Remove unnecessary type inference when using associated types inside of higher ranked `where`-bounds] (rust-lang/rust#119849) - [Weaken eager detection of cyclic types during type inference] (rust-lang/rust#119989) - [`trait Trait: Auto {}`: allow upcasting from `dyn Trait` to `dyn Auto`] (rust-lang/rust#119338) Compiler -------- - [Made `INVALID_DOC_ATTRIBUTES` lint deny by default] (rust-lang/rust#111505) - [Increase accuracy of redundant `use` checking] (rust-lang/rust#117772) - [Suggest moving definition if non-found macro_rules! is defined later] (rust-lang/rust#121130) - [Lower transmutes from int to pointer type as gep on null] (rust-lang/rust#121282) Target changes: - [Windows tier 1 targets now require at least Windows 10] (rust-lang/rust#115141) - [Enable CMPXCHG16B, SSE3, SAHF/LAHF and 128-bit Atomics in tier 1 Windows] (rust-lang/rust#120820) - [Add `wasm32-wasip1` tier 2 (without host tools) target] (rust-lang/rust#120468) - [Add `wasm32-wasip2` tier 3 target] (rust-lang/rust#119616) - [Rename `wasm32-wasi-preview1-threads` to `wasm32-wasip1-threads`] (rust-lang/rust#122170) - [Add `arm64ec-pc-windows-msvc` tier 3 target] (rust-lang/rust#119199) - [Add `armv8r-none-eabihf` tier 3 target for the Cortex-R52] (rust-lang/rust#110482) - [Add `loongarch64-unknown-linux-musl` tier 3 target] (rust-lang/rust#121832) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Bump Unicode to version 15.1.0, regenerate tables] (rust-lang/rust#120777) - [Make align_offset, align_to well-behaved in all cases] (rust-lang/rust#121201) - [PartialEq, PartialOrd: document expectations for transitive chains] (rust-lang/rust#115386) - [Optimize away poison guards when std is built with panic=abort] (rust-lang/rust#100603) - [Replace pthread `RwLock` with custom implementation] (rust-lang/rust#110211) - [Implement unwind safety for Condvar on all platforms] (rust-lang/rust#121768) - [Add ASCII fast-path for `char::is_grapheme_extended`] (rust-lang/rust#121138) Stabilized APIs --------------- - [`impl Read for &Stdin`] (https://doc.rust-lang.org/stable/std/io/struct.Stdin.html#impl-Read-for-%26Stdin) - [Accept non `'static` lifetimes for several `std::error::Error` related implementations] (rust-lang/rust#113833) - [Make `impl<Fd: AsFd>` impl take `?Sized`] (rust-lang/rust#114655) - [`impl From<TryReserveError> for io::Error`] (https://doc.rust-lang.org/stable/std/io/struct.Error.html#impl-From%3CTryReserveError%3E-for-Error) These APIs are now stable in const contexts: - [`Barrier::new()`] (https://doc.rust-lang.org/stable/std/sync/struct.Barrier.html#method.new) Cargo ----- - [Stabilize lockfile v4](rust-lang/cargo#12852) - [Respect `rust-version` when generating lockfile] (rust-lang/cargo#12861) - [Control `--charset` via auto-detecting config value] (rust-lang/cargo#13337) - [Support `target.<triple>.rustdocflags` officially] (rust-lang/cargo#13197) - [Stabilize global cache data tracking] (rust-lang/cargo#13492) Misc ---- - [rustdoc: add `--test-builder-wrapper` arg to support wrappers such as RUSTC_WRAPPER when building doctests] (rust-lang/rust#114651) Compatibility Notes ------------------- - [Many unsafe precondition checks now run for user code with debug assertions enabled] (rust-lang/rust#120594) This change helps users catch undefined behavior in their code, though the details of how much is checked are generally not stable. - [riscv only supports split_debuginfo=off for now] (rust-lang/rust#120518) - [Consistently check bounds on hidden types of `impl Trait`] (rust-lang/rust#121679) - [Change equality of higher ranked types to not rely on subtyping] (rust-lang/rust#118247) - [When called, additionally check bounds on normalized function return type] (rust-lang/rust#118882) - [Expand coverage for `arithmetic_overflow` lint] (rust-lang/rust#119432) Internal Changes ---------------- These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools. - [Update to LLVM 18](rust-lang/rust#120055) - [Build `rustc` with 1CGU on `x86_64-pc-windows-msvc`] (rust-lang/rust#112267) - [Build `rustc` with 1CGU on `x86_64-apple-darwin`] (rust-lang/rust#112268) - [Introduce `run-make` V2 infrastructure, a `run_make_support` library and port over 2 tests as example] (rust-lang/rust#113026) - [Windows: Implement condvar, mutex and rwlock using futex] (rust-lang/rust#121956)
Cargo.lock was updated to version 4 manually. All Git refs in our Cargo.lock appear to be encoded correctly. See: - rust-lang/cargo#12280 - rust-lang/cargo#12852 The clippy::incompatible_msrv lint may be useful in the future. We currently do not specify rust-version in Cargo.toml. Our libraries are not designed to be used outside Grandine. rust-toolchain.toml makes rust-version redundant for builds inside this repository. See: - https://doc.rust-lang.org/1.78.0/cargo/reference/manifest.html#the-rust-version-field - https://rust-lang.github.io/rust-clippy/rust-1.78.0/#/incompatible_msrv The clippy::lint_groups_priority lint produces false positives: - rust-lang/cargo#12918 (comment) - rust-lang/rust-clippy#12270 Luckily, lints inherited from a workspace do not trigger it. The issue appears to be fixed in rust-lang/rust-clippy#12827. The reason public functions trigger clippy::single_call_fn is actually our setting of avoid-breaking-exported-api. We assumed it was a bug.
In 1.78.0 Cargo introduce v4 lockfile: rust-lang/cargo#12852 The v3-to-v4 change is minimal: encode URL params with URL encoding. However, roundtrip test failed because v4 we can only have one serialization implementation at a time. I don't know how to proceed. Maybe we could * Make v4 serialization the default when it becomes the default in Cargo * Provide API for people to generate different versions of lockfiles. * Work with upstream Cargo with an in-tree pacakge for lock serialization. (This is on me?) Opened this PR for discussion.
In 1.78.0 Cargo introduce v4 lockfile: rust-lang/cargo#12852 The v3-to-v4 change is minimal: encode URL params with URL encoding. However, roundtrip test failed because v4 we can only have one serialization implementation at a time. I don't know how to proceed. Maybe we could * Make v4 serialization the default when it becomes the default in Cargo * Provide API for people to generate different versions of lockfiles. * Work with upstream Cargo with an in-tree pacakge for lock serialization. (This is on me?) Opened this PR for discussion.
Cargo.lock was updated to version 4 manually. All Git refs in our Cargo.lock appear to be encoded correctly. See: - rust-lang/cargo#12280 - rust-lang/cargo#12852 The clippy::incompatible_msrv lint may be useful in the future. We currently do not specify rust-version in Cargo.toml. Our libraries are not designed to be used outside Grandine. rust-toolchain.toml makes rust-version redundant for builds inside this repository. See: - https://doc.rust-lang.org/1.78.0/cargo/reference/manifest.html#the-rust-version-field - https://rust-lang.github.io/rust-clippy/rust-1.78.0/#/incompatible_msrv The clippy::lint_groups_priority lint produces false positives: - rust-lang/cargo#12918 (comment) - rust-lang/rust-clippy#12270 Luckily, lints inherited from a workspace do not trigger it. The issue appears to be fixed in rust-lang/rust-clippy#12827. The reason public functions trigger clippy::single_call_fn is actually our setting of avoid-breaking-exported-api. We assumed it was a bug.
In 1.78.0 Cargo introduce v4 lockfile: rust-lang/cargo#12852 The v3-to-v4 change is minimal: encode URL params with URL encoding. However, roundtrip test failed because v4 we can only have one serialization implementation at a time. I don't know how to proceed. Maybe we could * Make v4 serialization the default when it becomes the default in Cargo * Provide API for people to generate different versions of lockfiles. * Work with upstream Cargo with an in-tree pacakge for lock serialization. (This is on me?) Opened this PR for discussion.
In 1.78.0 Cargo introduce v4 lockfile: rust-lang/cargo#12852 The v3-to-v4 change is minimal: encode URL params with URL encoding. However, roundtrip test failed because v4 we can only have one serialization implementation at a time. I don't know how to proceed. Maybe we could * Make v4 serialization the default when it becomes the default in Cargo * Provide API for people to generate different versions of lockfiles. * Work with upstream Cargo with an in-tree pacakge for lock serialization. (This is on me?) Opened this PR for discussion.
What does this PR try to resolve?
Stabilize lockfile v4, which effectively contains only one change: #12280.
How should we test and review this PR?
v4 cannot be constructed at this moment unless people deliberately change their lockfiles to
version = 4
. No user-perceivable change is involved.The change of SourceId serialization is postponed to the time v4 becoming the default lockfile version. That seems more reasonable than doing it now.
Additional information
I failed to resolve any other issue listed in #12120. They are either too complicated or not worthy. Therefore I think we can just ship this without waiting.