t1450: refactor ".", "..", and ".git" fsck tests

We check that fsck notices and complains about confusing paths in trees. However, there are a few shortcomings: 1. We check only for these paths as file entries, not as intermediate paths (so ".git" and not ".git/foo"). 2. We check "." and ".." together, so it is possible that we notice only one and not the other. 3. We repeat a lot of boilerplate. Let's use some loops to be more thorough in our testing, and still end up with shorter code. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Nov 24, 2014 at 13:40 UTC 450870cba7a9bac94b5527021800bd8bf037c99c
1 file changed +27 -30
t/t1450-fsck.sh
+27 -30
@@ -237,35 +237,32 @@ test_expect_success 'fsck notices submodule entry pointing to null sha1' '
237 )
238 '
239
240 -test_expect_success 'fsck notices "." and ".." in trees' '
241 - (
242 - git init dots &&
243 - cd dots &&
244 - blob=$(echo foo | git hash-object -w --stdin) &&
245 - tab=$(printf "\\t") &&
246 - git mktree <<-EOF &&
247 - 100644 blob $blob$tab.
248 - 100644 blob $blob$tab..
249 - EOF
250 - git fsck 2>out &&
251 - cat out &&
252 - grep "warning.*\\." out
253 - )
254 -'
255 -
256 -test_expect_success 'fsck notices ".git" in trees' '
257 - (
258 - git init dotgit &&
259 - cd dotgit &&
260 - blob=$(echo foo | git hash-object -w --stdin) &&
261 - tab=$(printf "\\t") &&
262 - git mktree <<-EOF &&
263 - 100644 blob $blob$tab.git
264 - EOF
265 - git fsck 2>out &&
266 - cat out &&
267 - grep "warning.*\\.git" out
268 - )
269 -'
240 +while read name path; do
241 + while read mode type; do
242 + test_expect_success "fsck notices $path as $type" '
243 + (
244 + git init $name-$type &&
245 + cd $name-$type &&
246 + echo content >file &&
247 + git add file &&
248 + git commit -m base &&
249 + blob=$(git rev-parse :file) &&
250 + tree=$(git rev-parse HEAD^{tree}) &&
251 + value=$(eval "echo \$$type") &&
252 + printf "$mode $type %s\t%s" "$value" "$path" >bad &&
253 + git mktree <bad &&
254 + git fsck 2>out &&
255 + cat out &&
256 + grep "warning.*\\." out
257 + )'
258 + done <<-\EOF
259 + 100644 blob
260 + 040000 tree
261 + EOF
262 +done <<-\EOF
263 +dot .
264 +dotdot ..
265 +dotgit .git
266 +EOF
267
268 test_done