summaryrefslogtreecommitdiffstats
path: root/src/list/mod.rs
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2020-10-29 11:53:55 -0230
committerTim Oram <dev@mitmaro.ca>2020-10-29 21:23:19 -0230
commit337daa271780f95b4b19e4e9399cf59d236eb5df (patch)
tree918212621c5b9bc02f5978135490e622178b5410 /src/list/mod.rs
parent4cd7109b36d200b252c36dd29b23eb5c26a03989 (diff)
Move git interactive to todo file module
The GitInteractive stuct is one of the oldest structs in the project and was initially used as a catch-all for any functionality that was shared across the application. Overtime the functionality of this file has been moved into the various modules of the project. At this point, the only thing the struct handles is the direct interactions with the rebase todo file and it's lines. This finally moves the global stuct into a module.
Diffstat (limited to 'src/list/mod.rs')
-rw-r--r--src/list/mod.rs120
1 files changed, 60 insertions, 60 deletions
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;