#!/bin/sh test_description='check that read-tree rejects confusing paths' . ./test-lib.sh test_expect_success 'create base tree' ' echo content >file && git add file && git commit -m base && blob=$(git rev-parse HEAD:file) && tree=$(git rev-parse HEAD^{tree}) ' test_expect_success 'enable core.protectHFS for rejection tests' ' git config core.protectHFS true ' test_expect_success 'enable core.protectNTFS for rejection tests' ' git config core.protectNTFS true ' while read path pretty; do : ${pretty:=$path} case "$path" in *SPACE) path="${path%SPACE} " ;; esac test_expect_success "reject $pretty at end of path" ' printf "100644 blob %s\t%s" "$blob" "$path" >tree && bogus=$(git mktree <tree) && test_must_fail git read-tree $bogus ' test_expect_success "reject $pretty as subtree" ' printf "040000 tree %s\t%s" "$tree" "$path" >tree && bogus=$(git mktree <tree) && test_must_fail git read-tree $bogus ' done <<-EOF . .. .git .GIT ${u200c}.Git {u200c}.Git .gI${u200c}T .gI{u200c}T .GiT${u200c} .GiT{u200c} git~1 .git.SPACE .git.{space} .\\\\.GIT\\\\foobar backslashes .git\\\\foobar backslashes2 .git...:alternate-stream EOF test_expect_success 'utf-8 paths allowed with core.protectHFS off' ' test_when_finished "git read-tree HEAD" && test_config core.protectHFS false && printf "100644 blob %s\t%s" "$blob" ".gi${u200c}t" >tree && ok=$(git mktree <tree) && git read-tree $ok ' test_done