Refactor: Formalize ports and update related files

This commit is contained in:
Joseph O'Brien
2026-04-15 21:27:25 -04:00
parent ac0672f64f
commit 67f20eef2d
23 changed files with 979 additions and 258 deletions

View File

@@ -189,7 +189,7 @@ fn test_setup_hooks_skipped_on_rerun() {
interpreter: None,
};
let runner = HookRunner::new(d.to_path_buf());
let phase_report = run_phase(&[hook_spec], &HookPhase::Setup, &runner);
let phase_report = run_phase(&[hook_spec], &HookPhase::Setup, &runner).unwrap();
let step = phase_report
.steps
.iter()
@@ -244,3 +244,49 @@ fn test_bootstrap_fails_fast_on_bad_key() {
"should not reach link dotfiles step after key failure"
);
}
/// A link conflict must stop bootstrap before any hook phase runs.
#[test]
fn test_bootstrap_stops_after_link_failure() {
let env = make_test_env();
let d = env.dotfiles.path();
let home = env.home.path();
fs::write(home.join(".zshrc"), "local override\n").unwrap();
let script = d.join("scripts/greet.nu");
fs::write(&script, "print hello\n").unwrap();
fs::write(
&env.config,
format!(
"[bootstrap]\n\
dotfiles_repo = \"https://example.com/fake.git\"\n\
dotfiles_dir = \"{dotfiles}\"\n\n\
[[hooks]]\n\
name = \"greet\"\n\
script = \"{script}\"\n\
phase = \"dot\"\n",
dotfiles = d.display(),
script = script.display(),
),
)
.unwrap();
let report = run(make_opts(&env, false)).unwrap();
let link_step = report
.steps
.iter()
.find(|step| step.name == "link dotfiles")
.expect("link dotfiles step should be present");
assert!(
matches!(link_step.status, StepStatus::Failed(_)),
"link failure should be surfaced, got {:?}",
link_step.status
);
assert!(
report.steps.iter().all(|step| step.name != "dot hooks"),
"bootstrap should stop before running hooks after link failure: {:?}",
report.steps
);
}

View File

@@ -39,7 +39,7 @@ fn test_nothooks_notsecrets_independent() {
};
let runner = HookRunner::new(dir.path().to_path_buf());
let result = runner.run_hook(&spec);
let result = runner.run_hook(&spec).expect("hook runner should not fail");
assert!(
matches!(result, HookResult::Ok),
"expected HookResult::Ok, got: {result:?}"