summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorextrawurst <776816+extrawurst@users.noreply.github.com>2024-03-22 12:18:05 -0700
committerGitHub <noreply@github.com>2024-03-22 12:18:05 -0700
commitbb92067b192683d2f461b49f00dc8f0d7b52241b (patch)
tree71fcf176a42e8f27076614592d9fb0d80f8b427c /src
parentdddb35ac1551c4b160e36da1229a99633a00433a (diff)
fixes tag annotation being broken in 0.25 (#2139)
fixes #2126
Diffstat (limited to 'src')
-rw-r--r--src/components/textinput.rs6
-rw-r--r--src/popups/tag_commit.rs56
-rw-r--r--src/strings.rs7
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,