t / t0050-filesystem.shon commit Merge branch 'nd/attr-match-optim-more' (5f83642)
   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
  33        test $(git config --bool core.ignorecase) = true
  34'
  35else
  36test_expect_success "detection of case insensitive filesystem during repo init" '
  37
  38        test_must_fail git config --bool core.ignorecase >/dev/null ||
  39        test $(git config --bool core.ignorecase) = false
  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'
  50else
  51test_expect_success "detection of filesystem w/o symlink support during repo init" '
  52
  53        v=$(git config --bool core.symlinks) &&
  54        test "$v" = false
  55'
  56fi
  57
  58test_expect_success "setup case tests" '
  59
  60        git config core.ignorecase true &&
  61        touch camelcase &&
  62        git add camelcase &&
  63        git commit -m "initial" &&
  64        git tag initial &&
  65        git checkout -b topic &&
  66        git mv camelcase tmp &&
  67        git mv tmp CamelCase &&
  68        git commit -m "rename" &&
  69        git checkout -f master
  70
  71'
  72
  73$test_case 'rename (case change)' '
  74
  75        git mv camelcase CamelCase &&
  76        git commit -m "rename"
  77
  78'
  79
  80$test_case 'merge (case change)' '
  81
  82        rm -f CamelCase &&
  83        rm -f camelcase &&
  84        git reset --hard initial &&
  85        git merge topic
  86
  87'
  88
  89
  90
  91test_expect_failure 'add (with different case)' '
  92
  93        git reset --hard initial &&
  94        rm camelcase &&
  95        echo 1 >CamelCase &&
  96        git add CamelCase &&
  97        camel=$(git ls-files | grep -i camelcase) &&
  98        test $(echo "$camel" | wc -l) = 1 &&
  99        test "z$(git cat-file blob :$camel)" = z1
 100
 101'
 102
 103test_expect_success "setup unicode normalization tests" '
 104
 105  test_create_repo unicode &&
 106  cd unicode &&
 107  touch "$aumlcdiar" &&
 108  git add "$aumlcdiar" &&
 109  git commit -m initial &&
 110  git tag initial &&
 111  git checkout -b topic &&
 112  git mv $aumlcdiar tmp &&
 113  git mv tmp "$auml" &&
 114  git commit -m rename &&
 115  git checkout -f master
 116
 117'
 118
 119$test_unicode 'rename (silent unicode normalization)' '
 120
 121 git mv "$aumlcdiar" "$auml" &&
 122 git commit -m rename
 123
 124'
 125
 126$test_unicode 'merge (silent unicode normalization)' '
 127
 128 git reset --hard initial &&
 129 git merge topic
 130
 131'
 132
 133test_done