Merge branch 'nd/worktree-move'
"git worktree" learned move and remove subcommands. * nd/worktree-move: t2028: fix minor error and issues in newly-added "worktree move" tests worktree remove: allow it when $GIT_WORK_TREE is already gone worktree remove: new command worktree move: refuse to move worktrees with submodules worktree move: accept destination as directory worktree move: new command worktree.c: add update_worktree_location() worktree.c: add validate_worktree()
This commit is contained in:
@ -7,7 +7,8 @@ test_description='test git worktree move, remove, lock and unlock'
|
||||
test_expect_success 'setup' '
|
||||
test_commit init &&
|
||||
git worktree add source &&
|
||||
git worktree list --porcelain | grep "^worktree" >actual &&
|
||||
git worktree list --porcelain >out &&
|
||||
grep "^worktree" out >actual &&
|
||||
cat <<-EOF >expected &&
|
||||
worktree $(pwd)
|
||||
worktree $(pwd)/source
|
||||
@ -59,4 +60,86 @@ test_expect_success 'unlock worktree twice' '
|
||||
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' '
|
||||
toplevel="$(pwd)" &&
|
||||
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
|
||||
|
Reference in New Issue
Block a user