use crate::git;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum WorkingDirState {
Clean,
HasUnstagedChanges,
HasStagedChanges,
HasMixedChanges,
}
impl WorkingDirState {
pub fn detect() -> Self {
let has_unstaged = git::has_unstaged_changes();
let has_staged = git::has_staged_changes();
match (has_unstaged, has_staged) {
(false, false) => WorkingDirState::Clean,
(true, false) => WorkingDirState::HasUnstagedChanges,
(false, true) => WorkingDirState::HasStagedChanges,
(true, true) => WorkingDirState::HasMixedChanges,
}
}
pub fn is_clean(&self) -> bool {
matches!(self, WorkingDirState::Clean)
}
pub fn description(&self) -> &'static str {
match self {
WorkingDirState::Clean => "clean",
WorkingDirState::HasUnstagedChanges => "has unstaged changes",
WorkingDirState::HasStagedChanges => "has staged changes",
WorkingDirState::HasMixedChanges => "has staged and unstaged changes",
}
}
}