3 # Copyright (c) 2005 Junio C Hamano
 
   6 test_description='Pathnames with funny characters.
 
   8 This test tries pathnames with funny characters in the working
 
   9 tree, index, and tree objects.
 
  15 p1='tabs        ," (dq) and spaces'
 
  19 1. A quick brown fox jumps over the lazy cat, oops dog.
 
  20 2. A quick brown fox jumps over the lazy cat, oops dog.
 
  21 3. A quick brown fox jumps over the lazy cat, oops dog.
 
  24 cat 2>/dev/null >"$p1" "$p0"
 
  25 echo 'Foo Bar Baz' >"$p2"
 
  27 if test -f "$p1" && cmp "$p0" "$p1"
 
  29     test_set_prereq TABS_IN_FILENAMES
 
  31         # since FAT/NTFS does not allow tabs in filenames, skip this test
 
  32         say 'Your filesystem does not allow tabs in filenames'
 
  35 test_expect_success TABS_IN_FILENAMES 'setup expect' "
 
  40 test_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'
 
  45 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
  46 t0=`git write-tree` &&
 
  52 "tabs\t,\" (dq) and spaces"
 
  56 test_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'
 
  61 test_expect_success TABS_IN_FILENAMES 'setup expect' "
 
  64 tabs    ,\" (dq) and spaces' >expected
 
  67 test_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'
 
  71 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
  72 t1=`git write-tree` &&
 
  78 "tabs\t,\" (dq) and spaces"
 
  82 test_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'
 
  86 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
  88 A       "tabs\t,\" (dq) and spaces"
 
  92 test_expect_success TABS_IN_FILENAMES 'git diff-index with-funny' \
 
  93         'git diff-index --name-status $t0 >current &&
 
  94         test_cmp expected current'
 
  96 test_expect_success TABS_IN_FILENAMES 'git diff-tree with-funny' \
 
  97         'git diff-tree --name-status $t0 $t1 >current &&
 
  98         test_cmp expected current'
 
 100 test_expect_success TABS_IN_FILENAMES 'setup expect' "
 
 102 tabs    ,\" (dq) and spaces' >expected
 
 105 test_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'
 
 109 test_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'
 
 113 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
 114 cat > expected <<\EOF
 
 115 CNUM    no-funny        "tabs\t,\" (dq) and spaces"
 
 119 test_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'
 
 124 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
 125 cat > expected <<\EOF
 
 126 RNUM    no-funny        "tabs\t,\" (dq) and spaces"
 
 130 test_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'
 
 136 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
 137 cat > expected <<\EOF
 
 138 diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 
 139 similarity index NUM%
 
 141 rename to "tabs\t,\" (dq) and spaces"
 
 145 test_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'
 
 150 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
 152 cat > expected <<\EOF
 
 153 diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 
 156 similarity index NUM%
 
 158 rename to "tabs\t,\" (dq) and spaces"
 
 162 test_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'
 
 167 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
 169  "tabs\t,\" (dq) and spaces"
 
 170  1 files changed, 0 insertions(+), 0 deletions(-)
 
 174 test_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'
 
 179 test_expect_success TABS_IN_FILENAMES 'setup expect' '
 
 180 cat > expected <<\EOF
 
 182  "tabs\t,\" (dq) and spaces"
 
 183  2 files changed, 3 insertions(+), 3 deletions(-)
 
 187 test_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'
 
 192 test_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'