3 test_description='Various filesystem issues'
 
   7 auml=$(printf '\303\244')
 
   8 aumlcdiar=$(printf '\141\314\210')
 
  13 test_expect_success 'see what we expect' '
 
  15         test_case=test_expect_success &&
 
  16         test_unicode=test_expect_success &&
 
  18         echo good >junk/CamelCase &&
 
  19         echo bad >junk/camelcase &&
 
  20         if test "$(cat junk/CamelCase)" != good
 
  22                 test_case=test_expect_failure &&
 
  28         case "$(cd junk && echo *)" in
 
  30                 test_unicode=test_expect_failure &&
 
  37                 ln -s x y 2> /dev/null &&
 
  38                 test -h y 2> /dev/null ||
 
  44 test "$case_insensitive" &&
 
  45         say "will test on a case insensitive filesystem"
 
  47         say "will test on a unicode corrupting filesystem"
 
  48 test "$no_symlinks" &&
 
  49         say "will test on a filesystem lacking symbolic links"
 
  51 if test "$case_insensitive"
 
  53 test_expect_success "detection of case insensitive filesystem during repo init" '
 
  55         test $(git config --bool core.ignorecase) = true
 
  58 test_expect_success "detection of case insensitive filesystem during repo init" '
 
  60         test_must_fail git config --bool core.ignorecase >/dev/null ||
 
  61         test $(git config --bool core.ignorecase) = false
 
  65 if test "$no_symlinks"
 
  67 test_expect_success "detection of filesystem w/o symlink support during repo init" '
 
  69         v=$(git config --bool core.symlinks) &&
 
  73 test_expect_success "detection of filesystem w/o symlink support during repo init" '
 
  75         test_must_fail git config --bool core.symlinks ||
 
  76         test "$(git config --bool core.symlinks)" = true
 
  80 test_expect_success "setup case tests" '
 
  82         git config core.ignorecase true &&
 
  85         git commit -m "initial" &&
 
  87         git checkout -b topic &&
 
  88         git mv camelcase tmp &&
 
  89         git mv tmp CamelCase &&
 
  90         git commit -m "rename" &&
 
  91         git checkout -f master
 
  95 $test_case 'rename (case change)' '
 
  97         git mv camelcase CamelCase &&
 
  98         git commit -m "rename"
 
 102 $test_case 'merge (case change)' '
 
 106         git reset --hard initial &&
 
 113 test_expect_failure 'add (with different case)' '
 
 115         git reset --hard initial &&
 
 119         camel=$(git ls-files | grep -i camelcase) &&
 
 120         test $(echo "$camel" | wc -l) = 1 &&
 
 121         test "z$(git cat-file blob :$camel)" = z1
 
 125 test_expect_success "setup unicode normalization tests" '
 
 127   test_create_repo unicode &&
 
 129   touch "$aumlcdiar" &&
 
 130   git add "$aumlcdiar" &&
 
 131   git commit -m initial &&
 
 133   git checkout -b topic &&
 
 134   git mv $aumlcdiar tmp &&
 
 135   git mv tmp "$auml" &&
 
 136   git commit -m rename &&
 
 137   git checkout -f master
 
 141 $test_unicode 'rename (silent unicode normalization)' '
 
 143  git mv "$aumlcdiar" "$auml" &&
 
 148 $test_unicode 'merge (silent unicode normalization)' '
 
 150  git reset --hard initial &&