summaryrefslogtreecommitdiffstats
path: root/src/process
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/process
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/process')
-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
7 files changed, 40 insertions, 63 deletions
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_error::WindowSizeError;
+use crate::todo_file::TodoFile;
use crate::view::View;
use anyhow::Result;
pub struct Process<'r> {
exit_status: Option<ExitStatus>,
- git_interactive: GitInteractive,
+ rebase_todo: TodoFile,
input_handler: &'r InputHandler<'r>,
state: State,
view: &'r View<'r>,
}
impl<'r> Process<'r> {
- pub(crate) const fn new(
- git_interactive: GitInteractive,
- view: &'r View<'r>,
- input_handler: &'r InputHandler<'r>,
- ) -> Self
- {
+ pub(crate) const fn new(rebase_todo: TodoFile, view: &'r View<'r>, input_handler: &'r InputHandler<'r>) -> Self {
Self {
state: State::List,
exit_status: None,
- git_interactive,
+ rebase_todo,
input_handler,
view,
}
@@ -53,8 +48,8 @@ impl<'r> Process<'r> {
self.activate(&mut modules, State::List);
while self.exit_status.is_none() {
self.view
- .render(modules.build_view_data(self.state, self.view, &self.git_interactive));
- let result = modules.handle_input(self.state, self.input_handler, &mut self.git_interactive, self.view);
+ .render(modules.build_view_data(self.state, self.view, &self.rebase_todo));
+ let result = modules.handle_input(self.state, self.input_handler, &mut self.rebase_todo, self.view);
self.handle_process_result(&mut modules, &result);
}
self.exit_end()?;
@@ -104,12 +99,12 @@ impl<'r> Process<'r> {
}
fn activate(&mut self, modules: &mut Modules<'_>, previous_state: State) {
- let result = modules.activate(self.state, &self.git_interactive, previous_state);
+ let result = modules.activate(self.state, &self.rebase_todo, previous_state);
self.handle_process_result(modules, &result);
}
fn exit_end(&mut self) -> Result<()> {
- let result = self.git_interactive.write_file();
+ let result = self.rebase_todo.write_file();
if result.is_err() {
self.exit_status = Some(ExitStatus::FileWriteError);
}
diff --git a/src/process/modules.rs b/src/process/modules.rs
index 8f71d6a..dcccb3b 100644
--- a/src/process/modules.rs
+++ b/src/process/modules.rs
@@ -4,7 +4,6 @@ use crate::confirm_rebase::ConfirmRebase;
use crate::display::Display;
use crate::edit::Edit;
use crate::external_editor::ExternalEditor;
-use crate::git_interactive::GitInteractive;
use crate::input::input_handler::InputHandler;
use crate::list::List;
use crate::process::error::Error;
@@ -14,6 +13,7 @@ use crate::process::process_result::ProcessResult;
use crate::process::state::State;
use crate::process::window_size_error::WindowSizeError;
use crate::show_commit::ShowCommit;
+use crate::todo_file::TodoFile;
use crate::view::view_data::ViewData;
use crate::view::View;
@@ -72,28 +72,28 @@ impl<'m> Modules<'m> {
}
}
- pub fn activate(&mut self, state: State, git_interactive: &GitInteractive, previous_state: State) -> ProcessResult {
- self.get_mut_module(state).activate(git_interactive, previous_state)
+ pub fn activate(&mut self, state: State, rebase_todo: &TodoFile, previous_state: State) -> ProcessResult {
+ self.get_mut_module(state).activate(rebase_todo, previous_state)
}
pub fn deactivate(&mut self, state: State) {
self.get_mut_module(state).deactivate()
}
- pub fn build_view_data(&mut self, state: State, view: &View<'_>, git_interactive: &GitInteractive) -> &ViewData {
- self.get_mut_module(state).build_view_data(view, git_interactive)
+ pub fn build_view_data(&mut self, state: State, view: &View<'_>, rebase_todo: &TodoFile) -> &ViewData {
+ self.get_mut_module(state).build_view_data(view, rebase_todo)
}
pub fn handle_input(
&mut self,
state: State,
input_handler: &InputHandler<'_>,
- git_interactive: &mut GitInteractive,
+ rebase_todo: &mut TodoFile,
view: &View<'_>,
) -> ProcessResult
{
self.get_mut_module(state)
- .handle_input(input_handler, git_interactive, view)
+ .handle_input(input_handler, rebase_todo, view)
}
pub fn set_error_message(&mut self, error: &anyhow::Error) {
diff --git a/src/process/process_module.rs b/src/process/process_module.rs
index c01b1e9..ced731a 100644
--- a/src/process/process_module.rs
+++ b/src/process/process_module.rs
@@ -1,24 +1,24 @@
-use crate::git_interactive::GitInteractive;
use crate::input::input_handler::InputHandler;
use crate::input::Input;
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;
pub trait ProcessModule {
- fn activate(&mut self, _git_interactive: &GitInteractive, _previous_state: State) -> ProcessResult {
+ fn activate(&mut self, _rebase_todo: &TodoFile, _previous_state: State) -> ProcessResult {
ProcessResult::new()
}
fn deactivate(&mut self) {}
- fn build_view_data(&mut self, _view: &View<'_>, _git_interactive: &GitInteractive) -> &ViewData;
+ fn build_view_data(&mut self, _view: &View<'_>, _rebase_todo: &TodoFile) -> &ViewData;
fn handle_input(
&mut self,
_input_handler: &InputHandler<'_>,
- _git_interactive: &mut GitInteractive,
+ _rebase_todo: &mut TodoFile,
_view: &View<'_>,
) -> ProcessResult
{
diff --git a/src/process/testutil.rs b/src/process/testutil.rs
index 03e1d1d..8122a46 100644
--- a/src/process/testutil.rs
+++ b/src/process/testutil.rs
@@ -2,7 +2,6 @@ use crate::config::key_bindings::KeyBindings;
use crate::config::Config;
use crate::display::curses::{Curses, Input as PancursesInput};
use crate::display::Display;
-use crate::git_interactive::GitInteractive;
use crate::input::input_handler::InputHandler;
use crate::input::Input;
use crate::list::line::Line;
@@ -10,6 +9,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::testutil::render_view_data;
use crate::view::view_data::ViewData;
use crate::view::View;
@@ -20,7 +20,7 @@ use std::path::Path;
use tempfile::{Builder, NamedTempFile};
pub struct TestContext<'t> {
- pub git_interactive: &'t mut GitInteractive,
+ pub rebase_todo_file: &'t mut TodoFile,
todo_file: Cell<NamedTempFile>,
pub input_handler: &'t InputHandler<'t>,
pub view: &'t View<'t>,
@@ -30,7 +30,7 @@ pub struct TestContext<'t> {
impl<'t> TestContext<'t> {
pub fn activate(&mut self, module: &'_ mut dyn ProcessModule, state: State) -> ProcessResult {
- module.activate(self.git_interactive, state)
+ module.activate(self.rebase_todo_file, state)
}
#[allow(clippy::unused_self)]
@@ -39,17 +39,17 @@ impl<'t> TestContext<'t> {
}
pub fn build_view_data<'tc>(&self, module: &'tc mut dyn ProcessModule) -> &'tc ViewData {
- module.build_view_data(self.view, self.git_interactive)
+ module.build_view_data(self.view, self.rebase_todo_file)
}
pub fn handle_input(&mut self, module: &'_ mut dyn ProcessModule) -> ProcessResult {
- module.handle_input(self.input_handler, self.git_interactive, self.view)
+ module.handle_input(self.input_handler, self.rebase_todo_file, self.view)
}
pub fn handle_all_inputs(&mut self, module: &'_ mut dyn ProcessModule) -> Vec<ProcessResult> {
let mut results = vec![];
for _ in 0..self.num_inputs {
- results.push(module.handle_input(self.input_handler, self.git_interactive, self.view));
+ results.push(module.handle_input(self.input_handler, self.rebase_todo_file, self.view));
}
results
}
@@ -470,12 +470,12 @@ where C: for<'p> FnOnce(TestContext<'p>) {
.tempfile_in(git_repo_dir.as_str())
.unwrap();
- let mut git_interactive = GitInteractive::new(todo_file.path().to_str().unwrap(), "#");
- git_interactive.set_lines(lines.iter().map(|l| Line::new(l).unwrap()).collect());
+ let mut rebsae_todo_file = TodoFile::new(todo_file.path().to_str().unwrap(), "#");
+ rebsae_todo_file.set_lines(lines.iter().map(|l| Line::new(l).unwrap()).collect());
let input_handler = InputHandler::new(&display, &config.key_bindings);
callback(TestContext {
- git_interactive: &mut git_interactive,
+ rebase_todo_file: &mut rebsae_todo_file,
todo_file: Cell::new(todo_file),
view: &view,
input_handler: &input_handler,
diff --git a/src/process/window_size_error.rs b/src/process/window_size_error.rs
index ece4a28..e112e73 100644
--- a/src/process/window_size_error.rs
+++ b/src/process/window_size_error.rs
@@ -1,10 +1,10 @@
use crate::constants::{MINIMUM_COMPACT_WINDOW_WIDTH, MINIMUM_WINDOW_HEIGHT, MINIMUM_WINDOW_HEIGHT_ERROR_WIDTH};
-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::TodoFile;
use crate::view::view_data::ViewData;
use crate::view::view_line::ViewLine;
use crate::view::View;
@@ -20,12 +20,12 @@ pub struct WindowSizeError {
}
impl ProcessModule for WindowSizeError {
- 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();
let message = if view_width <= MINIMUM_COMPACT_WINDOW_WIDTH {
if view_width >= SHORT_ERROR_MESSAGE.len() {
@@ -59,13 +59,7 @@ impl ProcessModule for WindowSizeError {
&self.view_data
}
- fn handle_input(
- &mut self,
- input_handler: &InputHandler<'_>,
- _: &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::Default);
let mut result = ProcessResult::new().input(input);