t / t0050-filesystem.shon commit Merge branch 'mg/maint-tag-rfc1991' (a5066a0)
   1#!/bin/sh
   2
   3test_description='Various filesystem issues'
   4
   5. ./test-lib.sh
   6
   7auml=`printf '\xc3\xa4'`
   8aumlcdiar=`printf '\x61\xcc\x88'`
   9
  10case_insensitive=
  11unibad=
  12no_symlinks=
  13test_expect_success 'see what we expect' '
  14
  15        test_case=test_expect_success &&
  16        test_unicode=test_expect_success &&
  17        mkdir junk &&
  18        echo good >junk/CamelCase &&
  19        echo bad >junk/camelcase &&
  20        if test "$(cat junk/CamelCase)" != good
  21        then
  22                test_case=test_expect_failure &&
  23                case_insensitive=t
  24        fi &&
  25        rm -fr junk &&
  26        mkdir junk &&
  27        >junk/"$auml" &&
  28        case "$(cd junk && echo *)" in
  29        "$aumlcdiar")
  30                test_unicode=test_expect_failure &&
  31                unibad=t
  32                ;;
  33        *)      ;;
  34        esac &&
  35        rm -fr junk &&
  36        {
  37                ln -s x y 2> /dev/null &&
  38                test -h y 2> /dev/null ||
  39                no_symlinks=1 &&
  40                rm -f y
  41        }
  42'
  43
  44test "$case_insensitive" &&
  45        say "will test on a case insensitive filesystem"
  46test "$unibad" &&
  47        say "will test on a unicode corrupting filesystem"
  48test "$no_symlinks" &&
  49        say "will test on a filesystem lacking symbolic links"
  50
  51if test "$case_insensitive"
  52then
  53test_expect_success "detection of case insensitive filesystem during repo init" '
  54
  55        test $(git config --bool core.ignorecase) = true
  56'
  57else
  58test_expect_success "detection of case insensitive filesystem during repo init" '
  59
  60        test_must_fail git config --bool core.ignorecase >/dev/null ||
  61        test $(git config --bool core.ignorecase) = false
  62'
  63fi
  64
  65if test "$no_symlinks"
  66then
  67test_expect_success "detection of filesystem w/o symlink support during repo init" '
  68
  69        v=$(git config --bool core.symlinks) &&
  70        test "$v" = false
  71'
  72else
  73test_expect_success "detection of filesystem w/o symlink support during repo init" '
  74
  75        test_must_fail git config --bool core.symlinks ||
  76        test "$(git config --bool core.symlinks)" = true
  77'
  78fi
  79
  80test_expect_success "setup case tests" '
  81
  82        git config core.ignorecase true &&
  83        touch camelcase &&
  84        git add camelcase &&
  85        git commit -m "initial" &&
  86        git tag 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
  92
  93'
  94
  95$test_case 'rename (case change)' '
  96
  97        git mv camelcase CamelCase &&
  98        git commit -m "rename"
  99
 100'
 101
 102$test_case 'merge (case change)' '
 103
 104        rm -f CamelCase &&
 105        rm -f camelcase &&
 106        git reset --hard initial &&
 107        git merge topic
 108
 109'
 110
 111
 112
 113test_expect_failure 'add (with different case)' '
 114
 115        git reset --hard initial &&
 116        rm camelcase &&
 117        echo 1 >CamelCase &&
 118        git add CamelCase &&
 119        camel=$(git ls-files | grep -i camelcase) &&
 120        test $(echo "$camel" | wc -l) = 1 &&
 121        test "z$(git cat-file blob :$camel)" = z1
 122
 123'
 124
 125test_expect_success "setup unicode normalization tests" '
 126
 127  test_create_repo unicode &&
 128  cd unicode &&
 129  touch "$aumlcdiar" &&
 130  git add "$aumlcdiar" &&
 131  git commit -m initial &&
 132  git tag 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
 138
 139'
 140
 141$test_unicode 'rename (silent unicode normalization)' '
 142
 143 git mv "$aumlcdiar" "$auml" &&
 144 git commit -m rename
 145
 146'
 147
 148$test_unicode 'merge (silent unicode normalization)' '
 149
 150 git reset --hard initial &&
 151 git merge topic
 152
 153'
 154
 155test_done