fix(notstrap): fix clippy warning and unwrap panics in lib extraction

This commit is contained in:
Joseph O'Brien
2026-04-01 05:00:26 -04:00
parent 1545a913c5
commit 748a0d8634
3 changed files with 14 additions and 8 deletions

View File

@@ -9,6 +9,8 @@ use std::path::{Path, PathBuf};
pub mod prereqs;
pub mod repo;
type EnvInjector = Box<dyn Fn(&Path) -> Result<String>>;
#[derive(Deserialize)]
pub struct NotstrapConfig {
pub bootstrap: BootstrapSection,
@@ -26,8 +28,8 @@ pub struct BootstrapSection {
pub sops_file: String,
}
pub fn default_bw_item() -> String { "age-key-dotfiles".to_string() }
pub fn default_sops_file() -> String { "secrets/bootstrap.sops.env".to_string() }
pub(crate) fn default_bw_item() -> String { "age-key-dotfiles".to_string() }
pub(crate) fn default_sops_file() -> String { "secrets/bootstrap.sops.env".to_string() }
pub struct BootstrapOptions {
pub config: PathBuf,
@@ -37,7 +39,7 @@ pub struct BootstrapOptions {
/// None = skip prereq check (tests). Some(f) = run f().
pub check_prereqs: Option<Box<dyn Fn() -> Result<()>>>,
/// None = skip env injection (tests). Some(f) = decrypt sops at path and inject.
pub env_injector: Option<Box<dyn Fn(&Path) -> Result<String>>>,
pub env_injector: Option<EnvInjector>,
}
pub fn run(opts: BootstrapOptions) -> Result<Report> {
@@ -59,9 +61,11 @@ pub fn run(opts: BootstrapOptions) -> Result<Report> {
.with_context(|| format!("cannot read {}", opts.config.display()))?;
let cfg: NotstrapConfig = toml::from_str(&config_content)?;
let dotfiles_dir = opts.dotfiles.unwrap_or_else(|| {
notcore::expand_tilde(&cfg.bootstrap.dotfiles_dir).unwrap()
});
let dotfiles_dir = match opts.dotfiles {
Some(d) => d,
None => notcore::expand_tilde(&cfg.bootstrap.dotfiles_dir)
.with_context(|| format!("cannot expand dotfiles_dir: {}", cfg.bootstrap.dotfiles_dir))?,
};
// 3. Clone dotfiles if missing
match repo::clone_if_missing(&cfg.bootstrap.dotfiles_repo, &dotfiles_dir) {

View File

@@ -40,7 +40,7 @@ fn main() -> Result<()> {
key_file,
dotfiles,
check_prereqs: Some(Box::new(prereqs::check_prerequisites)),
env_injector: Some(Box::new(|p| notsecrets::decrypt_sops(p))),
env_injector: Some(Box::new(notsecrets::decrypt_sops)),
};
let report = run(opts)?;
report.print();

View File

@@ -7,7 +7,9 @@ pub fn clone_if_missing(url: &str, dest: &Path) -> Result<bool> {
return Ok(false);
}
let status = Command::new("git")
.args(["clone", url, dest.to_str().unwrap()])
.arg("clone")
.arg(url)
.arg(dest)
.status()
.context("failed to run git clone")?;
if !status.success() {