askpass: Don't log error when user cancels askpass prompt (#39544)

Lukas Wirth created

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Change summary

crates/askpass/src/askpass.rs   | 13 ++++---------
crates/project/src/git_store.rs |  5 ++++-
2 files changed, 8 insertions(+), 10 deletions(-)

Detailed changes

crates/askpass/src/askpass.rs 🔗

@@ -46,10 +46,10 @@ impl AskPassDelegate {
         Self { tx, _task: task }
     }
 
-    pub async fn ask_password(&mut self, prompt: String) -> Result<EncryptedPassword> {
+    pub async fn ask_password(&mut self, prompt: String) -> Option<EncryptedPassword> {
         let (tx, rx) = oneshot::channel();
-        self.tx.send((prompt, tx)).await?;
-        Ok(rx.await?)
+        self.tx.send((prompt, tx)).await.ok()?;
+        rx.await.ok()
     }
 }
 
@@ -106,12 +106,7 @@ impl AskPassSession {
                     buffer.clear();
                 }
                 let prompt = String::from_utf8_lossy(&buffer);
-                if let Some(password) = delegate
-                    .ask_password(prompt.to_string())
-                    .await
-                    .context("getting askpass password")
-                    .log_err()
-                {
+                if let Some(password) = delegate.ask_password(prompt.into_owned()).await {
                     #[cfg(target_os = "windows")]
                     {
                         askpass_secret.get_or_init(|| password.clone());

crates/project/src/git_store.rs 🔗

@@ -2110,7 +2110,10 @@ impl GitStore {
             anyhow::bail!("no askpass found");
         };
 
-        let response = askpass.ask_password(envelope.payload.prompt).await?;
+        let response = askpass
+            .ask_password(envelope.payload.prompt)
+            .await
+            .ok_or_else(|| anyhow::anyhow!("askpass cancelled"))?;
 
         delegates
             .lock()