diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2018-09-29 21:10:23 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-10-07 01:21:18 +0200 |
commit | 8aff1a9ca5a266020fe5b1bd8c54228581e34530 (patch) | |
tree | c787fa8cda7dfe83b7439d691ddd25204afd4ae9 /t/t1415-worktree-refs.sh | |
parent | refs.c: indent with tabs, not spaces (diff) | |
download | git-8aff1a9ca5a266020fe5b1bd8c54228581e34530.tar.xz git-8aff1a9ca5a266020fe5b1bd8c54228581e34530.zip |
Add a place for (not) sharing stuff between worktrees
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>
Diffstat (limited to 't/t1415-worktree-refs.sh')
-rwxr-xr-x | t/t1415-worktree-refs.sh | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/t/t1415-worktree-refs.sh b/t/t1415-worktree-refs.sh new file mode 100755 index 0000000000..16c91bef57 --- /dev/null +++ b/t/t1415-worktree-refs.sh @@ -0,0 +1,33 @@ +#!/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 |