@@ -7,13 +7,18 @@ TEST_PASSES_SANITIZE_LEAK=true
test_expect_success 'setup' '
test_commit init &&
- git branch -f fake-1 &&
- git branch -f fake-2 &&
for i in 1 2 3 4
do
+ git checkout -b conflict-$i &&
+ echo "not I" >$i.t &&
+ git add $i.t &&
+ git commit -m "will conflict" &&
+
+ git checkout - &&
test_commit $i &&
git branch wt-$i &&
+ git branch fake-$i &&
git worktree add wt-$i wt-$i || return 1
done &&
@@ -44,26 +49,26 @@ test_expect_success 'refuse to overwrite: checked out in worktree' '
done
'
-test_expect_success 'refuse to overwrite: worktree in bisect' '
- test_when_finished rm -rf .git/worktrees/wt-*/BISECT_* &&
+test_expect_success !SANITIZE_LEAK 'refuse to overwrite: worktree in bisect' '
+ test_when_finished git -C wt-4 bisect reset &&
- touch .git/worktrees/wt-4/BISECT_LOG &&
- echo refs/heads/fake-2 >.git/worktrees/wt-4/BISECT_START &&
+ # Set up a bisect so HEAD no longer points to wt-4.
+ git -C wt-4 bisect start &&
+ git -C wt-4 bisect bad wt-4 &&
+ git -C wt-4 bisect good wt-1 &&
- test_must_fail git branch -f fake-2 HEAD 2>err &&
- grep "cannot force update the branch '\''fake-2'\'' checked out at.*wt-4" err
+ test_must_fail git branch -f wt-4 HEAD 2>err &&
+ grep "cannot force update the branch '\''wt-4'\'' checked out at.*wt-4" err
'
-test_expect_success 'refuse to overwrite: worktree in rebase' '
- test_when_finished rm -rf .git/worktrees/wt-*/rebase-merge &&
+test_expect_success !SANITIZE_LEAK 'refuse to overwrite: worktree in rebase' '
+ test_when_finished git -C wt-2 rebase --abort &&
- mkdir -p .git/worktrees/wt-3/rebase-merge &&
- touch .git/worktrees/wt-3/rebase-merge/interactive &&
- echo refs/heads/fake-1 >.git/worktrees/wt-3/rebase-merge/head-name &&
- echo refs/heads/fake-2 >.git/worktrees/wt-3/rebase-merge/onto &&
+ # This will fail part-way through due to a conflict.
+ test_must_fail git -C wt-2 rebase conflict-2 &&
- test_must_fail git branch -f fake-1 HEAD 2>err &&
- grep "cannot force update the branch '\''fake-1'\'' checked out at.*wt-3" err
+ test_must_fail git branch -f wt-2 HEAD 2>err &&
+ grep "cannot force update the branch '\''wt-2'\'' checked out at.*wt-2" err
'
test_expect_success !SANITIZE_LEAK 'refuse to fetch over ref: checked out' '
@@ -77,24 +82,24 @@ test_expect_success !SANITIZE_LEAK 'refuse to fetch over ref: checked out' '
'
test_expect_success !SANITIZE_LEAK 'refuse to fetch over ref: worktree in bisect' '
- test_when_finished rm -rf .git/worktrees/wt-*/BISECT_* &&
+ test_when_finished git -C wt-4 bisect reset &&
- touch .git/worktrees/wt-4/BISECT_LOG &&
- echo refs/heads/fake-2 >.git/worktrees/wt-4/BISECT_START &&
+ # Set up a bisect so HEAD no longer points to wt-4.
+ git -C wt-4 bisect start &&
+ git -C wt-4 bisect bad wt-4 &&
+ git -C wt-4 bisect good wt-1 &&
- test_must_fail git fetch server +refs/heads/fake-2:refs/heads/fake-2 2>err &&
+ test_must_fail git fetch server +refs/heads/wt-4:refs/heads/wt-4 2>err &&
grep "refusing to fetch into branch" err
'
test_expect_success !SANITIZE_LEAK 'refuse to fetch over ref: worktree in rebase' '
- test_when_finished rm -rf .git/worktrees/wt-*/rebase-merge &&
+ test_when_finished git -C wt-3 rebase --abort &&
- mkdir -p .git/worktrees/wt-4/rebase-merge &&
- touch .git/worktrees/wt-4/rebase-merge/interactive &&
- echo refs/heads/fake-1 >.git/worktrees/wt-4/rebase-merge/head-name &&
- echo refs/heads/fake-2 >.git/worktrees/wt-4/rebase-merge/onto &&
+ # This will fail part-way through due to a conflict.
+ test_must_fail git -C wt-3 rebase conflict-3 &&
- test_must_fail git fetch server +refs/heads/fake-1:refs/heads/fake-1 2>err &&
+ test_must_fail git fetch server +refs/heads/wt-3:refs/heads/wt-3 2>err &&
grep "refusing to fetch into branch" err
'