Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ These defaults require some adoption from existing users but feel more natural t
* support `prepare-commit-msg` hook ([#1873](https://github.com/extrawurst/gitui/issues/1873))
* new style `block_title_focused` to allow customizing title text of focused frame/block ([#2052](https://github.com/extrawurst/gitui/issues/2052)).
* allow `fetch` command in both tabs of branchlist popup ([#2067](https://github.com/extrawurst/gitui/issues/2067))
* check branch name validity while typing [[@sainad2222](https://github.com/sainad2222)] ([#2062](https://github.com/extrawurst/gitui/issues/2062))

### Changed
* do not allow tagging when `tag.gpgsign` enabled until gpg-signing is [supported](https://github.com/extrawurst/gitui/issues/97) [[@TeFiLeDo](https://github.com/TeFiLeDo)] ([#1915](https://github.com/extrawurst/gitui/pull/1915))
Expand Down
43 changes: 40 additions & 3 deletions src/popups/rename_branch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::components::{
visibility_blocking, CommandBlocking, CommandInfo, Component,
DrawableComponent, EventState, InputType, TextInputComponent,
};
use crate::ui::style::SharedTheme;
use crate::{
app::Environment,
keys::{key_match, SharedKeyConfig},
Expand All @@ -11,20 +12,24 @@ use crate::{
use anyhow::Result;
use asyncgit::sync::{self, RepoPathRef};
use crossterm::event::Event;
use ratatui::{layout::Rect, Frame};
use easy_cast::Cast;
use ratatui::{layout::Rect, widgets::Paragraph, Frame};

pub struct RenameBranchPopup {
repo: RepoPathRef,
input: TextInputComponent,
branch_ref: Option<String>,
queue: Queue,
key_config: SharedKeyConfig,
theme: SharedTheme,
}

impl DrawableComponent for RenameBranchPopup {
fn draw(&self, f: &mut Frame, rect: Rect) -> Result<()> {
self.input.draw(f, rect)?;

if self.is_visible() {
self.input.draw(f, rect)?;
self.draw_warnings(f);
}
Ok(())
}
}
Expand Down Expand Up @@ -97,6 +102,7 @@ impl RenameBranchPopup {
.with_input_type(InputType::Singleline),
branch_ref: None,
key_config: env.key_config.clone(),
theme: env.theme.clone(),
}
}

Expand Down Expand Up @@ -148,4 +154,35 @@ impl RenameBranchPopup {

self.input.clear();
}

fn draw_warnings(&self, f: &mut Frame) {
let current_text = self.input.get_text();

if !current_text.is_empty() {
let valid = sync::validate_branch_name(current_text)
.unwrap_or_default();

if !valid {
let msg = strings::branch_name_invalid();
let msg_length: u16 = msg.len().cast();
let w = Paragraph::new(msg)
.style(self.theme.text_danger());

let rect = {
let mut rect = self.input.get_area();
rect.y += rect.height.saturating_sub(1);
rect.height = 1;
let offset =
rect.width.saturating_sub(msg_length + 1);
rect.width =
rect.width.saturating_sub(offset + 1);
rect.x += offset;

rect
};

f.render_widget(w, rect);
}
}
}
}