You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.0 KiB
144 lines
4.0 KiB
#!/bin/sh |
|
|
|
test_description='test git worktree move, remove, lock and unlock' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success 'setup' ' |
|
test_commit init && |
|
git worktree add source && |
|
git worktree list --porcelain >out && |
|
grep "^worktree" out >actual && |
|
cat <<-EOF >expected && |
|
worktree $(pwd) |
|
worktree $(pwd)/source |
|
EOF |
|
test_cmp expected actual |
|
' |
|
|
|
test_expect_success 'lock main worktree' ' |
|
test_must_fail git worktree lock . |
|
' |
|
|
|
test_expect_success 'lock linked worktree' ' |
|
git worktree lock --reason hahaha source && |
|
echo hahaha >expected && |
|
test_cmp expected .git/worktrees/source/locked |
|
' |
|
|
|
test_expect_success 'lock linked worktree from another worktree' ' |
|
rm .git/worktrees/source/locked && |
|
git worktree add elsewhere && |
|
git -C elsewhere worktree lock --reason hahaha ../source && |
|
echo hahaha >expected && |
|
test_cmp expected .git/worktrees/source/locked |
|
' |
|
|
|
test_expect_success 'lock worktree twice' ' |
|
test_must_fail git worktree lock source && |
|
echo hahaha >expected && |
|
test_cmp expected .git/worktrees/source/locked |
|
' |
|
|
|
test_expect_success 'lock worktree twice (from the locked worktree)' ' |
|
test_must_fail git -C source worktree lock . && |
|
echo hahaha >expected && |
|
test_cmp expected .git/worktrees/source/locked |
|
' |
|
|
|
test_expect_success 'unlock main worktree' ' |
|
test_must_fail git worktree unlock . |
|
' |
|
|
|
test_expect_success 'unlock linked worktree' ' |
|
git worktree unlock source && |
|
test_path_is_missing .git/worktrees/source/locked |
|
' |
|
|
|
test_expect_success 'unlock worktree twice' ' |
|
test_must_fail git worktree unlock source && |
|
test_path_is_missing .git/worktrees/source/locked |
|
' |
|
|
|
test_expect_success 'move non-worktree' ' |
|
mkdir abc && |
|
test_must_fail git worktree move abc def |
|
' |
|
|
|
test_expect_success 'move locked worktree' ' |
|
git worktree lock source && |
|
test_when_finished "git worktree unlock source" && |
|
test_must_fail git worktree move source destination |
|
' |
|
|
|
test_expect_success 'move worktree' ' |
|
git worktree move source destination && |
|
test_path_is_missing source && |
|
git worktree list --porcelain >out && |
|
grep "^worktree.*/destination$" out && |
|
! grep "^worktree.*/source$" out && |
|
git -C destination log --format=%s >actual2 && |
|
echo init >expected2 && |
|
test_cmp expected2 actual2 |
|
' |
|
|
|
test_expect_success 'move main worktree' ' |
|
test_must_fail git worktree move . def |
|
' |
|
|
|
test_expect_success 'move worktree to another dir' ' |
|
mkdir some-dir && |
|
git worktree move destination some-dir && |
|
test_when_finished "git worktree move some-dir/destination destination" && |
|
test_path_is_missing destination && |
|
git worktree list --porcelain >out && |
|
grep "^worktree.*/some-dir/destination$" out && |
|
git -C some-dir/destination log --format=%s >actual2 && |
|
echo init >expected2 && |
|
test_cmp expected2 actual2 |
|
' |
|
|
|
test_expect_success 'remove main worktree' ' |
|
test_must_fail git worktree remove . |
|
' |
|
|
|
test_expect_success 'remove locked worktree' ' |
|
git worktree lock destination && |
|
test_when_finished "git worktree unlock destination" && |
|
test_must_fail git worktree remove destination |
|
' |
|
|
|
test_expect_success 'remove worktree with dirty tracked file' ' |
|
echo dirty >>destination/init.t && |
|
test_when_finished "git -C destination checkout init.t" && |
|
test_must_fail git worktree remove destination |
|
' |
|
|
|
test_expect_success 'remove worktree with untracked file' ' |
|
: >destination/untracked && |
|
test_must_fail git worktree remove destination |
|
' |
|
|
|
test_expect_success 'force remove worktree with untracked file' ' |
|
git worktree remove --force destination && |
|
test_path_is_missing destination |
|
' |
|
|
|
test_expect_success 'remove missing worktree' ' |
|
git worktree add to-be-gone && |
|
test -d .git/worktrees/to-be-gone && |
|
mv to-be-gone gone && |
|
git worktree remove to-be-gone && |
|
test_path_is_missing .git/worktrees/to-be-gone |
|
' |
|
|
|
test_expect_success 'NOT remove missing-but-locked worktree' ' |
|
git worktree add gone-but-locked && |
|
git worktree lock gone-but-locked && |
|
test -d .git/worktrees/gone-but-locked && |
|
mv gone-but-locked really-gone-now && |
|
test_must_fail git worktree remove gone-but-locked && |
|
test_path_is_dir .git/worktrees/gone-but-locked |
|
' |
|
|
|
test_done
|
|
|