use std::path::Path;
use anyhow::Context as _;
use log::LevelFilter;
use simplelog::{ColorChoice, ConfigBuilder, TermLogger, TerminalMode};
pub fn initialize_logger() -> anyhow::Result<()> {
TermLogger::init(
#[cfg(debug_assertions)]
LevelFilter::max(),
#[cfg(not(debug_assertions))]
LevelFilter::Info,
ConfigBuilder::new()
.add_filter_allow_str("git_statuses")
.build(),
TerminalMode::Mixed,
ColorChoice::Auto,
)
.context("Failed to initialize logger")
}
pub trait GitPathExt {
fn is_git_directory(&self) -> bool;
fn is_git_worktree(&self) -> bool;
fn dir_name(&self) -> String;
}
impl GitPathExt for Path {
fn is_git_directory(&self) -> bool {
self.is_dir() && self.join(".git").exists()
}
fn is_git_worktree(&self) -> bool {
if !self.is_dir() {
return false;
}
let git_path = self.join(".git");
git_path.exists() && git_path.is_file()
}
fn dir_name(&self) -> String {
self.file_name()
.and_then(|n| n.to_str())
.unwrap_or("unknown")
.to_owned()
}
}