mirror of
https://github.com/git/git
synced 2024-09-12 21:04:12 +00:00
8aff1a9ca5
When multiple worktrees are used, we need rules to determine if something belongs to one worktree or all of them. Instead of keeping adding rules when new stuff comes (*), have a generic rule: - Inside $GIT_DIR, which is per-worktree by default, add $GIT_DIR/common which is always shared. New features that want to share stuff should put stuff under this directory. - Inside refs/, which is shared by default except refs/bisect, add refs/worktree/ which is per-worktree. We may eventually move refs/bisect to this new location and remove the exception in refs code. (*) And it may also include stuff from external commands which will have no way to modify common/per-worktree rules. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
34 lines
870 B
Bash
Executable file
34 lines
870 B
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='per-worktree refs'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit initial &&
|
|
test_commit wt1 &&
|
|
test_commit wt2 &&
|
|
git worktree add wt1 wt1 &&
|
|
git worktree add wt2 wt2 &&
|
|
git checkout initial &&
|
|
git update-ref refs/worktree/foo HEAD &&
|
|
git -C wt1 update-ref refs/worktree/foo HEAD &&
|
|
git -C wt2 update-ref refs/worktree/foo HEAD
|
|
'
|
|
|
|
test_expect_success 'refs/worktree must not be packed' '
|
|
git pack-refs --all &&
|
|
test_path_is_missing .git/refs/tags/wt1 &&
|
|
test_path_is_file .git/refs/worktree/foo &&
|
|
test_path_is_file .git/worktrees/wt1/refs/worktree/foo &&
|
|
test_path_is_file .git/worktrees/wt2/refs/worktree/foo
|
|
'
|
|
|
|
test_expect_success 'refs/worktree are per-worktree' '
|
|
test_cmp_rev worktree/foo initial &&
|
|
( cd wt1 && test_cmp_rev worktree/foo wt1 ) &&
|
|
( cd wt2 && test_cmp_rev worktree/foo wt2 )
|
|
'
|
|
|
|
test_done
|