Skip to content

Conversation

@weihanglo
Copy link
Member

@weihanglo weihanglo commented Nov 6, 2025

What does this PR try to resolve?

Before we iterated key values directly for config cli values,
so top level table name of config key is never tracked.
And that resulted in
registries.example.credential-provider becoming
example.credential-provider,
making is_nonmergable_list return false.

This fix replaces the manual traversal
with a direct ConfigValue::merge call.

Now we unify how config values merge, regardless theird sources.

Fixes #16209

How to test and review this PR?

There are some slight diagnostic regressions1.
I may try addressing them once later.

Footnotes

  1. Well, in cli_merge_failed test, the old one wasn't much better. It knew the failure was from --config CLI but didn't say anything about the actual include'd file. You need to look at the deeper cause and associate them together.

This show the problematic merge order of non-mergeable list
<rust-lang#16209>
@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 Nov 6, 2025
@rustbot
Copy link
Collaborator

rustbot commented Nov 6, 2025

r? @epage

rustbot has assigned @epage.
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

Before we iterated key values directly for config cli values,
so top level table name of config key is never tracked.
And that resulted in
`registries.example.credential-provider` becoming
`example.credential-provider`,
making `is_nonmergable_list` return false.

This fix replaces the manual traversal
with a direct `ConfigValue::merge` call.

Now we unify how config values merge, regardless theird sources.
The root config value container isn't from any external source,
so its definition should be built-in.
@epage epage enabled auto-merge November 6, 2025 15:08
@epage epage added this pull request to the merge queue Nov 6, 2025
Merged via the queue into rust-lang:master with commit d58031b Nov 6, 2025
25 checks passed
@rustbot rustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Nov 6, 2025
bors added a commit to rust-lang/rust that referenced this pull request Nov 8, 2025
Update cargo submodule

22 commits in 6368002885a04cbeae39a82cf5118f941559a40a..445fe4a68f469bf936b2fd81de2c503b233a7f4f
2025-10-31 14:31:52 +0000 to 2025-11-07 18:08:19 +0000
- fix(depinfo): prevent invalid trailing backslash on Windows (rust-lang/cargo#16223)
- refactor: Remove lazycell (rust-lang/cargo#16224)
- refactor: extract ConfigValue to its own module (rust-lang/cargo#16222)
- fix(config): non-mergeable list from cli should take priority (rust-lang/cargo#16220)
- fix(compile): build.warnings=deny shouldn't block hard warnings (rust-lang/cargo#16213)
- fix: display absolute path in the `missing in PATH` warning (rust-lang/cargo#16125)
- fix: non-mergeable list from config cli merge the same way  (rust-lang/cargo#16219)
- docs(contrib): Link out to rustc diagnostic style guide (rust-lang/cargo#16216)
- fix: Remove build-plan (rust-lang/cargo#16212)
- Add native completions for `--package` on various commands (rust-lang/cargo#16210)
- fix(completions): don't wrap completion item help in parenthesis (rust-lang/cargo#16215)
- refactor(locking): Make disabling locking on NFS mounts explicit (rust-lang/cargo#16177)
- docs(unstable): Move compile-time-deps out of Stabilized section (rust-lang/cargo#16211)
- docs(ref): Rename DEP_NAME_KEY to DEP_LINKS_KEY (rust-lang/cargo#16205)
- feat(build-analysis): emit rebuild reason log entry (rust-lang/cargo#16203)
- chore: Update dependencies (rust-lang/cargo#16200)
- chore(deps): update cargo-semver-checks to v0.45.0 (rust-lang/cargo#16190)
- chore(deps): update msrv (rust-lang/cargo#16178)
- refactor: embed deserialize validation logic in ProgressConfig (rust-lang/cargo#16194)
- refactor(gctx): extract config schema to a module (rust-lang/cargo#16195)
- chore: bump to 0.94.0; update changelog (rust-lang/cargo#16191)
- chore(deps): update rust crate gix to 0.74.0 (rust-lang/cargo#16186)

r? ghost
@rustbot rustbot added this to the 1.93.0 milestone Nov 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-configuration Area: cargo config files and env vars

Projects

None yet

Development

Successfully merging this pull request may close these issues.

nested nonmergeable lists from config cli got merged with file configs

3 participants