use eyre::Result;
use crate::config::Config;
use crate::system;
#[derive(Debug, usage_rs::Args)]
#[usage(
verbatim_doc_comment,
example(
r###"mise bootstrap dotfiles diff
mise bootstrap dotfiles diff ~/.zshrc"###
)
)]
pub(crate) struct DotfilesDiff {
#[usage(value_name = "TARGET")]
targets: Vec<String>,
}
impl DotfilesDiff {
pub(crate) async fn run(self) -> Result<()> {
let config = Config::get().await?;
let (files, edits) = super::select_requests(&config, &self.targets)?;
if files.is_empty() && edits.is_empty() {
super::warn_if_dotfiles_ignored();
info!("no dotfiles configured in [dotfiles]");
return Ok(());
}
if !files.is_empty() {
system::files::print_diffs(&config, &files)?;
}
if !edits.is_empty() {
system::edits::print_diffs(&config, &edits)?;
}
Ok(())
}
}