t / t3300-funny-names.shon commit Merge branch 'en/merge-recursive' (5acb623)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4#
   5
   6test_description='Pathnames with funny characters.
   7
   8This test tries pathnames with funny characters in the working
   9tree, index, and tree objects.
  10'
  11
  12. ./test-lib.sh
  13
  14p0='no-funny'
  15p1='tabs        ," (dq) and spaces'
  16p2='just space'
  17
  18cat >"$p0" <<\EOF
  191. A quick brown fox jumps over the lazy cat, oops dog.
  202. A quick brown fox jumps over the lazy cat, oops dog.
  213. A quick brown fox jumps over the lazy cat, oops dog.
  22EOF
  23
  24cat 2>/dev/null >"$p1" "$p0"
  25echo 'Foo Bar Baz' >"$p2"
  26
  27if test -f "$p1" && cmp "$p0" "$p1"
  28then
  29    test_set_prereq TABS_IN_FILENAMES
  30else
  31        # since FAT/NTFS does not allow tabs in filenames, skip this test
  32        say 'Your filesystem does not allow tabs in filenames'
  33fi
  34
  35test_expect_success TABS_IN_FILENAMES 'setup expect' "
  36echo 'just space
  37no-funny' >expected
  38"
  39
  40test_expect_success TABS_IN_FILENAMES 'git ls-files no-funny' \
  41        'git update-index --add "$p0" "$p2" &&
  42        git ls-files >current &&
  43        test_cmp expected current'
  44
  45test_expect_success TABS_IN_FILENAMES 'setup expect' '
  46t0=`git write-tree` &&
  47echo "$t0" >t0 &&
  48
  49cat > expected <<\EOF
  50just space
  51no-funny
  52"tabs\t,\" (dq) and spaces"
  53EOF
  54'
  55
  56test_expect_success TABS_IN_FILENAMES 'git ls-files with-funny' \
  57        'git update-index --add "$p1" &&
  58        git ls-files >current &&
  59        test_cmp expected current'
  60
  61test_expect_success TABS_IN_FILENAMES 'setup expect' "
  62echo 'just space
  63no-funny
  64tabs    ,\" (dq) and spaces' >expected
  65"
  66
  67test_expect_success TABS_IN_FILENAMES 'git ls-files -z with-funny' \
  68        'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
  69        test_cmp expected current'
  70
  71test_expect_success TABS_IN_FILENAMES 'setup expect' '
  72t1=`git write-tree` &&
  73echo "$t1" >t1 &&
  74
  75cat > expected <<\EOF
  76just space
  77no-funny
  78"tabs\t,\" (dq) and spaces"
  79EOF
  80'
  81
  82test_expect_success TABS_IN_FILENAMES 'git ls-tree with funny' \
  83        'git ls-tree -r $t1 | sed -e "s/^[^     ]*      //" >current &&
  84         test_cmp expected current'
  85
  86test_expect_success TABS_IN_FILENAMES 'setup expect' '
  87cat > expected <<\EOF
  88A       "tabs\t,\" (dq) and spaces"
  89EOF
  90'
  91
  92test_expect_success TABS_IN_FILENAMES 'git diff-index with-funny' \
  93        'git diff-index --name-status $t0 >current &&
  94        test_cmp expected current'
  95
  96test_expect_success TABS_IN_FILENAMES 'git diff-tree with-funny' \
  97        'git diff-tree --name-status $t0 $t1 >current &&
  98        test_cmp expected current'
  99
 100test_expect_success TABS_IN_FILENAMES 'setup expect' "
 101echo 'A
 102tabs    ,\" (dq) and spaces' >expected
 103"
 104
 105test_expect_success TABS_IN_FILENAMES 'git diff-index -z with-funny' \
 106        'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
 107        test_cmp expected current'
 108
 109test_expect_success TABS_IN_FILENAMES 'git diff-tree -z with-funny' \
 110        'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
 111        test_cmp expected current'
 112
 113test_expect_success TABS_IN_FILENAMES 'setup expect' '
 114cat > expected <<\EOF
 115CNUM    no-funny        "tabs\t,\" (dq) and spaces"
 116EOF
 117'
 118
 119test_expect_success TABS_IN_FILENAMES 'git diff-tree -C with-funny' \
 120        'git diff-tree -C --find-copies-harder --name-status \
 121                $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
 122        test_cmp expected current'
 123
 124test_expect_success TABS_IN_FILENAMES 'setup expect' '
 125cat > expected <<\EOF
 126RNUM    no-funny        "tabs\t,\" (dq) and spaces"
 127EOF
 128'
 129
 130test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
 131        'git update-index --force-remove "$p0" &&
 132        git diff-index -M --name-status \
 133                $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
 134        test_cmp expected current'
 135
 136test_expect_success TABS_IN_FILENAMES 'setup expect' '
 137cat > expected <<\EOF
 138diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 139similarity index NUM%
 140rename from no-funny
 141rename to "tabs\t,\" (dq) and spaces"
 142EOF
 143'
 144
 145test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
 146        'git diff-index -M -p $t0 |
 147         sed -e "s/index [0-9]*%/index NUM%/" >current &&
 148         test_cmp expected current'
 149
 150test_expect_success TABS_IN_FILENAMES 'setup expect' '
 151chmod +x "$p1" &&
 152cat > expected <<\EOF
 153diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 154old mode 100644
 155new mode 100755
 156similarity index NUM%
 157rename from no-funny
 158rename to "tabs\t,\" (dq) and spaces"
 159EOF
 160'
 161
 162test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
 163        'git diff-index -M -p $t0 |
 164         sed -e "s/index [0-9]*%/index NUM%/" >current &&
 165         test_cmp expected current'
 166
 167test_expect_success TABS_IN_FILENAMES 'setup expect' '
 168cat >expected <<\EOF
 169 "tabs\t,\" (dq) and spaces"
 170 1 files changed, 0 insertions(+), 0 deletions(-)
 171EOF
 172'
 173
 174test_expect_success TABS_IN_FILENAMES 'git diff-tree rename with-funny applied' \
 175        'git diff-index -M -p $t0 |
 176         git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 177         test_cmp expected current'
 178
 179test_expect_success TABS_IN_FILENAMES 'setup expect' '
 180cat > expected <<\EOF
 181 no-funny
 182 "tabs\t,\" (dq) and spaces"
 183 2 files changed, 3 insertions(+), 3 deletions(-)
 184EOF
 185'
 186
 187test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny applied' \
 188        'git diff-index -p $t0 |
 189         git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 190         test_cmp expected current'
 191
 192test_expect_success TABS_IN_FILENAMES 'git apply non-git diff' \
 193        'git diff-index -p $t0 |
 194         sed -ne "/^[-+@]/p" |
 195         git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 196         test_cmp expected current'
 197
 198test_done