| 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='per-worktree refs' |
| 4 | |
| 5 | . ./test-lib.sh |
| 6 | |
| 7 | test_expect_success 'setup' ' |
| 8 | test_commit initial && |
| 9 | test_commit wt1 && |
| 10 | test_commit wt2 && |
| 11 | git worktree add wt1 wt1 && |
| 12 | git worktree add wt2 wt2 && |
| 13 | git checkout initial && |
| 14 | git update-ref refs/worktree/foo HEAD && |
| 15 | git -C wt1 update-ref refs/worktree/foo HEAD && |
| 16 | git -C wt2 update-ref refs/worktree/foo HEAD |
| 17 | ' |
| 18 | |
| 19 | test_expect_success 'refs/worktree are per-worktree' ' |
| 20 | test_cmp_rev worktree/foo initial && |
| 21 | ( cd wt1 && test_cmp_rev worktree/foo wt1 ) && |
| 22 | ( cd wt2 && test_cmp_rev worktree/foo wt2 ) |
| 23 | ' |
| 24 | |
| 25 | test_expect_success 'resolve main-worktree/HEAD' ' |
| 26 | test_cmp_rev main-worktree/HEAD initial && |
| 27 | ( cd wt1 && test_cmp_rev main-worktree/HEAD initial ) && |
| 28 | ( cd wt2 && test_cmp_rev main-worktree/HEAD initial ) |
| 29 | ' |
| 30 | |
| 31 | test_expect_success 'ambiguous main-worktree/HEAD' ' |
| 32 | test_when_finished git update-ref -d refs/heads/main-worktree/HEAD && |
| 33 | git update-ref refs/heads/main-worktree/HEAD $(git rev-parse HEAD) && |
| 34 | git rev-parse main-worktree/HEAD 2>warn && |
| 35 | grep "main-worktree/HEAD.*ambiguous" warn |
| 36 | ' |
| 37 | |
| 38 | test_expect_success 'resolve worktrees/xx/HEAD' ' |
| 39 | test_cmp_rev worktrees/wt1/HEAD wt1 && |
| 40 | ( cd wt1 && test_cmp_rev worktrees/wt1/HEAD wt1 ) && |
| 41 | ( cd wt2 && test_cmp_rev worktrees/wt1/HEAD wt1 ) |
| 42 | ' |
| 43 | |
| 44 | test_expect_success 'ambiguous worktrees/xx/HEAD' ' |
| 45 | git update-ref refs/heads/worktrees/wt1/HEAD $(git rev-parse HEAD) && |
| 46 | test_when_finished git update-ref -d refs/heads/worktrees/wt1/HEAD && |
| 47 | git rev-parse worktrees/wt1/HEAD 2>warn && |
| 48 | grep "worktrees/wt1/HEAD.*ambiguous" warn |
| 49 | ' |
| 50 | |
| 51 | test_expect_success 'reflog of main-worktree/HEAD' ' |
| 52 | git reflog HEAD | sed "s/HEAD/main-worktree\/HEAD/" >expected && |
| 53 | git reflog main-worktree/HEAD >actual && |
| 54 | test_cmp expected actual && |
| 55 | git -C wt1 reflog main-worktree/HEAD >actual.wt1 && |
| 56 | test_cmp expected actual.wt1 |
| 57 | ' |
| 58 | |
| 59 | test_expect_success 'reflog of worktrees/xx/HEAD' ' |
| 60 | git -C wt2 reflog HEAD | sed "s/HEAD/worktrees\/wt2\/HEAD/" >expected && |
| 61 | git reflog worktrees/wt2/HEAD >actual && |
| 62 | test_cmp expected actual && |
| 63 | git -C wt1 reflog worktrees/wt2/HEAD >actual.wt1 && |
| 64 | test_cmp expected actual.wt1 && |
| 65 | git -C wt2 reflog worktrees/wt2/HEAD >actual.wt2 && |
| 66 | test_cmp expected actual.wt2 |
| 67 | ' |
| 68 | |
| 69 | test_expect_success 'for-each-ref from main worktree' ' |
| 70 | mkdir fer1 && |
| 71 | git -C fer1 init repo && |
| 72 | test_commit -C fer1/repo initial && |
| 73 | git -C fer1/repo worktree add ../second && |
| 74 | git -C fer1/repo update-ref refs/bisect/first HEAD && |
| 75 | git -C fer1/repo update-ref refs/rewritten/first HEAD && |
| 76 | git -C fer1/repo update-ref refs/worktree/first HEAD && |
| 77 | git -C fer1/repo for-each-ref --format="%(refname)" | grep first >actual && |
| 78 | cat >expected <<-\EOF && |
| 79 | refs/bisect/first |
| 80 | refs/rewritten/first |
| 81 | refs/worktree/first |
| 82 | EOF |
| 83 | test_cmp expected actual |
| 84 | ' |
| 85 | |
| 86 | test_expect_success 'for-each-ref from linked worktree' ' |
| 87 | mkdir fer2 && |
| 88 | git -C fer2 init repo && |
| 89 | test_commit -C fer2/repo initial && |
| 90 | git -C fer2/repo worktree add ../second && |
| 91 | git -C fer2/second update-ref refs/bisect/second HEAD && |
| 92 | git -C fer2/second update-ref refs/rewritten/second HEAD && |
| 93 | git -C fer2/second update-ref refs/worktree/second HEAD && |
| 94 | git -C fer2/second for-each-ref --format="%(refname)" | grep second >actual && |
| 95 | cat >expected <<-\EOF && |
| 96 | refs/bisect/second |
| 97 | refs/heads/second |
| 98 | refs/rewritten/second |
| 99 | refs/worktree/second |
| 100 | EOF |
| 101 | test_cmp expected actual |
| 102 | ' |
| 103 | |
| 104 | test_done |