Skip to content

Commit

Permalink
feat: add branch name validation on renaming (#2081)
Browse files Browse the repository at this point in the history
Closes #2062 

---------

Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
  • Loading branch information
sainad2222 and extrawurst authored Feb 20, 2024
1 parent a50a478 commit fa051ef
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 3 deletions.
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);
}
}
}
}

0 comments on commit fa051ef

Please sign in to comment.