use inquire::{MultiSelect, Text};
use crate::git_operations::{self, Change};
pub fn run_stash(push: bool) -> Result<(), String> {
if push {
let repo = git_operations::get_repository().map_err(|e| e.to_string())?;
let (changes, _staged) = git_operations::get_changes(&repo);
if changes.is_empty() {
println!("No untracked or modified files found.");
return Ok(());
}
let mut selected_files = Vec::<Change>::new();
let selected_unstaged = MultiSelect::new("Select changes to stash:", changes)
.prompt()
.map_err(|e| format!("An error occurred during selection: {}", e))?;
if selected_unstaged.is_empty() && selected_files.is_empty() {
println!("No files selected.");
return Ok(());
}
let user_input = Text::new("Enter stash message:")
.prompt()
.map_err(|e| format!("An error occurred: {}", e))?;
selected_files.extend(selected_unstaged);
git_operations::push_stash(selected_files, &user_input)
.map_err(|e| format!("An error occurred during stash: {}", e))?;
println!("✅ Stash successful!");
}
Ok(())
}