From 264c6dfe4229cd73bf017f55be0178d596cf06eb Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Mon, 25 Nov 2024 08:07:53 +0000 Subject: feat(login): local login opt with `ngit login` instead of needing to include the local flag --- src/bin/ngit/sub_commands/login.rs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'src/bin') diff --git a/src/bin/ngit/sub_commands/login.rs b/src/bin/ngit/sub_commands/login.rs index df45975..1a70118 100644 --- a/src/bin/ngit/sub_commands/login.rs +++ b/src/bin/ngit/sub_commands/login.rs @@ -41,7 +41,8 @@ pub async fn launch(args: &Cli, command_args: &SubCommandArgs) -> Result<()> { } }; - if logout(git_repo.as_ref(), command_args.local).await? { + let (logged_out, log_in_locally_only) = logout(git_repo.as_ref(), command_args.local).await?; + if logged_out || log_in_locally_only { fresh_login_or_signup( &git_repo.as_ref(), client.as_ref(), @@ -58,7 +59,8 @@ pub async fn launch(args: &Cli, command_args: &SubCommandArgs) -> Result<()> { Ok(()) } -async fn logout(git_repo: Option<&Repo>, local_only: bool) -> Result { +/// return ( bool - logged out, bool - log in to local git locally) +async fn logout(git_repo: Option<&Repo>, local_only: bool) -> Result<(bool, bool)> { for source in if local_only { vec![SignerInfoSource::GitLocal] } else { @@ -77,12 +79,20 @@ async fn logout(git_repo: Option<&Repo>, local_only: bool) -> Result { user_ref.metadata.name ); match Interactor::default().choice( - PromptChoiceParms::default() - .with_default(0) - .with_choices(vec![ - format!("logout as \"{}\"", user_ref.metadata.name), - "remain logged in".to_string(), - ]), + PromptChoiceParms::default().with_default(0).with_choices( + if source == SignerInfoSource::GitGlobal { + vec![ + format!("logout as \"{}\"", user_ref.metadata.name), + "remain logged in".to_string(), + "login to local git repo only as another user".to_string(), + ] + } else { + vec![ + format!("logout as \"{}\"", user_ref.metadata.name), + "remain logged in".to_string(), + ] + }, + ), )? { 0 => { for item in [ @@ -101,9 +111,10 @@ async fn logout(git_repo: Option<&Repo>, local_only: bool) -> Result { )?; } } - _ => return Ok(false), + 1 => return Ok((false, local_only)), + _ => return Ok((false, true)), } } } - Ok(true) + Ok((true, local_only)) } -- cgit v1.2.3