-
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
Config file loaded via CLI takes priority over env vars #11077
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
r? @ehuss (rust-highfive has picked a reviewer for you, use r? to override) |
rust-highfive
added
the
S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
label
Sep 12, 2022
weihanglo
added
A-configuration
Area: cargo config files and env vars
A-config-cli
Area: --config CLI option
labels
Sep 13, 2022
Behaviour changes: After this commit, config files loaded via CLI take priority over env vars. Config files loaded via [`config-include`] feature also get a higher priority over env vars, if the initial config file is being loaded via CLI. Cargo knows why it loads a specific config file with `WhyLoad` enum, and store in the field of `Definition::Cli(…)`. With this additional data, config files loaded via `--config <path>` get a `Definition::Cli(Some(…))`. In contrast, `--config <value>` with ordinary values become `Definition::Cli(None)`. The error message of the `Definition::Cli(Some(…))` is identical to `Definition::Path(…)`, so we won't lose any path information to debug. [`config-include`]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#config-include
weihanglo
force-pushed
the
issue-10992
branch
from
September 16, 2022 14:37
2458626
to
dcf9669
Compare
jonhoo
approved these changes
Oct 9, 2022
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.
Looks good to me, subject to one typo in the test name 😅
Co-authored-by: Jon Gjengset <jon@thesquareplanet.com>
Thanks! @bors r+ |
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
Oct 9, 2022
☀️ Test successful - checks-actions |
weihanglo
added a commit
to weihanglo/rust
that referenced
this pull request
Oct 11, 2022
9 commits in 3cdf1ab25dc4fe56f890e8c7330d53a23ad905d3..b8f30cb23c4e5f20854a4f683325782b7cff9837 2022-10-07 17:34:03 +0000 to 2022-10-10 19:16:06 +0000 - Add more doc comments for three modules (rust-lang/cargo#11207) - docs: fix (rust-lang/cargo#11208) - Add completions for `cargo remove` (rust-lang/cargo#11204) - Config file loaded via CLI takes priority over env vars (rust-lang/cargo#11077) - Use `#[default]` when possible (rust-lang/cargo#11197) - Implement RFC 3289: source replacement ambiguity (rust-lang/cargo#10907) - Use correct version of cargo in test (rust-lang/cargo#11193) - Check empty input for login (rust-lang/cargo#11145) - Add retry support to sparse registries (rust-lang/cargo#11069)
bors
added a commit
to rust-lang-ci/rust
that referenced
this pull request
Oct 12, 2022
Update cargo 9 commits in 3cdf1ab25dc4fe56f890e8c7330d53a23ad905d3..b8f30cb23c4e5f20854a4f683325782b7cff9837 2022-10-07 17:34:03 +0000 to 2022-10-10 19:16:06 +0000 - Add more doc comments for three modules (rust-lang/cargo#11207) - docs: fix (rust-lang/cargo#11208) - Add completions for `cargo remove` (rust-lang/cargo#11204) - Config file loaded via CLI takes priority over env vars (rust-lang/cargo#11077) - Use `#[default]` when possible (rust-lang/cargo#11197) - Implement RFC 3289: source replacement ambiguity (rust-lang/cargo#10907) - Use correct version of cargo in test (rust-lang/cargo#11193) - Check empty input for login (rust-lang/cargo#11145) - Add retry support to sparse registries (rust-lang/cargo#11069)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-config-cli
Area: --config CLI option
A-configuration
Area: cargo config files and env vars
S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does this PR try to resolve?
Fixes #10992
Behaviour changes: After this commit, config files loaded via CLI take
priority over env vars. Config files loaded via
config-include
feature also get a higher priority over env vars, if the initial config
file is being loaded via CLI.
Cargo knows why it loads a specific config file with
WhyLoad
enum,and store in the field of
Definition::Cli(…)
. With this additional data,config files loaded via
--config <path>
get aDefinition::Cli(Some(…))
.In contrast,
--config <value>
with ordinary values becomeDefinition::Cli(None)
.The error message of the
Definition::Cli(Some(…))
is identical toDefinition::Path(…)
, so we won't lose any path information to debug.How should we test and review this PR?
Reviewing commit by commit is probably fine. The first two commits adding tests to
config-cli
andconfig-include
, which exercises the expected behaviour we are going to fix in the next commits.To check the precedence, set up a project with an extra config file, such as
Additional information
This is a bit hacky IMO. I don't like leaking the path info to
Definition::Cli
. However, it is really tricky to provide information for deserialization before values get merged.