diff --git a/CHANGELOG.md b/CHANGELOG.md index 3da9186e98..6c4ba3f89c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - keep diff line selection after staging/unstaging/discarding ([#583](https://github.com/extrawurst/gitui/issues/583)) +- fix pull deadlocking when aborting credentials input ([#586](https://github.com/extrawurst/gitui/issues/586)) ## [0.12.0] - 2020-03-03 diff --git a/src/components/cred.rs b/src/components/cred.rs index 13525e0559..35e9babfe7 100644 --- a/src/components/cred.rs +++ b/src/components/cred.rs @@ -105,7 +105,9 @@ impl Component for CredComponent { if let Event::Key(e) = ev { if e == self.key_config.exit_popup { self.hide(); + return Ok(true); } + if self.input_username.event(ev)? || self.input_password.event(ev)? { @@ -139,6 +141,7 @@ impl Component for CredComponent { } } } + return Ok(true); } Ok(false) diff --git a/src/components/pull.rs b/src/components/pull.rs index c68fed9d0f..458d398538 100644 --- a/src/components/pull.rs +++ b/src/components/pull.rs @@ -257,9 +257,10 @@ impl Component for PullComponent { if self.visible { if let Event::Key(_) = ev { if self.input_cred.is_visible() { - if self.input_cred.event(ev)? { - return Ok(true); - } else if self.input_cred.get_cred().is_complete() + self.input_cred.event(ev)?; + + if self.input_cred.get_cred().is_complete() + || !self.input_cred.is_visible() { self.fetch_from_remote(Some( self.input_cred.get_cred().clone(), diff --git a/src/components/push.rs b/src/components/push.rs index 5fe77de5f9..266ac76a5f 100644 --- a/src/components/push.rs +++ b/src/components/push.rs @@ -253,9 +253,10 @@ impl Component for PushComponent { if self.visible { if let Event::Key(e) = ev { if self.input_cred.is_visible() { - if self.input_cred.event(ev)? { - return Ok(true); - } else if self.input_cred.get_cred().is_complete() + self.input_cred.event(ev)?; + + if self.input_cred.get_cred().is_complete() + || !self.input_cred.is_visible() { self.push_to_remote( Some(self.input_cred.get_cred().clone()), diff --git a/src/components/push_tags.rs b/src/components/push_tags.rs index cde8fd741a..e1828420f8 100644 --- a/src/components/push_tags.rs +++ b/src/components/push_tags.rs @@ -227,9 +227,10 @@ impl Component for PushTagsComponent { if self.visible { if let Event::Key(e) = ev { if self.input_cred.is_visible() { - if self.input_cred.event(ev)? { - return Ok(true); - } else if self.input_cred.get_cred().is_complete() + self.input_cred.event(ev)?; + + if self.input_cred.get_cred().is_complete() + || !self.input_cred.is_visible() { self.push_to_remote(Some( self.input_cred.get_cred().clone(),