mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
fix(login): Deprecate CLI token (#15057)
### What does this PR try to resolve? This came up in #13623 to avoid putting tokens into shell history. ### How should we test and review this PR? The exact approach to deprecation can vary - Include `<token>` in at least some docs for discovery (most likely the man page) - Don't warn yet etc I also suspect we could reorganize `cargo help login` but wanted to decouple that from this change. ### Additional information
This commit is contained in:
commit
9eda47ee04
@ -6,7 +6,12 @@ use crate::command_prelude::*;
|
|||||||
pub fn cli() -> Command {
|
pub fn cli() -> Command {
|
||||||
subcommand("login")
|
subcommand("login")
|
||||||
.about("Log in to a registry.")
|
.about("Log in to a registry.")
|
||||||
.arg(Arg::new("token").value_name("TOKEN").action(ArgAction::Set))
|
.arg(
|
||||||
|
Arg::new("token")
|
||||||
|
.value_name("TOKEN")
|
||||||
|
.action(ArgAction::Set)
|
||||||
|
.hide(true),
|
||||||
|
)
|
||||||
.arg_registry("Registry to use")
|
.arg_registry("Registry to use")
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new("args")
|
Arg::new("args")
|
||||||
@ -27,16 +32,18 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
|
|||||||
"must not be index URL"
|
"must not be index URL"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let token = args.get_one::<String>("token").map(|s| s.as_str().into());
|
||||||
|
if token.is_some() {
|
||||||
|
let _ = gctx
|
||||||
|
.shell()
|
||||||
|
.warn("`cargo login <token>` is deprecated in favor of reading `<token>` from stdin");
|
||||||
|
}
|
||||||
|
|
||||||
let extra_args = args
|
let extra_args = args
|
||||||
.get_many::<String>("args")
|
.get_many::<String>("args")
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
.map(String::as_str)
|
.map(String::as_str)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
ops::registry_login(
|
ops::registry_login(gctx, token, reg.as_ref(), &extra_args)?;
|
||||||
gctx,
|
|
||||||
args.get_one::<String>("token").map(|s| s.as_str().into()),
|
|
||||||
reg.as_ref(),
|
|
||||||
&extra_args,
|
|
||||||
)?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ cargo-login --- Log in to a registry
|
|||||||
|
|
||||||
## SYNOPSIS
|
## SYNOPSIS
|
||||||
|
|
||||||
`cargo login` [_options_] [_token_] [`--` _args_]
|
`cargo login` [_options_] [`--` _args_]
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ If a registry has a credential-provider specified, it will be used. Otherwise,
|
|||||||
the providers from the config value `registry.global-credential-providers` will
|
the providers from the config value `registry.global-credential-providers` will
|
||||||
be attempted, starting from the end of the list.
|
be attempted, starting from the end of the list.
|
||||||
|
|
||||||
If the _token_ argument is not specified, it will be read from stdin.
|
The _token_ will be read from stdin.
|
||||||
|
|
||||||
The API token for crates.io may be retrieved from <https://crates.io/me>.
|
The API token for crates.io may be retrieved from <https://crates.io/me>.
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ NAME
|
|||||||
cargo-login — Log in to a registry
|
cargo-login — Log in to a registry
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
cargo login [options] [token] [-- args]
|
cargo login [options] [-- args]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
This command will run a credential provider to save a token so that
|
This command will run a credential provider to save a token so that
|
||||||
@ -23,7 +23,7 @@ DESCRIPTION
|
|||||||
registry.global-credential-providers will be attempted, starting from
|
registry.global-credential-providers will be attempted, starting from
|
||||||
the end of the list.
|
the end of the list.
|
||||||
|
|
||||||
If the token argument is not specified, it will be read from stdin.
|
The token will be read from stdin.
|
||||||
|
|
||||||
The API token for crates.io may be retrieved from
|
The API token for crates.io may be retrieved from
|
||||||
<https://crates.io/me>.
|
<https://crates.io/me>.
|
||||||
|
@ -6,7 +6,7 @@ cargo-login --- Log in to a registry
|
|||||||
|
|
||||||
## SYNOPSIS
|
## SYNOPSIS
|
||||||
|
|
||||||
`cargo login` [_options_] [_token_] [`--` _args_]
|
`cargo login` [_options_] [`--` _args_]
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ If a registry has a credential-provider specified, it will be used. Otherwise,
|
|||||||
the providers from the config value `registry.global-credential-providers` will
|
the providers from the config value `registry.global-credential-providers` will
|
||||||
be attempted, starting from the end of the list.
|
be attempted, starting from the end of the list.
|
||||||
|
|
||||||
If the _token_ argument is not specified, it will be read from stdin.
|
The _token_ will be read from stdin.
|
||||||
|
|
||||||
The API token for crates.io may be retrieved from <https://crates.io/me>.
|
The API token for crates.io may be retrieved from <https://crates.io/me>.
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
cargo\-login \[em] Log in to a registry
|
cargo\-login \[em] Log in to a registry
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
\fBcargo login\fR [\fIoptions\fR] [\fItoken\fR] [\fB\-\-\fR \fIargs\fR]
|
\fBcargo login\fR [\fIoptions\fR] [\fB\-\-\fR \fIargs\fR]
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
This command will run a credential provider to save a token so that commands
|
This command will run a credential provider to save a token so that commands
|
||||||
that require authentication, such as \fBcargo\-publish\fR(1), will be
|
that require authentication, such as \fBcargo\-publish\fR(1), will be
|
||||||
@ -22,7 +22,7 @@ If a registry has a credential\-provider specified, it will be used. Otherwise,
|
|||||||
the providers from the config value \fBregistry.global\-credential\-providers\fR will
|
the providers from the config value \fBregistry.global\-credential\-providers\fR will
|
||||||
be attempted, starting from the end of the list.
|
be attempted, starting from the end of the list.
|
||||||
.sp
|
.sp
|
||||||
If the \fItoken\fR argument is not specified, it will be read from stdin.
|
The \fItoken\fR will be read from stdin.
|
||||||
.sp
|
.sp
|
||||||
The API token for crates.io may be retrieved from <https://crates.io/me>\&.
|
The API token for crates.io may be retrieved from <https://crates.io/me>\&.
|
||||||
.sp
|
.sp
|
||||||
|
@ -814,7 +814,8 @@ fn no_api() {
|
|||||||
"#]])
|
"#]])
|
||||||
.run();
|
.run();
|
||||||
|
|
||||||
p.cargo("login --registry alternative TOKEN")
|
p.cargo("login --registry alternative")
|
||||||
|
.with_stdin("TOKEN")
|
||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
[ERROR] registry `alternative` does not support API commands
|
[ERROR] registry `alternative` does not support API commands
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<svg width="827px" height="470px" xmlns="http://www.w3.org/2000/svg">
|
<svg width="827px" height="452px" xmlns="http://www.w3.org/2000/svg">
|
||||||
<style>
|
<style>
|
||||||
.fg { fill: #AAAAAA }
|
.fg { fill: #AAAAAA }
|
||||||
.bg { background: #000000 }
|
.bg { background: #000000 }
|
||||||
@ -23,51 +23,49 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="46px">
|
<tspan x="10px" y="46px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="64px"><tspan class="fg-green bold">Usage:</tspan><tspan> </tspan><tspan class="fg-cyan bold">cargo[EXE] login</tspan><tspan> </tspan><tspan class="fg-cyan">[OPTIONS]</tspan><tspan> </tspan><tspan class="fg-cyan">[TOKEN]</tspan><tspan> </tspan><tspan class="fg-cyan bold">[--</tspan><tspan> </tspan><tspan class="fg-cyan">[args]...</tspan><tspan class="fg-cyan bold">]</tspan>
|
<tspan x="10px" y="64px"><tspan class="fg-green bold">Usage:</tspan><tspan> </tspan><tspan class="fg-cyan bold">cargo[EXE] login</tspan><tspan> </tspan><tspan class="fg-cyan">[OPTIONS]</tspan><tspan> </tspan><tspan class="fg-cyan bold">[--</tspan><tspan> </tspan><tspan class="fg-cyan">[args]...</tspan><tspan class="fg-cyan bold">]</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="82px">
|
<tspan x="10px" y="82px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="100px"><tspan class="fg-green bold">Arguments:</tspan>
|
<tspan x="10px" y="100px"><tspan class="fg-green bold">Arguments:</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="118px"><tspan> </tspan><tspan class="fg-cyan">[TOKEN]</tspan><tspan> </tspan>
|
<tspan x="10px" y="118px"><tspan> </tspan><tspan class="fg-cyan">[args]...</tspan><tspan> Additional arguments for the credential provider</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="136px"><tspan> </tspan><tspan class="fg-cyan">[args]...</tspan><tspan> Additional arguments for the credential provider</tspan>
|
<tspan x="10px" y="136px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="154px">
|
<tspan x="10px" y="154px"><tspan class="fg-green bold">Options:</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="172px"><tspan class="fg-green bold">Options:</tspan>
|
<tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-cyan bold">--registry</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><REGISTRY></tspan><tspan> Registry to use</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="190px"><tspan> </tspan><tspan class="fg-cyan bold">--registry</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><REGISTRY></tspan><tspan> Registry to use</tspan>
|
<tspan x="10px" y="190px"><tspan> </tspan><tspan class="fg-cyan bold">-v</tspan><tspan>, </tspan><tspan class="fg-cyan bold">--verbose</tspan><tspan class="fg-cyan">...</tspan><tspan> Use verbose output (-vv very verbose/build.rs output)</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="208px"><tspan> </tspan><tspan class="fg-cyan bold">-v</tspan><tspan>, </tspan><tspan class="fg-cyan bold">--verbose</tspan><tspan class="fg-cyan">...</tspan><tspan> Use verbose output (-vv very verbose/build.rs output)</tspan>
|
<tspan x="10px" y="208px"><tspan> </tspan><tspan class="fg-cyan bold">-q</tspan><tspan>, </tspan><tspan class="fg-cyan bold">--quiet</tspan><tspan> Do not print cargo log messages</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="226px"><tspan> </tspan><tspan class="fg-cyan bold">-q</tspan><tspan>, </tspan><tspan class="fg-cyan bold">--quiet</tspan><tspan> Do not print cargo log messages</tspan>
|
<tspan x="10px" y="226px"><tspan> </tspan><tspan class="fg-cyan bold">--color</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><WHEN></tspan><tspan> Coloring: auto, always, never</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="244px"><tspan> </tspan><tspan class="fg-cyan bold">--color</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><WHEN></tspan><tspan> Coloring: auto, always, never</tspan>
|
<tspan x="10px" y="244px"><tspan> </tspan><tspan class="fg-cyan bold">--config</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><KEY=VALUE|PATH></tspan><tspan> Override a configuration value</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="262px"><tspan> </tspan><tspan class="fg-cyan bold">--config</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><KEY=VALUE|PATH></tspan><tspan> Override a configuration value</tspan>
|
<tspan x="10px" y="262px"><tspan> </tspan><tspan class="fg-cyan bold">-Z</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><FLAG></tspan><tspan> Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-cyan bold">-Z</tspan><tspan class="fg-cyan"> </tspan><tspan class="fg-cyan"><FLAG></tspan><tspan> Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for</tspan>
|
<tspan x="10px" y="280px"><tspan> details</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="298px"><tspan> details</tspan>
|
<tspan x="10px" y="298px"><tspan> </tspan><tspan class="fg-cyan bold">-h</tspan><tspan>, </tspan><tspan class="fg-cyan bold">--help</tspan><tspan> Print help</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="316px"><tspan> </tspan><tspan class="fg-cyan bold">-h</tspan><tspan>, </tspan><tspan class="fg-cyan bold">--help</tspan><tspan> Print help</tspan>
|
<tspan x="10px" y="316px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="334px">
|
<tspan x="10px" y="334px"><tspan class="fg-green bold">Manifest Options:</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="352px"><tspan class="fg-green bold">Manifest Options:</tspan>
|
<tspan x="10px" y="352px"><tspan> </tspan><tspan class="fg-cyan bold">--locked</tspan><tspan> Assert that `Cargo.lock` will remain unchanged</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="370px"><tspan> </tspan><tspan class="fg-cyan bold">--locked</tspan><tspan> Assert that `Cargo.lock` will remain unchanged</tspan>
|
<tspan x="10px" y="370px"><tspan> </tspan><tspan class="fg-cyan bold">--offline</tspan><tspan> Run without accessing the network</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="388px"><tspan> </tspan><tspan class="fg-cyan bold">--offline</tspan><tspan> Run without accessing the network</tspan>
|
<tspan x="10px" y="388px"><tspan> </tspan><tspan class="fg-cyan bold">--frozen</tspan><tspan> Equivalent to specifying both --locked and --offline</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="406px"><tspan> </tspan><tspan class="fg-cyan bold">--frozen</tspan><tspan> Equivalent to specifying both --locked and --offline</tspan>
|
<tspan x="10px" y="406px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="424px">
|
<tspan x="10px" y="424px"><tspan>Run `</tspan><tspan class="fg-cyan bold">cargo help login</tspan><tspan class="bold">` for more detailed information.</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="442px"><tspan>Run `</tspan><tspan class="fg-cyan bold">cargo help login</tspan><tspan class="bold">` for more detailed information.</tspan>
|
<tspan x="10px" y="442px">
|
||||||
</tspan>
|
|
||||||
<tspan x="10px" y="460px">
|
|
||||||
</tspan>
|
</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.0 KiB |
@ -95,7 +95,8 @@ fn basic_unsupported() {
|
|||||||
.credential_provider(&["cargo:token-from-stdout", "false"])
|
.credential_provider(&["cargo:token-from-stdout", "false"])
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
cargo_process("login abcdefg")
|
cargo_process("login")
|
||||||
|
.with_stdin("abcdefg")
|
||||||
.replace_crates_io(registry.index_url())
|
.replace_crates_io(registry.index_url())
|
||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
@ -132,7 +133,8 @@ fn login() {
|
|||||||
])
|
])
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
cargo_process("login abcdefg -- cmd3 --cmd4")
|
cargo_process("login -- cmd3 --cmd4")
|
||||||
|
.with_stdin("abcdefg")
|
||||||
.replace_crates_io(registry.index_url())
|
.replace_crates_io(registry.index_url())
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
[UPDATING] crates.io index
|
[UPDATING] crates.io index
|
||||||
@ -383,7 +385,8 @@ fn multiple_providers() {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
cargo_process("login -v abcdefg")
|
cargo_process("login -v")
|
||||||
|
.with_stdin("abcdefg")
|
||||||
.replace_crates_io(server.index_url())
|
.replace_crates_io(server.index_url())
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
[UPDATING] crates.io index
|
[UPDATING] crates.io index
|
||||||
@ -429,7 +432,8 @@ fn registry_provider_overrides_global() {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
cargo_process("login -v abcdefg")
|
cargo_process("login -v")
|
||||||
|
.with_stdin("abcdefg")
|
||||||
.env("CARGO_REGISTRY_CREDENTIAL_PROVIDER", "cargo:token")
|
.env("CARGO_REGISTRY_CREDENTIAL_PROVIDER", "cargo:token")
|
||||||
.replace_crates_io(server.index_url())
|
.replace_crates_io(server.index_url())
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
@ -460,7 +464,7 @@ fn both_asymmetric_and_token() {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
cargo_process("login -Zasymmetric-token -v abcdefg")
|
cargo_process("login -Zasymmetric-token -v").with_stdin("abcdefg")
|
||||||
.masquerade_as_nightly_cargo(&["asymmetric-token"])
|
.masquerade_as_nightly_cargo(&["asymmetric-token"])
|
||||||
.replace_crates_io(server.index_url())
|
.replace_crates_io(server.index_url())
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
@ -675,7 +679,8 @@ fn unsupported_version() {
|
|||||||
.credential_provider(&[&provider])
|
.credential_provider(&[&provider])
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
cargo_process("login abcdefg")
|
cargo_process("login")
|
||||||
|
.with_stdin("abcdefg")
|
||||||
.replace_crates_io(registry.index_url())
|
.replace_crates_io(registry.index_url())
|
||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
@ -707,7 +712,8 @@ fn alias_builtin_warning() {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
cargo_process("login abcdefg")
|
cargo_process("login")
|
||||||
|
.with_stdin("abcdefg")
|
||||||
.replace_crates_io(registry.index_url())
|
.replace_crates_io(registry.index_url())
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
[UPDATING] crates.io index
|
[UPDATING] crates.io index
|
||||||
|
@ -81,7 +81,10 @@ fn registry_credentials() {
|
|||||||
|
|
||||||
let reg = "alternative";
|
let reg = "alternative";
|
||||||
|
|
||||||
cargo_process("login --registry").arg(reg).arg(TOKEN).run();
|
cargo_process("login --registry")
|
||||||
|
.arg(reg)
|
||||||
|
.with_stdin(TOKEN)
|
||||||
|
.run();
|
||||||
|
|
||||||
// Ensure that we have not updated the default token
|
// Ensure that we have not updated the default token
|
||||||
check_token(Some(ORIGINAL_TOKEN), None);
|
check_token(Some(ORIGINAL_TOKEN), None);
|
||||||
@ -92,7 +95,7 @@ fn registry_credentials() {
|
|||||||
let reg2 = "alternative2";
|
let reg2 = "alternative2";
|
||||||
cargo_process("login --registry")
|
cargo_process("login --registry")
|
||||||
.arg(reg2)
|
.arg(reg2)
|
||||||
.arg(TOKEN2)
|
.with_stdin(TOKEN2)
|
||||||
.run();
|
.run();
|
||||||
|
|
||||||
// Ensure not overwriting 1st alternate registry token with
|
// Ensure not overwriting 1st alternate registry token with
|
||||||
@ -127,8 +130,24 @@ Caused by:
|
|||||||
|
|
||||||
cargo_process("login")
|
cargo_process("login")
|
||||||
.replace_crates_io(registry.index_url())
|
.replace_crates_io(registry.index_url())
|
||||||
.arg("")
|
.with_stdin("")
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
|
please paste the token found on [ROOTURL]/api/me below
|
||||||
|
[ERROR] credential provider `cargo:token` failed action `login`
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
please provide a non-empty token
|
||||||
|
|
||||||
|
"#]])
|
||||||
|
.with_status(101)
|
||||||
|
.run();
|
||||||
|
|
||||||
|
cargo_process("login")
|
||||||
|
.replace_crates_io(registry.index_url())
|
||||||
|
.arg("")
|
||||||
|
.with_stdin("")
|
||||||
|
.with_stderr_data(str![[r#"
|
||||||
|
[WARNING] `cargo login <token>` is deprecated in favor of reading `<token>` from stdin
|
||||||
[ERROR] credential provider `cargo:token` failed action `login`
|
[ERROR] credential provider `cargo:token` failed action `login`
|
||||||
|
|
||||||
Caused by:
|
Caused by:
|
||||||
@ -356,7 +375,7 @@ fn default_registry_configured() {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
cargo_process("login")
|
cargo_process("login")
|
||||||
.arg("a-new-token")
|
.with_stdin("a-new-token")
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
[UPDATING] `alternative` index
|
[UPDATING] `alternative` index
|
||||||
[LOGIN] token for `alternative` saved
|
[LOGIN] token for `alternative` saved
|
||||||
|
Loading…
x
Reference in New Issue
Block a user