summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--src/confirm_abort/mod.rs10
-rw-r--r--src/confirm_rebase/mod.rs14
-rw-r--r--src/edit/mod.rs18
-rw-r--r--src/external_editor/mod.rs46
-rw-r--r--src/list/mod.rs120
-rw-r--r--src/main.rs17
-rw-r--r--src/process/error.rs14
-rw-r--r--src/process/help.rs14
-rw-r--r--src/process/mod.rs21
-rw-r--r--src/process/modules.rs14
-rw-r--r--src/process/process_module.rs8
-rw-r--r--src/process/testutil.rs18
-rw-r--r--src/process/window_size_error.rs14
-rw-r--r--src/show_commit/mod.rs18
-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/