3 test_description
='check tg tag reflog @{0} drops'
9 if vcmp
"$git_version" '>=' "2.5"; then
10 test_set_prereq
"GIT_2_5"
14 if vcmp
"$git_version" '>=' "2.31"; then
20 # replace `git symbolic-ref HEAD refs/heads/foo`
21 # with `sane_reattach_ref HEAD refs/heads/foo`
23 _rlc
="$(git reflog show "$1" -- | wc -l)" &&
24 git symbolic-ref
"$1" "$2" &&
25 _rlc2
="$(git reflog show "$1" -- | wc -l)" &&
26 if test x
"$_rlc" != x
"$_rlc2"; then
27 git reflog delete
"$1@{0}" &&
28 _rlc2
="$(git reflog show "$1" -- | wc -l)" &&
29 test x
"$_rlc" = x
"$_rlc2"
33 test_expect_success
'setup main' '
34 test_create_repo main &&
36 git checkout --orphan slithy &&
42 rlcnt=$(git log --oneline -g slithy | wc -l) &&
44 git reflog delete slithy@{4} &&
45 git reflog delete slithy@{2} &&
46 git reflog delete slithy@{0} &&
47 rlcnt=$(git log --oneline -g slithy | wc -l) &&
49 while git rev-parse --verify --quiet HEAD@{1} --; do
50 git reflog delete HEAD@{0} >/dev/null 2>&1 || :
52 { git reflog delete HEAD@{0} >/dev/null 2>&1 || :; } &&
53 git checkout --orphan frabjous &&
54 # there might, or might not be a garbage @{0} entry in the reflog for HEAD
55 { git reflog delete HEAD@{0} >/dev/null 2>&1 || :; } &&
61 rlcnt=$(git log --oneline -g HEAD | wc -l) &&
63 git reflog delete HEAD@{4} &&
64 git reflog delete HEAD@{2} &&
65 git reflog delete HEAD@{0} &&
66 rlcnt=$(git log --oneline -g HEAD | wc -l) &&
68 test_when_finished test_tick=$test_tick
71 test_expect_success
'LASTOK GIT_2_5' 'setup linked' '
73 mttree="$(git mktree </dev/null)" &&
76 mtcommit="$(git commit-tree -m "empty commit" "$mttree")" &&
77 test -n "$mtcommit" &&
79 git --git-dir=main/.git worktree add --detach linked "$mtcommit" &&
81 # there might, or might not be a garbage @{0} entry in the reflog for HEAD
82 { git reflog delete HEAD@{0} >/dev/null 2>&1 || :; } &&
83 git checkout --orphan outgrabe &&
89 rlcnt=$(git log --oneline -g outgrabe | wc -l) &&
91 git reflog delete outgrabe@{4} &&
92 git reflog delete outgrabe@{2} &&
93 git reflog delete outgrabe@{0} &&
94 rlcnt=$(git log --oneline -g outgrabe | wc -l) &&
96 while git rev-parse --verify --quiet HEAD@{1} --; do
97 git reflog delete HEAD@{0} >/dev/null 2>&1 || :
99 { git reflog delete HEAD@{0} >/dev/null 2>&1 || :; } &&
100 git checkout --orphan linked &&
101 # there might, or might not be a garbage @{0} entry in the reflog for HEAD
102 { git reflog delete HEAD@{0} >/dev/null 2>&1 || :; } &&
103 test_commit lfile1 &&
104 test_commit lfile2 &&
105 test_commit lfile3 &&
106 test_commit lfile4 &&
107 test_commit lfile5 &&
108 rlcnt=$(git log --oneline -g HEAD | wc -l) &&
110 git reflog delete HEAD@{4} &&
111 git reflog delete HEAD@{2} &&
112 git reflog delete HEAD@{0} &&
113 rlcnt=$(git log --oneline -g HEAD | wc -l) &&
115 test_when_finished test_tick=$test_tick
118 test_expect_success LASTOK
'verify setup' '
120 mh="$(git rev-parse --verify HEAD --)" &&
122 mh0="$(git rev-parse --verify HEAD@{0} --)" &&
124 sh="$(git rev-parse --verify slithy --)" &&
126 sh0="$(git rev-parse --verify slithy@{0} --)" &&
128 if test_have_prereq GIT_2_5; then
130 lh="$(git rev-parse --verify HEAD --)" &&
132 lh0="$(git rev-parse --verify HEAD@{0} --)" &&
134 oh="$(git rev-parse --verify outgrabe --)" &&
136 oh0="$(git rev-parse --verify outgrabe@{0} --)" &&
143 oh0="linked worktrees"
146 test "$mh0" != "$mh" && test "$sh0" != "$sh" &&
147 test "$lh0" != "$lh" && test "$oh0" != "$oh"
149 test_when_finished test_set_prereq AT0DISTINCT
153 test_expect_success AT0DISTINCT
'ref [symref] preserved when dropping different @{0}' '
155 h="$(git rev-parse --verify HEAD --)" &&
157 h0="$(git rev-parse --verify HEAD@{0} --)" &&
159 test "$h" != "$h0" &&
160 tgx tag --drop HEAD@{0} &&
161 hp="$(git rev-parse --verify HEAD --)" &&
163 h0p="$(git rev-parse --verify HEAD@{0} --)" &&
169 test_expect_success AT0DISTINCT
,GIT_2_5
'ref [symref] preserved when dropping different @{0} [linked]' '
171 h="$(git rev-parse --verify HEAD --)" &&
173 h0="$(git rev-parse --verify HEAD@{0} --)" &&
175 test "$h" != "$h0" &&
176 tg tag --drop HEAD@{0} &&
177 hp="$(git rev-parse --verify HEAD --)" &&
179 h0p="$(git rev-parse --verify HEAD@{0} --)" &&
185 test_expect_success AT0DISTINCT
'ref [actual] preserved when dropping different @{0}' '
187 h="$(git rev-parse --verify slithy --)" &&
189 h0="$(git rev-parse --verify slithy@{0} --)" &&
191 test "$h" != "$h0" &&
192 tgx tag --drop slithy@{0} &&
193 hp="$(git rev-parse --verify slithy --)" &&
195 h0p="$(git rev-parse --verify slithy@{0} --)" &&
201 test_expect_success AT0DISTINCT
,GIT_2_5
'ref [actual] preserved when dropping different @{0} [linked]' '
203 h="$(git rev-parse --verify outgrabe --)" &&
205 h0="$(git rev-parse --verify outgrabe@{0} --)" &&
207 test "$h" != "$h0" &&
208 tg tag --drop outgrabe@{0} &&
209 hp="$(git rev-parse --verify outgrabe --)" &&
211 h0p="$(git rev-parse --verify outgrabe@{0} --)" &&