Skip to content

fix(config): When merging, replace rather than combining specific configuration keys #15066

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 2 commits into from
Jan 21, 2025

Conversation

arlosi
Copy link
Contributor

@arlosi arlosi commented Jan 14, 2025

In general, Cargo merges lists in configuration by concatenating them. However, sometimes the lists don't make sense for merging, such as a program and its arguments. We had the UnmergedStringList type that handled this case for merging environment variables, but it did not work for multiple configs.

  • Removes the UnmergedStringList type, which only worked for preventing merging of environment variables with configuration.
  • Adds a new function is_nonmergable_list which hard-codes which configuration keys contain lists that should not be merged.

Fixes #14906

@rustbot
Copy link
Collaborator

rustbot commented Jan 14, 2025

r? @ehuss

rustbot has assigned @ehuss.
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-configuration Area: cargo config files and env vars S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 14, 2025
@epage
Copy link
Contributor

epage commented Jan 15, 2025

When we talked about this in the Cargo team meeting (2025-01-07), we were ok with this so long as we felt there was a proper way of fixing this later. One idea to do that was to delay merging until access. We're unsure how difficult that would be to implement.

@rustbot

This comment has been minimized.

Copy link
Contributor

@ehuss ehuss left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you rebase on latest master and resolve the conflict?

Copy link
Contributor

@ehuss ehuss left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

We discussed the concerns about potentially breaking behavior, since it is feasible someone is relying on something like runner concatenating arguments. Our perspective is that this fixes behavior that we weren't expecting, and brings it in line with how env merging works. We decided that we will monitor for any issues that get raised in nightly or beta, and consider backing it out. We'll make sure that the release notes for stable have a notice about this change.

@ehuss ehuss added this pull request to the merge queue Jan 21, 2025
Merged via the queue into rust-lang:master with commit 2668a4f Jan 21, 2025
21 checks passed
bors added a commit to rust-lang-ci/rust that referenced this pull request Jan 25, 2025
Update cargo

5 commits in 045bf21b36a2e1f3ed85e38278d1c3cc4305e134..cecde95c119a456c30e57d3e4b31fff5a7d83df4
2025-01-17 14:59:36 +0000 to 2025-01-24 17:15:24 +0000
- Remove unused `-C link-arg=-fuse-ld=lld` (rust-lang/cargo#15097)
- Remove `unsafe` by using `LazyLock` (rust-lang/cargo#15096)
- Print globs when workspace members can't be found (rust-lang/cargo#15093)
- Make --allow-dirty imply --allow-staged (rust-lang/cargo#15013)
- fix(config): When merging, replace rather than combining specific configuration keys (rust-lang/cargo#15066)
@rustbot rustbot added this to the 1.86.0 milestone Jan 25, 2025
github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Jan 26, 2025
Update cargo

5 commits in 045bf21b36a2e1f3ed85e38278d1c3cc4305e134..cecde95c119a456c30e57d3e4b31fff5a7d83df4
2025-01-17 14:59:36 +0000 to 2025-01-24 17:15:24 +0000
- Remove unused `-C link-arg=-fuse-ld=lld` (rust-lang/cargo#15097)
- Remove `unsafe` by using `LazyLock` (rust-lang/cargo#15096)
- Print globs when workspace members can't be found (rust-lang/cargo#15093)
- Make --allow-dirty imply --allow-staged (rust-lang/cargo#15013)
- fix(config): When merging, replace rather than combining specific configuration keys (rust-lang/cargo#15066)
github-actions bot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Jan 27, 2025
Update cargo

5 commits in 045bf21b36a2e1f3ed85e38278d1c3cc4305e134..cecde95c119a456c30e57d3e4b31fff5a7d83df4
2025-01-17 14:59:36 +0000 to 2025-01-24 17:15:24 +0000
- Remove unused `-C link-arg=-fuse-ld=lld` (rust-lang/cargo#15097)
- Remove `unsafe` by using `LazyLock` (rust-lang/cargo#15096)
- Print globs when workspace members can't be found (rust-lang/cargo#15093)
- Make --allow-dirty imply --allow-staged (rust-lang/cargo#15013)
- fix(config): When merging, replace rather than combining specific configuration keys (rust-lang/cargo#15066)
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Apr 9, 2025
Upstream changes relative to 1.85.1:

Version 1.86.0 (2025-04-03)
==========================

Language
--------
- [Stabilize upcasting trait objects to supertraits.]
  (rust-lang/rust#134367)
- [Allow safe functions to be marked with the `#[target_feature]` attribute.]
  (rust-lang/rust#134090)
- [The `missing_abi` lint now warns-by-default.]
  (rust-lang/rust#132397)
- Rust now lints about double negations, to catch cases that might
  have intended to be a prefix decrement operator (`--x`) as written
  in other languages. This was previously a clippy lint,
  `clippy::double_neg`, and is [now available directly in Rust as
  `double_negations`.]
  (rust-lang/rust#126604)
- [More pointers are now detected as definitely not-null based on
  their alignment in const eval.]
  (rust-lang/rust#133700)
- [Empty `repr()` attribute applied to invalid items are now
  correctly rejected.]
  (rust-lang/rust#133925)
- [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer
  accepted in more places than intended.]
  (rust-lang/rust#134276)

Compiler
--------
- [Debug-assert that raw pointers are non-null on access.]
  (rust-lang/rust#134424)
- [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2`
  to match Cargo's defaults.]
  (rust-lang/rust#135439)
- [Fix emission of `overflowing_literals` under certain macro environments.]
  (rust-lang/rust#136393)

Platform Support
----------------
- [Replace `i686-unknown-redox` target with `i586-unknown-redox`.]
  (rust-lang/rust#136698)
- [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.]
  (rust-lang/rust#136700)
- New tier 3 targets:
  - [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`]
    (rust-lang/rust#133631).
    For supporting Neutrino QNX 7.1 with `io-socket` network stack.
  - [`{aarch64-unknown,x86_64-pc}-nto-qnx800`]
    (rust-lang/rust#133631).
    For supporting Neutrino QNX 8.0 (`no_std`-only).
  - [`{x86_64,i686}-win7-windows-gnu`]
    (rust-lang/rust#134609).
    Intended for backwards compatibility with Windows 7.
    `{x86_64,i686}-win7-windows-msvc` are the Windows MSVC counterparts
    that already exist as Tier 3 targets.
  - [`amdgcn-amd-amdhsa`](rust-lang/rust#134740).
  - [`x86_64-pc-cygwin`](rust-lang/rust#134999).
  - [`{mips,mipsel}-mti-none-elf`]
    (rust-lang/rust#135074).
    Initial bare-metal support.
  - [`m68k-unknown-none-elf`](rust-lang/rust#135085).
  - [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and
    `thumbv7a-nuttx-{eabi,eabihf}`]
    (rust-lang/rust#135757).

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

Libraries
---------
- The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes:
  &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from
  an opaque struct to an enum]
  (rust-lang/rust#134143), allowing users
  to examine why the conversion failed.
- [Remove `RustcDecodable` and `RustcEncodable`.]
  (rust-lang/rust#134272)
- [Deprecate libtest's `--logfile` option.]
  (rust-lang/rust#134283)
- [On recent versions of Windows, `std::fs::remove_file` will now
  remove read-only files.]
  (rust-lang/rust#134679)

Stabilized APIs
---------------

- [`{float}::next_down`]
  (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down)
- [`{float}::next_up`]
  (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up)
- [`<[_]>::get_disjoint_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut)
- [`<[_]>::get_disjoint_unchecked_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut)
- [`slice::GetDisjointMutError`]
  (https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html)
- [`HashMap::get_disjoint_mut`]
  (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut)
- [`HashMap::get_disjoint_unchecked_mut`]
  (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut)
- [`NonZero::count_ones`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones)
- [`Vec::pop_if`]
  (https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if)
- [`sync::Once::wait`]
  (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait)
- [`sync::Once::wait_force`]
  (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force)
- [`sync::OnceLock::wait`]
  (https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)

These APIs are now stable in const contexts:

- [`hint::black_box`]
  (https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`io::Cursor::get_mut`]
  (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut)
- [`io::Cursor::set_position`]
  (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position)
- [`str::is_char_boundary`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary)
- [`str::split_at`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at)
- [`str::split_at_checked`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked)
- [`str::split_at_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut)
- [`str::split_at_mut_checked`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)

Cargo
-----
- [When merging, replace rather than combine configuration keys
  that refer to a program path and its arguments.]
  (rust-lang/cargo#15066)
- [Error if both `--package` and `--workspace` are passed but the
  requested package is missing.]
  (rust-lang/cargo#15071) This was previously
  silently ignored, which was considered a bug since missing packages
  should be reported.
- [Deprecate the token argument in `cargo login` to avoid shell history leaks.]
  (rust-lang/cargo#15057)
- [Simplify the implementation of `SourceID` comparisons.]
  (rust-lang/cargo#14980) This may
  potentially change behavior if the canonicalized URL compares
  differently in alternative registries.

Rustdoc
-----
- [Add a sans-serif font setting.]
  (rust-lang/rust#133636)

Compatibility Notes
-------------------
- [The `wasm_c_abi` future compatibility warning is now a hard error.]
  (rust-lang/rust#133951)
  Users of `wasm-bindgen` should upgrade to at least version 0.2.89,
  otherwise compilation will fail.
- [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.]
  (rust-lang/rust#134300)
- [The future incompatibility lint `cenum_impl_drop_cast` has been
  made into a hard error.]
  (rust-lang/rust#135964) This means it is
  now an error to cast a field-less enum to an integer if the enum
  implements `Drop`.
- [SSE2 is now required for "i686" 32-bit x86 hard-float targets;
  disabling it causes a warning that will become a hard error
  eventually.]
  (rust-lang/rust#137037) To compile for
  pre-SSE2 32-bit x86, use a "i586" target instead.

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.

- [Build the rustc on AArch64 Linux with ThinLTO + PGO.]
  (rust-lang/rust#133807)
  The ARM 64-bit compiler (AArch64) on Linux is now optimized with
  ThinLTO and PGO, similar to the optimizations we have already
  performed for the x86-64 compiler on Linux. This should make it
  up to 30% faster.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-configuration Area: cargo config files and env vars S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Configuration merge doesn't make sense for credential-provider
4 participants