Load credentials only when needed#7774
Conversation
|
r? @ehuss (rust_highfive has picked a reviewer for you, use r? to override) |
Credentials are always loaded, even if these are not used. If access to confidential files such as credentials is not given, `cargo build` fails despite not using credentials. Fixes rust-lang#7624.
654c949 to
4b70f14
Compare
ehuss
left a comment
There was a problem hiding this comment.
The credentials aren't being loaded for all commands that require credentials. I think yank, unyank, and owners are the subcommands that need authentication. It would probably be good to have tests for those, too.
src/cargo/util/config/mod.rs
Outdated
| } | ||
|
|
||
| cfg.merge(value, true)?; | ||
| if let CV::Table(mut map, _) = value { |
There was a problem hiding this comment.
This function is modified not to receive cfg: &mut ConfigValue as an argument, so I think that merge can not be used. However, I may simply not know how to use merge in Config, so could you tell me if there is any good way?
There was a problem hiding this comment.
Ah, I see. Would it be possible to just loop over the key/values of the map and merge/insert all of them instead of hard-coding the keys here?
There was a problem hiding this comment.
Thanks for your advice! I fixed it.
ehuss
left a comment
There was a problem hiding this comment.
Thanks for adding the tests!
tests/testsuite/yank.rs
Outdated
| use cargo_test_support::registry::{self, api_path, registry_url}; | ||
|
|
||
| fn setup(name: &str, version: &str) { | ||
| fs::create_dir_all(&api_path().join(format!("api/v1/crates/{}/{}", name, version))).unwrap(); |
There was a problem hiding this comment.
I think this can be simplified a little with:
let dir = api_path().join(format!("api/v1/crates/{}/{}", name, version));
dir.mkdir_p();
fs::write(dir.join("yank"), r#"{"ok": true}"#).unwrap();mkdir_p needs use cargo_test_support::paths::CargoPathExt;
tests/testsuite/owner.rs
Outdated
| use cargo_test_support::registry::{self, api_path, registry_url}; | ||
|
|
||
| fn setup(name: &str) { | ||
| fs::create_dir_all(&api_path().join(format!("api/v1/crates/{}", name))).unwrap(); |
There was a problem hiding this comment.
Similar to yank.
let dir = api_path().join(format!("api/v1/crates/{}", name));
dir.mkdir_p();
// ...
fs::write(dir.join("owners"), content).unwrap();
tests/testsuite/publish.rs
Outdated
| registry::init(); | ||
|
|
||
| let credentials_toml = paths::home().join(".cargo/credentials.toml"); | ||
| File::create(&credentials_toml) |
| } | ||
|
|
||
| cfg.merge(value, true)?; | ||
| if let CV::Table(map, _) = value { |
There was a problem hiding this comment.
Can this maybe be simplified a little instead of removing and reinserting? Maybe something like this?
if let CV::Table(map, _) = value {
let base_map = self.values_mut()?;
for (k, v) in map {
match base_map.entry(k) {
Vacant(entry) => { entry.insert(v); }
Occupied(mut entry) => { entry.get_mut().merge(v, true)? }
}
}
}Use `mkdir_p` and `fs::write`.
|
Thanks for your review! I fixed it. |
|
Great, thanks! |
|
📌 Commit 438d005 has been approved by |
Load credentials only when needed Credentials are always loaded, even if these are not used. If access to confidential files such as credentials is not given, `cargo build` fails despite not using credentials. Fixes #7624.
|
☀️ Test successful - checks-azure |
…chton Update cargo, books ## cargo 9 commits in ad3dbe10e1e654fb1f032a5dd9481d7cbaa00d65..f6449ba236db31995255ac5e4cad4ab88296a7c6 2020-01-13 21:37:15 +0000 to 2020-01-21 16:15:39 +0000 - Fix wrong directories in host_libdir. (rust-lang/cargo#7798) - Update humantime requirement from 1.2.0 to 2.0.0 (rust-lang/cargo#7815) - Fix doc_target test which no longer works on stable/beta. (rust-lang/cargo#7817) - Fix some erroneous em-dashes in man pages. (rust-lang/cargo#7814) - fix some clippy warnings (rust-lang/cargo#7808) - Don't assume iowait always increases on Linux (rust-lang/cargo#7803) - Add and update some doc comments. (rust-lang/cargo#7800) - Consistently use em-dash in environment documentation page. (rust-lang/cargo#7799) - Load credentials only when needed (rust-lang/cargo#7774) ## reference 3 commits in e115753..11e893f 2019-12-22 13:13:14 +0100 to 2020-01-18 21:24:08 +0100 - Small improvements to types/pointer.md (rust-lang/reference#726) - repr(transparent): mention align=1 requirement (rust-lang/reference#737) - Elaborate on how to use an extern static correctly (rust-lang/reference#736) ## book 4 commits in 5c5cfd2e94cd42632798d9bd3d1116133e128ac9..87dd6843678575f8dda962f239d14ef4be14b352 2019-12-16 09:27:21 -0600 to 2020-01-20 15:20:40 -0500 - Fix listing numbers (rust-lang/book#2227) - Move `async` and `await` keywords to 'Currently in Use' (rust-lang/book#2140) - More cleanup - remove unneeded files (rust-lang/book#2213) - Small cleanups extracted from the bigger pr i'm working on (rust-lang/book#2212) ## rust-by-example 1 commits in 1d59403cb5269c190cc52a95584ecc280345495a..1c2bd024d13f8011307e13386cf1fea2180352b5 2019-12-27 08:27:05 -0300 to 2020-01-20 12:18:36 -0300 - CamelCase -> UpperCamelCase (rust-lang/rust-by-example#1302) ## embedded-book 1 commits in 9493b7d4dc97eda439bd8780f05ad7b234cd1cd7..4d78994915af1bde9a95c04a8c27d8dca066232a 2019-12-27 20:05:00 +0000 to 2020-01-14 08:25:25 +0000 - Update .gitattributes (rust-embedded/book#221)
…chton Update cargo, books ## cargo 9 commits in ad3dbe10e1e654fb1f032a5dd9481d7cbaa00d65..f6449ba236db31995255ac5e4cad4ab88296a7c6 2020-01-13 21:37:15 +0000 to 2020-01-21 16:15:39 +0000 - Fix wrong directories in host_libdir. (rust-lang/cargo#7798) - Update humantime requirement from 1.2.0 to 2.0.0 (rust-lang/cargo#7815) - Fix doc_target test which no longer works on stable/beta. (rust-lang/cargo#7817) - Fix some erroneous em-dashes in man pages. (rust-lang/cargo#7814) - fix some clippy warnings (rust-lang/cargo#7808) - Don't assume iowait always increases on Linux (rust-lang/cargo#7803) - Add and update some doc comments. (rust-lang/cargo#7800) - Consistently use em-dash in environment documentation page. (rust-lang/cargo#7799) - Load credentials only when needed (rust-lang/cargo#7774) ## reference 3 commits in e115753..11e893f 2019-12-22 13:13:14 +0100 to 2020-01-18 21:24:08 +0100 - Small improvements to types/pointer.md (rust-lang/reference#726) - repr(transparent): mention align=1 requirement (rust-lang/reference#737) - Elaborate on how to use an extern static correctly (rust-lang/reference#736) ## book 4 commits in 5c5cfd2e94cd42632798d9bd3d1116133e128ac9..87dd6843678575f8dda962f239d14ef4be14b352 2019-12-16 09:27:21 -0600 to 2020-01-20 15:20:40 -0500 - Fix listing numbers (rust-lang/book#2227) - Move `async` and `await` keywords to 'Currently in Use' (rust-lang/book#2140) - More cleanup - remove unneeded files (rust-lang/book#2213) - Small cleanups extracted from the bigger pr i'm working on (rust-lang/book#2212) ## rust-by-example 1 commits in 1d59403cb5269c190cc52a95584ecc280345495a..1c2bd024d13f8011307e13386cf1fea2180352b5 2019-12-27 08:27:05 -0300 to 2020-01-20 12:18:36 -0300 - CamelCase -> UpperCamelCase (rust-lang/rust-by-example#1302) ## embedded-book 1 commits in 9493b7d4dc97eda439bd8780f05ad7b234cd1cd7..4d78994915af1bde9a95c04a8c27d8dca066232a 2019-12-27 20:05:00 +0000 to 2020-01-14 08:25:25 +0000 - Update .gitattributes (rust-embedded/book#221)
Credentials are always loaded, even if these are not used. If
access to confidential files such as credentials is not given,
cargo buildfails despite not using credentials.Fixes #7624.