diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/confirm_abort/mod.rs | 10 | ||||
-rw-r--r-- | src/confirm_rebase/mod.rs | 14 | ||||
-rw-r--r-- | src/edit/mod.rs | 18 | ||||
-rw-r--r-- | src/external_editor/mod.rs | 46 | ||||
-rw-r--r-- | src/list/mod.rs | 120 | ||||
-rw-r--r-- | src/main.rs | 17 | ||||
-rw-r--r-- | src/process/error.rs | 14 | ||||
-rw-r--r-- | src/process/help.rs | 14 | ||||
-rw-r--r-- | src/process/mod.rs | 21 | ||||
-rw-r--r-- | src/process/modules.rs | 14 | ||||
-rw-r--r-- | src/process/process_module.rs | 8 | ||||
-rw-r--r-- | src/process/testutil.rs | 18 | ||||
-rw-r--r-- | src/process/window_size_error.rs | 14 | ||||
-rw-r--r-- | src/show_commit/mod.rs | 18 | ||||
-rw-r--r-- | src/todo_file/mod.rs (renamed from src/git_interactive.rs) | 93 |
15 files changed, 221 insertions, 218 deletions
diff --git a/src/confirm_abort/mod.rs b/src/confirm_abort/mod.rs index 39a4a6f..6e593a5 100644 --- a/src/confirm_abort/mod.rs +++ b/src/confirm_abort/mod.rs @@ -1,10 +1,10 @@ -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::process::exit_status::ExitStatus; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; +use crate::todo_file::TodoFile; use crate::view::view_data::ViewData; use crate::view::View; @@ -13,7 +13,7 @@ pub struct ConfirmAbort { } impl ProcessModule for ConfirmAbort { - fn build_view_data(&mut self, view: &View<'_>, _: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, _: &TodoFile) -> &ViewData { let (window_width, window_height) = view.get_view_size(); self.view_data.set_view_size(window_width, window_height); self.view_data.rebuild(); @@ -23,7 +23,7 @@ impl ProcessModule for ConfirmAbort { fn handle_input( &mut self, input_handler: &InputHandler<'_>, - git_interactive: &mut GitInteractive, + rebase_todo: &mut TodoFile, _view: &View<'_>, ) -> ProcessResult { @@ -31,7 +31,7 @@ impl ProcessModule for ConfirmAbort { let mut result = ProcessResult::new().input(input); match input { Input::Yes => { - git_interactive.clear(); + rebase_todo.set_noop(); result = result.exit_status(ExitStatus::Good); }, Input::No => { @@ -90,7 +90,7 @@ mod tests { input = Input::Yes, exit_status = ExitStatus::Good ); - assert_eq!(test_context.git_interactive.get_lines().len(), 0); + assert_eq!(test_context.rebase_todo_file.get_lines().len(), 0); }, ); } diff --git a/src/confirm_rebase/mod.rs b/src/confirm_rebase/mod.rs index 3561fcb..f8bfedd 100644 --- a/src/confirm_rebase/mod.rs +++ b/src/confirm_rebase/mod.rs @@ -1,10 +1,10 @@ -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::process::exit_status::ExitStatus; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; +use crate::todo_file::TodoFile; use crate::view::view_data::ViewData; use crate::view::View; @@ -13,20 +13,14 @@ pub struct ConfirmRebase { } impl ProcessModule for ConfirmRebase { - fn build_view_data(&mut self, view: &View<'_>, _: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, _: &TodoFile) -> &ViewData { let (window_width, window_height) = view.get_view_size(); self.view_data.set_view_size(window_width, window_height); self.view_data.rebuild(); &self.view_data } - fn handle_input( - &mut self, - input_handler: &InputHandler<'_>, - _git_interactive: &mut GitInteractive, - _view: &View<'_>, - ) -> ProcessResult - { + fn handle_input(&mut self, input_handler: &InputHandler<'_>, _: &mut TodoFile, _view: &View<'_>) -> ProcessResult { let input = input_handler.get_input(InputMode::Confirm); let mut result = ProcessResult::new().input(input); match input { @@ -89,7 +83,7 @@ mod tests { input = Input::Yes, exit_status = ExitStatus::Good ); - assert_eq!(test_context.git_interactive.get_lines().len(), 1); + assert_eq!(test_context.rebase_todo_file.get_lines().len(), 1); }, ); } diff --git a/src/edit/mod.rs b/src/edit/mod.rs index a100a2d..4d3b80c 100644 --- a/src/edit/mod.rs +++ b/src/edit/mod.rs @@ -1,10 +1,10 @@ use crate::display::display_color::DisplayColor; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; +use crate::todo_file::{EditContext, TodoFile}; use crate::view::line_segment::LineSegment; use crate::view::view_data::ViewData; use crate::view::view_line::ViewLine; @@ -18,8 +18,8 @@ pub struct Edit { } impl ProcessModule for Edit { - fn activate(&mut self, git_interactive: &GitInteractive, _: State) -> ProcessResult { - self.content = git_interactive.get_selected_line().get_edit_content().to_string(); + fn activate(&mut self, todo_file: &TodoFile, _: State) -> ProcessResult { + self.content = todo_file.get_selected_line().get_edit_content().to_string(); self.cursor_position = UnicodeSegmentation::graphemes(self.content.as_str(), true).count(); ProcessResult::new() } @@ -29,7 +29,7 @@ impl ProcessModule for Edit { self.view_data.clear(); } - fn build_view_data(&mut self, view: &View<'_>, _: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, _: &TodoFile) -> &ViewData { let (view_width, view_height) = view.get_view_size(); let line = self.content.as_str(); @@ -70,7 +70,7 @@ impl ProcessModule for Edit { fn handle_input( &mut self, input_handler: &InputHandler<'_>, - git_interactive: &mut GitInteractive, + todo_file: &mut TodoFile, view: &View<'_>, ) -> ProcessResult { @@ -128,7 +128,7 @@ impl ProcessModule for Edit { } }, Input::Enter => { - git_interactive.edit_selected_line(self.content.as_str()); + todo_file.update_selected(&EditContext::new().content(self.content.as_str())); break result.state(State::List); }, Input::Resize => { @@ -810,7 +810,7 @@ mod tests { state = State::List ); assert_eq!( - test_context.git_interactive.get_selected_line().get_edit_content(), + test_context.rebase_todo_file.get_selected_line().get_edit_content(), "foobar" ); }, @@ -834,7 +834,7 @@ mod tests { state = State::List ); assert_eq!( - test_context.git_interactive.get_selected_line().get_edit_content(), + test_context.rebase_todo_file.get_selected_line().get_edit_content(), "foobarx" ); }, @@ -857,7 +857,7 @@ mod tests { state = State::List ); assert_eq!( - test_context.git_interactive.get_selected_line().get_edit_content(), + test_context.rebase_todo_file.get_selected_line().get_edit_content(), "foobar" ); }, diff --git a/src/external_editor/mod.rs b/src/external_editor/mod.rs index b6cc9bd..7855dc7 100644 --- a/src/external_editor/mod.rs +++ b/src/external_editor/mod.rs @@ -3,7 +3,6 @@ mod argument_tolkenizer; use crate::display::display_color::DisplayColor; use crate::display::Display; use crate::external_editor::argument_tolkenizer::tolkenize; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::list::line::Line; @@ -11,6 +10,7 @@ use crate::process::exit_status::ExitStatus; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; +use crate::todo_file::TodoFile; use crate::view::line_segment::LineSegment; use crate::view::view_data::ViewData; use crate::view::view_line::ViewLine; @@ -37,14 +37,14 @@ pub struct ExternalEditor<'e> { } impl<'e> ProcessModule for ExternalEditor<'e> { - fn activate(&mut self, git_interactive: &GitInteractive, _: State) -> ProcessResult { + fn activate(&mut self, todo_file: &TodoFile, _: State) -> ProcessResult { let mut result = ProcessResult::new(); self.state = ExternalEditorState::Active; - if let Err(err) = git_interactive.write_file() { + if let Err(err) = todo_file.write_file() { result = result.error(err).state(State::List); } else if self.lines.is_empty() { - self.lines = git_interactive.get_lines().to_owned(); + self.lines = todo_file.get_lines().to_owned(); } result } @@ -55,7 +55,7 @@ impl<'e> ProcessModule for ExternalEditor<'e> { self.view_data.reset(); } - fn build_view_data(&mut self, view: &View<'_>, _: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, _: &TodoFile) -> &ViewData { let (window_width, window_height) = view.get_view_size(); self.view_data.clear(); @@ -112,20 +112,20 @@ impl<'e> ProcessModule for ExternalEditor<'e> { fn handle_input( &mut self, input_handler: &InputHandler<'_>, - git_interactive: &mut GitInteractive, + todo_file: &mut TodoFile, view: &View<'_>, ) -> ProcessResult { let mut result = ProcessResult::new(); match self.state { ExternalEditorState::Active => { - if let Err(e) = self.run_editor(git_interactive) { + if let Err(e) = self.run_editor(todo_file) { self.state = ExternalEditorState::Error(e); } else { - match git_interactive.load_file() { + match todo_file.load_file() { Ok(_) => { - if git_interactive.get_lines().is_empty() || git_interactive.is_noop() { + if todo_file.get_lines().is_empty() || todo_file.is_noop() { self.state = ExternalEditorState::Empty; } else { @@ -146,8 +146,8 @@ impl<'e> ProcessModule for ExternalEditor<'e> { Input::Character('1') => result = result.exit_status(ExitStatus::Good), Input::Character('2') => self.state = ExternalEditorState::Active, Input::Character('3') => { - git_interactive.set_lines(self.lines.to_vec()); - self.activate(git_interactive, State::ExternalEditor); + todo_file.set_lines(self.lines.to_vec()); + self.activate(todo_file, State::ExternalEditor); }, _ => self.invalid_selection = true, } @@ -160,20 +160,20 @@ impl<'e> ProcessModule for ExternalEditor<'e> { self.invalid_selection = false; match input { Input::Character('1') => { - git_interactive.clear(); + todo_file.set_noop(); result = result.exit_status(ExitStatus::Good) }, Input::Character('2') => self.state = ExternalEditorState::Active, Input::Character('3') => { - git_interactive.set_lines(self.lines.to_vec()); + todo_file.set_lines(self.lines.to_vec()); result = result.state(State::List); - if let Err(err) = git_interactive.write_file() { + if let Err(err) = todo_file.write_file() { result = result.error(err); } }, Input::Character('4') => { - git_interactive.set_lines(self.lines.to_vec()); - self.activate(git_interactive, State::ExternalEditor); + todo_file.set_lines(self.lines.to_vec()); + self.activate(todo_file, State::ExternalEditor); }, _ => self.invalid_selection = true, } @@ -215,7 +215,7 @@ impl<'e> ExternalEditor<'e> { None } - fn run_editor(&mut self, git_interactive: &GitInteractive) -> Result<()> { + fn run_editor(&mut self, todo_file: &TodoFile) -> Result<()> { let mut arguments = tolkenize(self.editor.as_str()) .map_or(Err(anyhow!("Invalid editor: \"{}\"", self.editor)), |args| { if args.is_empty() { @@ -227,7 +227,7 @@ impl<'e> ExternalEditor<'e> { }) .map_err(|e| anyhow!("Please see the git \"core.editor\" configuration for details").context(e))?; - let filepath = git_interactive.get_filepath(); + let filepath = todo_file.get_filepath(); let callback = || -> Result<ProcessExitStatus> { let mut file_pattern_found = false; let mut cmd = Command::new(arguments.next().unwrap()); @@ -329,7 +329,7 @@ mod tests { get_external_editor("pick aaa comment", "0").as_str(), ); assert_process_result!(test_context.activate(&mut module, State::List)); - assert_eq!(test_context.git_interactive.get_lines(), &vec![ + assert_eq!(test_context.rebase_todo_file.get_lines(), &vec![ Line::new("pick aaa comment1").unwrap(), Line::new("drop bbb comment2").unwrap() ]); @@ -491,7 +491,7 @@ mod tests { test_context.build_view_data(&mut module); assert_process_result!(test_context.handle_input(&mut module), input = Input::Character('3')); assert_external_editor_state_eq!(module.state, ExternalEditorState::Active); - assert_eq!(test_context.git_interactive.get_lines(), &vec![ + assert_eq!(test_context.rebase_todo_file.get_lines(), &vec![ Line::new("pick aaa comment").unwrap(), Line::new("drop bbb comment").unwrap() ]); @@ -735,7 +735,7 @@ mod tests { input = Input::Character('1'), exit_status = ExitStatus::Good ); - assert_eq!(test_context.git_interactive.get_lines(), &vec![]); + assert_eq!(test_context.rebase_todo_file.get_lines(), &vec![]); }, ); } @@ -781,7 +781,7 @@ mod tests { input = Input::Character('3'), state = State::List ); - assert_eq!(test_context.git_interactive.get_lines(), &vec![Line::new( + assert_eq!(test_context.rebase_todo_file.get_lines(), &vec![Line::new( "pick aaa comment" ) .unwrap()]); @@ -806,7 +806,7 @@ mod tests { test_context.build_view_data(&mut module); assert_process_result!(test_context.handle_input(&mut module), input = Input::Character('4')); assert_external_editor_state_eq!(module.state, ExternalEditorState::Active); - assert_eq!(test_context.git_interactive.get_lines(), &vec![Line::new( + assert_eq!(test_context.rebase_todo_file.get_lines(), &vec![Line::new( "pick aaa comment" ) .unwrap()]); diff --git a/src/list/mod.rs b/src/list/mod.rs index d0a6346..184ec8a 100644 --- a/src/list/mod.rs +++ b/src/list/mod.rs @@ -3,7 +3,6 @@ pub mod line; mod utils; use crate::config::Config; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::list::action::Action; @@ -13,6 +12,7 @@ use crate::process::exit_status::ExitStatus; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; +use crate::todo_file::{EditContext, TodoFile}; use crate::view::view_data::ViewData; use crate::view::view_line::ViewLine; use crate::view::View; @@ -34,7 +34,7 @@ pub struct List<'l> { } impl<'l> ProcessModule for List<'l> { - fn build_view_data(&mut self, view: &View<'_>, git_interactive: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, todo_file: &TodoFile) -> &ViewData { let (view_width, view_height) = view.get_view_size(); self.view_data.clear(); @@ -42,11 +42,11 @@ impl<'l> ProcessModule for List<'l> { let is_visual_mode = self.state == ListState::Visual; let visual_index = self .visual_index_start - .unwrap_or_else(|| git_interactive.get_selected_line_index()) + .unwrap_or_else(|| todo_file.get_selected_line_index()) - 1; - let selected_index = git_interactive.get_selected_line_index() - 1; + let selected_index = todo_file.get_selected_line_index() - 1; - for (index, line) in git_interactive.get_lines().iter().enumerate() { + for (index, line) in todo_file.get_lines().iter().enumerate() { let selected_line = is_visual_mode && ((visual_index <= selected_index && index >= visual_index && index <= selected_index) || (visual_index > selected_index && index >= selected_index && index <= visual_index)); @@ -71,7 +71,7 @@ impl<'l> ProcessModule for List<'l> { fn handle_input( &mut self, input_handler: &InputHandler<'_>, - git_interactive: &mut GitInteractive, + todo_file: &mut TodoFile, view: &View<'_>, ) -> ProcessResult { @@ -82,15 +82,15 @@ impl<'l> ProcessModule for List<'l> { Input::MoveCursorLeft => self.view_data.scroll_left(), Input::MoveCursorRight => self.view_data.scroll_right(), Input::MoveCursorDown => { - Self::move_cursor_down(git_interactive, 1); + Self::move_cursor_down(todo_file, 1); }, - Input::MoveCursorUp => Self::move_cursor_up(git_interactive, 1), - Input::MoveCursorPageDown => Self::move_cursor_down(git_interactive, view_height / 2), - Input::MoveCursorPageUp => Self::move_cursor_up(git_interactive, view_height / 2), + Input::MoveCursorUp => Self::move_cursor_up(todo_file, 1), + Input::MoveCursorPageDown => Self::move_cursor_down(todo_file, view_height / 2), + Input::MoveCursorPageUp => Self::move_cursor_up(todo_file, view_height / 2), _ => { result = match self.state { - ListState::Normal => self.handle_normal_mode_input(input, result, git_interactive), - ListState::Visual => self.handle_visual_mode_input(input, result, git_interactive), + ListState::Normal => self.handle_normal_mode_input(input, result, todo_file), + ListState::Visual => self.handle_visual_mode_input(input, result, todo_file), } }, } @@ -123,9 +123,9 @@ impl<'l> List<'l> { } } - pub(crate) fn move_cursor_up(git_interactive: &mut GitInteractive, amount: usize) { - let current_selected_line_index = git_interactive.get_selected_line_index(); - git_interactive.set_selected_line_index( + pub(crate) fn move_cursor_up(todo_file: &mut TodoFile, amount: usize) { + let current_selected_line_index = todo_file.get_selected_line_index(); + todo_file.set_selected_line_index( if amount >= current_selected_line_index { 1 } @@ -135,24 +135,24 @@ impl<'l> List<'l> { ); } - pub(crate) fn move_cursor_down(git_interactive: &mut GitInteractive, amount: usize) { - let current_selected_line_index = git_interactive.get_selected_line_index(); - let lines_length = git_interactive.get_lines().len(); - git_interactive.set_selected_line_index(cmp::min(current_selected_line_index + amount, lines_length)); + pub(crate) fn move_cursor_down(rebase_todo: &mut TodoFile, amount: usize) { + let current_selected_line_index = rebase_todo.get_selected_line_index(); + let lines_length = rebase_todo.get_lines().len(); + rebase_todo.set_selected_line_index(cmp::min(current_selected_line_index + amount, lines_length)); } - fn set_selected_line_action(&self, git_interactive: &mut GitInteractive, action: Action, advanced_next: bool) { - let start_index = git_interactive.get_selected_line_index(); + fn set_selected_line_action(&self, rebase_todo: &mut TodoFile, action: Action, advanced_next: bool) { + let start_index = rebase_todo.get_selected_line_index(); let end_index = self.visual_index_start.unwrap_or(start_index); - git_interactive.set_range_action(start_index, end_index, action); + rebase_todo.update_range(start_index, end_index, &EditContext::new().action(action)); if advanced_next && self.config.auto_select_next { - Self::move_cursor_down(git_interactive, 1); + Self::move_cursor_down(rebase_todo, 1); } } - pub(crate) fn swap_range_up(&mut self, git_interactive: &mut GitInteractive) { - let start_index = git_interactive.get_selected_line_index(); + pub(crate) fn swap_range_up(&mut self, rebase_todo: &mut TodoFile) { + let start_index = rebase_todo.get_selected_line_index(); let end_index = self.visual_index_start.unwrap_or(start_index); if end_index == 1 || start_index == 1 { @@ -167,19 +167,19 @@ impl<'l> List<'l> { }; for index in range { - git_interactive.swap_lines(index - 1, index - 2); + rebase_todo.swap_lines(index - 1, index - 2); } if let Some(visual_index_start) = self.visual_index_start { self.visual_index_start = Some(visual_index_start - 1); } - Self::move_cursor_up(git_interactive, 1); + Self::move_cursor_up(rebase_todo, 1); } - pub(crate) fn swap_range_down(&mut self, git_interactive: &mut GitInteractive) { - let start_index = git_interactive.get_selected_line_index(); + pub(crate) fn swap_range_down(&mut self, rebase_todo: &mut TodoFile) { + let start_index = rebase_todo.get_selected_line_index(); let end_index = self.visual_index_start.unwrap_or(start_index); - let lines_length = git_interactive.get_lines().len(); + let lines_length = rebase_todo.get_lines().len(); if end_index == lines_length || start_index == lines_length { return; @@ -193,27 +193,27 @@ impl<'l> List<'l> { }; for index in range.rev() { - git_interactive.swap_lines(index - 1, index); + rebase_todo.swap_lines(index - 1, index); } if let Some(visual_index_start) = self.visual_index_start { self.visual_index_start = Some(visual_index_start + 1); } - Self::move_cursor_down(git_interactive, 1); + Self::move_cursor_down(rebase_todo, 1); } fn handle_normal_mode_input( &mut self, input: Input, result: ProcessResult, - git_interactive: &mut GitInteractive, + rebase_todo: &mut TodoFile, ) -> ProcessResult { let mut result = result; match input { Input::ShowCommit => { - if !git_interactive.get_selected_line().get_hash().is_empty() { + if !rebase_todo.get_selected_line().get_hash().is_empty() { result = result.state(State::ShowCommit); } }, @@ -221,7 +221,7 @@ impl<'l> List<'l> { result = result.state(State::ConfirmAbort); }, Input::ForceAbort => { - git_interactive.clear(); + rebase_todo.set_noop(); result = result.exit_status(ExitStatus::Good); }, Input::Rebase => { @@ -232,31 +232,31 @@ impl<'l> List<'l> { }, Input::ActionBreak => { // TODO - does not stop multiple breaks in a row - let action = git_interactive.get_selected_line().get_action(); + let action = rebase_todo.get_selected_line().get_action(); if action == &Action::Break { - git_interactive.remove_line(git_interactive.get_selected_line_index()); - Self::move_cursor_up(git_interactive, 1); + rebase_todo.remove_line(rebase_todo.get_selected_line_index()); + Self::move_cursor_up(rebase_todo, 1); } else { - git_interactive.add_line(git_interactive.get_selected_line_index() + 1, Line::new_break()); - Self::move_cursor_down(git_interactive, 1); + rebase_todo.add_line(rebase_todo.get_selected_line_index() + 1, Line::new_break()); + Self::move_cursor_down(rebase_todo, 1); } }, - Input::ActionDrop => self.set_selected_line_action(git_interactive, Action::Drop, true), - Input::ActionEdit => self.set_selected_line_action(git_interactive, Action::Edit, true), - Input::ActionFixup => self.set_selected_line_action(git_interactive, Action::Fixup, true), - Input::ActionPick => self.set_selected_line_action(git_interactive, Action::Pick, true), - Input::ActionReword => self.set_selected_line_action(git_interactive, Action::Reword, true), - Input::ActionSquash => self.set_selected_line_action(git_interactive, Action::Squash, true), + Input::ActionDrop => self.set_selected_line_action(rebase_todo, Action::Drop, true), + Input::ActionEdit => self.set_selected_line_action(rebase_todo, Action::Edit, true), + Input::ActionFixup => self.set_selected_line_action(rebase_todo, Action::Fixup, true), + Input::ActionPick => self.set_selected_line_action(rebase_todo, Action::Pick, true), + Input::ActionReword => self.set_selected_line_action(rebase_todo, Action::Reword, true), + Input::ActionSquash => self.set_selected_line_action(rebase_todo, Action::Squash, true), Input::Edit => { - if git_interactive.get_selected_line().get_action() == &Action::Exec { + if rebase_todo.get_selected_line().get_action() == &Action::Exec { result = result.state(State::Edit); } }, - Input::SwapSelectedDown => self.swap_range_down(git_interactive), - Input::SwapSelectedUp => self.swap_range_up(git_interactive), + Input::SwapSelectedDown => self.swap_range_down(rebase_todo), + Input::SwapSelectedUp => self.swap_range_up(rebase_todo), Input::ToggleVisualMode => { - self.visual_index_start = Some(git_interactive.get_selected_line_index()); + self.visual_index_start = Some(rebase_todo.get_selected_line_index()); self.state = ListState::Visual; result = result.state(State::List); }, @@ -271,7 +271,7 @@ impl<'l> List<'l> { &mut self, input: Input, result: ProcessResult, - git_interactive: &mut GitInteractive, + rebase_todo: &mut TodoFile, ) -> ProcessResult { let mut result = result; @@ -280,7 +280,7 @@ impl<'l> List<'l> { result = result.state(State::ConfirmAbort); }, Input::ForceAbort => { - git_interactive.clear(); + rebase_todo.set_noop(); result = result.exit_status(ExitStatus::Good); }, Input::Rebase => { @@ -289,14 +289,14 @@ impl<'l> List<'l> { Input::ForceRebase => { result = result.exit_status(ExitStatus::Good); }, - Input::ActionDrop => self.set_selected_line_action(git_interactive, Action::Drop, false), - Input::ActionEdit => self.set_selected_line_action(git_interactive, Action::Edit, false), - Input::ActionFixup => self.set_selected_line_action(git_interactive, Action::Fixup, false), - Input::ActionPick => self.set_selected_line_action(git_interactive, Action::Pick, false), - Input::ActionReword => self.set_selected_line_action(git_interactive, Action::Reword, false), - Input::ActionSquash => self.set_selected_line_action(git_interactive, Action::Squash, false), - Input::SwapSelectedDown => self.swap_range_down(git_interactive), - Input::SwapSelectedUp => self.swap_range_up(git_interactive), + Input::ActionDrop => self.set_selected_line_action(rebase_todo, Action::Drop, false), + Input::ActionEdit => self.set_selected_line_action(rebase_todo, Action::Edit, false), + Input::ActionFixup => self.set_selected_line_action(rebase_todo, Action::Fixup, false), + Input::ActionPick => self.set_selected_line_action(rebase_todo, Action::Pick, false), + Input::ActionReword => self.set_selected_line_action(rebase_todo, Action::Reword, false), + Input::ActionSquash => self.set_selected_line_action(rebase_todo, Action::Squash, false), + Input::SwapSelectedDown => self.swap_range_down(rebase_todo), + Input::SwapSelectedUp => self.swap_range_up(rebase_todo), Input::ToggleVisualMode => { self.visual_index_start = None; self.state = ListState::Normal; diff --git a/src/main.rs b/src/main.rs index a9d84ca..eb1854a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,25 +36,26 @@ mod constants; mod display; mod edit; mod external_editor; -mod git_interactive; mod input; mod list; mod process; mod show_commit; +mod todo_file; +mod view; + #[cfg(test)] #[macro_use] mod testutil; -mod view; use crate::config::Config; use crate::constants::{NAME, VERSION}; use crate::display::curses::Curses; use crate::display::Display; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::InputHandler; use crate::process::exit_status::ExitStatus; use crate::process::modules::Modules; use crate::process::Process; +use crate::todo_file::TodoFile; use crate::view::View; use clap::{App, ArgMatches}; @@ -93,22 +94,22 @@ fn try_main(matches: &ArgMatches<'_>) -> Result<ExitStatus, Exit> { } })?; - let mut git_interactive = GitInteractive::new(filepath, config.git.comment_char.as_str()); - git_interactive.load_file().map_err(|err| { + let mut todo_file = TodoFile::new(filepath, config.git.comment_char.as_str()); + todo_file.load_file().map_err(|err| { Exit { message: err.to_string(), status: ExitStatus::FileReadError, } })?; - if git_interactive.is_noop() { + if todo_file.is_noop() { return Err(Exit { message: String::from("A noop rebase was provided, skipping editing"), status: ExitStatus::Good, }); } - if git_interactive.get_lines().is_empty() { + if todo_file.get_lines().is_empty() { return Err(Exit { message: String::from("An empty rebase was provided, nothing to edit"), status: ExitStatus::Good, @@ -120,7 +121,7 @@ fn try_main(matches: &ArgMatches<'_>) -> Result<ExitStatus, Exit> { let input_handler = InputHandler::new(&display, &config.key_bindings); let view = View::new(&display, &config); let modules = Modules::new(&display, &config); - let mut process = Process::new(git_interactive, &view, &input_handler); + let mut process = Process::new(todo_file, &view, &input_handler); let result = process.run(modules); display.end(); diff --git a/src/process/error.rs b/src/process/error.rs index d909aab..9ee50a7 100644 --- a/src/process/error.rs +++ b/src/process/error.rs @@ -1,11 +1,11 @@ use crate::display::display_color::DisplayColor; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; use crate::process::util::handle_view_data_scroll; +use crate::todo_file::TodoFile; use crate::view::line_segment::LineSegment; use crate::view::view_data::ViewData; use crate::view::view_line::ViewLine; @@ -17,25 +17,19 @@ pub struct Error { } impl ProcessModule for Error { - fn activate(&mut self, _: &GitInteractive, previous_state: State) -> ProcessResult { + fn activate(&mut self, _: &TodoFile, previous_state: State) -> ProcessResult { self.return_state = previous_state; ProcessResult::new() } - fn build_view_data(&mut self, view: &View<'_>, _: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, _: &TodoFile) -> &ViewData { let (view_width, view_height) = view.get_view_size(); self.view_data.set_view_size(view_width, view_height); self.view_data.rebuild(); &self.view_data } - fn handle_input( - &mut self, - input_handler: &InputHandler<'_>, - _: &mut GitInteractive, - _: &View<'_>, - ) -> ProcessResult - { + fn handle_input(&mut self, input_handler: &InputHandler<'_>, _: &mut TodoFile, _: &View<'_>) -> ProcessResult { let input = input_handler.get_input(InputMode::Default); let mut result = ProcessResult::new().input(input); if handle_view_data_scroll(input, &mut self.view_data).is_none() && input != Input::Resize { diff --git a/src/process/help.rs b/src/process/help.rs index f909441..55bf0e1 100644 --- a/src/process/help.rs +++ b/src/process/help.rs @@ -1,11 +1,11 @@ use crate::display::display_color::DisplayColor; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::{InputHandler, InputMode}; use crate::input::Input; use crate::process::process_module::ProcessModule; use crate::process::process_result::ProcessResult; use crate::process::state::State; use crate::process::util::handle_view_data_scroll; +use crate::todo_file::TodoFile; use crate::view::line_segment::LineSegment; use crate::view::view_data::ViewData; use crate::view::view_line::ViewLine; @@ -30,7 +30,7 @@ pub struct Help { } impl ProcessModule for Help { - fn activate(&mut self, _: &GitInteractive, return_state: State) -> ProcessResult { + fn activate(&mut self, _: &TodoFile, return_state: State) -> ProcessResult { if self.return_state.is_none() { self.return_state = Some(return_state); } @@ -41,7 +41,7 @@ impl ProcessModule for Help { self.return_state = None; } - fn build_view_data(&mut self, view: &View<'_>, _: &GitInteractive) -> &ViewData { + fn build_view_data(&mut self, view: &View<'_>, _: &TodoFile) -> &ViewData { let (view_width, view_height) = view.get_view_size(); let view_data = self.view_data.as_mut().unwrap_or(&mut self.no_help_view_data); view_data.set_view_size(view_width, view_height); @@ -49,13 +49,7 @@ impl ProcessModule for Help { view_data } - fn handle_input( - &mut self, - input_handler: &InputHandler<'_>, - _: &mut GitInteractive, - _: &View<'_>, - ) -> ProcessResult - { + fn handle_input(&mut self, input_handler: &InputHandler<'_>, _: &mut TodoFile, _: &View<'_>) -> ProcessResult { let input = input_handler.get_input(InputMode::Default); let mut result = ProcessResult::new().input(input); let mut view_data = self.view_data.as_mut().unwrap_or(&mut self.no_help_view_data); diff --git a/src/process/mod.rs b/src/process/mod.rs index 114b67f..19ae05c 100644 --- a/src/process/mod.rs +++ b/src/process/mod.rs @@ -10,7 +10,6 @@ pub mod testutil; pub mod util; pub mod window_size_error; -use crate::git_interactive::GitInteractive; use crate::input::input_handler::InputHandler; use crate::input::Input; use crate::process::exit_status::ExitStatus; @@ -18,28 +17,24 @@ use crate::process::modules::Modules; use crate::process::process_result::ProcessResult; use crate::process::state::State; use crate::process::window_size_e |