fix(maestro): update stale worktree test for branch-collision suffixing
add_fails_when_branch_already_exists asserted the pre-#77 behavior:
that a branch collision errors outright. Since 49ab7e9, add_new
sidesteps a branch collision with a numeric suffix instead, so the
test was failing CI on main regardless of any given change.
Replaces it with a test asserting the actual (and intended) suffixing
behavior.
This commit is contained in:
@@ -405,13 +405,17 @@ fn run_git(dir: &std::path::Path, args: &[&str]) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `git worktree add -b` alone fails outright when the branch already exists,
|
||||||
|
/// even with the target directory free — a random handle commonly collides
|
||||||
|
/// with one an earlier, already-removed worktree left behind. `add_new`
|
||||||
|
/// sidesteps it on the branch name itself instead of erroring (#77).
|
||||||
#[test]
|
#[test]
|
||||||
fn add_fails_when_branch_already_exists() {
|
fn add_new_suffixes_branch_name_on_branch_collision() {
|
||||||
let repo_dir = TempDir::new().unwrap();
|
let repo_dir = TempDir::new().unwrap();
|
||||||
let repo = repo_dir.path().to_path_buf();
|
let repo = repo_dir.path().to_path_buf();
|
||||||
init_repo(&repo);
|
init_repo(&repo);
|
||||||
|
|
||||||
// pre-create the branch
|
// pre-create the branch, unused by any worktree.
|
||||||
let status = Command::new("git")
|
let status = Command::new("git")
|
||||||
.arg("-C")
|
.arg("-C")
|
||||||
.arg(&repo)
|
.arg(&repo)
|
||||||
@@ -423,9 +427,17 @@ fn add_fails_when_branch_already_exists() {
|
|||||||
let wt_root = TempDir::new().unwrap();
|
let wt_root = TempDir::new().unwrap();
|
||||||
let mgr = WorktreeManager::new(Some(wt_root.path().to_path_buf()));
|
let mgr = WorktreeManager::new(Some(wt_root.path().to_path_buf()));
|
||||||
|
|
||||||
let err = mgr.add_new(&repo, "feat/dup").unwrap_err();
|
let path = mgr
|
||||||
let msg = format!("{err}");
|
.add_new(&repo, "feat/dup")
|
||||||
assert!(msg.contains("git exited"), "{msg}");
|
.expect("sidesteps the branch collision");
|
||||||
|
assert!(path.ends_with("feat/dup-2"), "{}", path.display());
|
||||||
|
assert!(path.exists());
|
||||||
|
|
||||||
|
// The pre-existing branch is untouched; the new worktree checked out the
|
||||||
|
// suffixed one instead of erroring or adopting `feat/dup`.
|
||||||
|
let branches = worktree_branches(&repo);
|
||||||
|
assert!(branches.contains(&"feat/dup-2".to_string()), "{branches:?}");
|
||||||
|
assert!(!branches.contains(&"feat/dup".to_string()), "{branches:?}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The project picker lists linked worktrees as pickable rows, so `base_repo`
|
/// The project picker lists linked worktrees as pickable rows, so `base_repo`
|
||||||
|
|||||||
Reference in New Issue
Block a user