t / t0050-filesystem.shon commit Merge branch 'sg/doc-trace-appends' into maint (04b9bdb)
   1#!/bin/sh
   2
   3test_description='Various filesystem issues'
   4
   5. ./test-lib.sh
   6
   7auml=$(printf '\303\244')
   8aumlcdiar=$(printf '\141\314\210')
   9
  10if test_have_prereq CASE_INSENSITIVE_FS
  11then
  12        say "will test on a case insensitive filesystem"
  13        test_case=test_expect_failure
  14else
  15        test_case=test_expect_success
  16fi
  17
  18if test_have_prereq UTF8_NFD_TO_NFC
  19then
  20        say "will test on a unicode corrupting filesystem"
  21        test_unicode=test_expect_failure
  22else
  23        test_unicode=test_expect_success
  24fi
  25
  26test_have_prereq SYMLINKS ||
  27        say "will test on a filesystem lacking symbolic links"
  28
  29if test_have_prereq CASE_INSENSITIVE_FS
  30then
  31test_expect_success "detection of case insensitive filesystem during repo init" '
  32        test $(git config --bool core.ignorecase) = true
  33'
  34else
  35test_expect_success "detection of case insensitive filesystem during repo init" '
  36        {
  37                test_must_fail git config --bool core.ignorecase >/dev/null ||
  38                        test $(git config --bool core.ignorecase) = false
  39        }
  40'
  41fi
  42
  43if test_have_prereq SYMLINKS
  44then
  45test_expect_success "detection of filesystem w/o symlink support during repo init" '
  46        {
  47                test_must_fail git config --bool core.symlinks ||
  48                test "$(git config --bool core.symlinks)" = true
  49        }
  50'
  51else
  52test_expect_success "detection of filesystem w/o symlink support during repo init" '
  53        v=$(git config --bool core.symlinks) &&
  54        test "$v" = false
  55'
  56fi
  57
  58test_expect_success "setup case tests" '
  59        git config core.ignorecase true &&
  60        touch camelcase &&
  61        git add camelcase &&
  62        git commit -m "initial" &&
  63        git tag initial &&
  64        git checkout -b topic &&
  65        git mv camelcase tmp &&
  66        git mv tmp CamelCase &&
  67        git commit -m "rename" &&
  68        git checkout -f master
  69'
  70
  71test_expect_success 'rename (case change)' '
  72        git mv camelcase CamelCase &&
  73        git commit -m "rename"
  74'
  75
  76test_expect_success 'merge (case change)' '
  77        rm -f CamelCase &&
  78        rm -f camelcase &&
  79        git reset --hard initial &&
  80        git merge topic
  81'
  82
  83test_expect_success CASE_INSENSITIVE_FS 'add directory (with different case)' '
  84        git reset --hard initial &&
  85        mkdir -p dir1/dir2 &&
  86        echo >dir1/dir2/a &&
  87        echo >dir1/dir2/b &&
  88        git add dir1/dir2/a &&
  89        git add dir1/DIR2/b &&
  90        git ls-files >actual &&
  91        cat >expected <<-\EOF &&
  92                camelcase
  93                dir1/dir2/a
  94                dir1/dir2/b
  95        EOF
  96        test_cmp expected actual
  97'
  98
  99test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' '
 100        git reset --hard initial &&
 101        rm camelcase &&
 102        echo 1 >CamelCase &&
 103        git add CamelCase &&
 104        camel=$(git ls-files | grep -i camelcase) &&
 105        test $(echo "$camel" | wc -l) = 1 &&
 106        test "z$(git cat-file blob :$camel)" = z1
 107'
 108
 109test_expect_success "setup unicode normalization tests" '
 110        test_create_repo unicode &&
 111        cd unicode &&
 112        git config core.precomposeunicode false &&
 113        touch "$aumlcdiar" &&
 114        git add "$aumlcdiar" &&
 115        git commit -m initial &&
 116        git tag initial &&
 117        git checkout -b topic &&
 118        git mv $aumlcdiar tmp &&
 119        git mv tmp "$auml" &&
 120        git commit -m rename &&
 121        git checkout -f master
 122'
 123
 124$test_unicode 'rename (silent unicode normalization)' '
 125        git mv "$aumlcdiar" "$auml" &&
 126        git commit -m rename
 127'
 128
 129$test_unicode 'merge (silent unicode normalization)' '
 130        git reset --hard initial &&
 131        git merge topic
 132'
 133
 134test_done