diff options
author | extrawurst <776816+extrawurst@users.noreply.github.com> | 2024-03-22 12:18:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-22 12:18:05 -0700 |
commit | bb92067b192683d2f461b49f00dc8f0d7b52241b (patch) | |
tree | 71fcf176a42e8f27076614592d9fb0d80f8b427c /src | |
parent | dddb35ac1551c4b160e36da1229a99633a00433a (diff) |
fixes tag annotation being broken in 0.25 (#2139)
fixes #2126
Diffstat (limited to 'src')
-rw-r--r-- | src/components/textinput.rs | 6 | ||||
-rw-r--r-- | src/popups/tag_commit.rs | 56 | ||||
-rw-r--r-- | src/strings.rs | 7 |
3 files changed, 48 insertions, 21 deletions
diff --git a/src/components/textinput.rs b/src/components/textinput.rs index 0dff6e53..df87ae9d 100644 --- a/src/components/textinput.rs +++ b/src/components/textinput.rs @@ -88,6 +88,12 @@ impl TextInputComponent { self } + /// + pub fn set_input_type(&mut self, input_type: InputType) { + self.clear(); + self.input_type = input_type; + } + /// Clear the `msg`. pub fn clear(&mut self) { self.msg.take(); diff --git a/src/popups/tag_commit.rs b/src/popups/tag_commit.rs index 4f522747..696aba17 100644 --- a/src/popups/tag_commit.rs +++ b/src/popups/tag_commit.rs @@ -46,9 +46,13 @@ impl Component for TagCommitPopup { if self.is_visible() || force_all { self.input.commands(out, force_all); + let is_annotation_mode = + matches!(self.mode, Mode::Annotation { .. }); + out.push(CommandInfo::new( strings::commands::tag_commit_confirm_msg( &self.key_config, + is_annotation_mode, ), self.is_valid_tag(), true, @@ -66,37 +70,34 @@ impl Component for TagCommitPopup { fn event(&mut self, ev: &Event) -> Result<EventState> { if self.is_visible() { - if self.input.event(ev)?.is_consumed() { - return Ok(EventState::Consumed); - } - if let Event::Key(e) = ev { - if key_match(e, self.key_config.keys.enter) + let is_annotation_mode = + matches!(self.mode, Mode::Annotation { .. }); + + if !is_annotation_mode + && key_match(e, self.key_config.keys.enter) && self.is_valid_tag() { try_or_popup!(self, "tag error:", self.tag()); + return Ok(EventState::Consumed); + } + if is_annotation_mode + && key_match(e, self.key_config.keys.commit) + { + try_or_popup!(self, "tag error:", self.tag()); + return Ok(EventState::Consumed); } else if key_match( e, self.key_config.keys.tag_annotate, ) && self.is_valid_tag() { - let tag_name: String = - self.input.get_text().into(); - - self.input.clear(); - self.input.set_title( - strings::tag_popup_annotation_title( - &tag_name, - ), - ); - self.input.set_default_msg( - strings::tag_popup_annotation_msg(), - ); - self.mode = Mode::Annotation { tag_name }; + self.start_annotate_mode(); + return Ok(EventState::Consumed); } - - return Ok(EventState::Consumed); } + + self.input.event(ev)?; + return Ok(EventState::Consumed); } Ok(EventState::NotConsumed) } @@ -111,6 +112,7 @@ impl Component for TagCommitPopup { fn show(&mut self) -> Result<()> { self.mode = Mode::Name; + self.input.set_input_type(InputType::Singleline); self.input.set_title(strings::tag_popup_name_title()); self.input.set_default_msg(strings::tag_popup_name_msg()); self.input.show()?; @@ -166,6 +168,7 @@ impl TagCommitPopup { .flatten() .and_then(|val| val.parse::<bool>().ok()) .unwrap_or_default(); + anyhow::ensure!(!gpgsign, "config tag.gpgsign=true detected.\ngpg signing not supported.\ndeactivate in your repo/gitconfig to be able to tag without signing."); let (tag_name, tag_annotation) = self.tag_info(); @@ -201,4 +204,17 @@ impl TagCommitPopup { Ok(()) } + + fn start_annotate_mode(&mut self) { + let tag_name: String = self.input.get_text().into(); + + self.input.clear(); + self.input.set_input_type(InputType::Multiline); + self.input.set_title(strings::tag_popup_annotation_title( + &tag_name, + )); + self.input + .set_default_msg(strings::tag_popup_annotation_msg()); + self.mode = Mode::Annotation { tag_name }; + } } diff --git a/src/strings.rs b/src/strings.rs index a369a869..67eb79ba 100644 --- a/src/strings.rs +++ b/src/strings.rs @@ -1423,11 +1423,16 @@ pub mod commands { } pub fn tag_commit_confirm_msg( key_config: &SharedKeyConfig, + is_annotation_mode: bool, ) -> CommandText { CommandText::new( format!( "Tag [{}]", - key_config.get_hint(key_config.keys.enter), + key_config.get_hint(if is_annotation_mode { + key_config.keys.commit + } else { + key_config.keys.enter + }), ), "tag commit", CMD_GROUP_LOG, |