t / t3300-funny-names.shon commit builtin-commit: use reduce_heads() only when appropriate (cf10f9f)
   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
  27test -f "$p1" && cmp "$p0" "$p1" || {
  28        # since FAT/NTFS does not allow tabs in filenames, skip this test
  29        say 'Your filesystem does not allow tabs in filenames, test skipped.'
  30        test_done
  31}
  32
  33echo 'just space
  34no-funny' >expected
  35test_expect_success 'git ls-files no-funny' \
  36        'git update-index --add "$p0" "$p2" &&
  37        git ls-files >current &&
  38        test_cmp expected current'
  39
  40t0=`git write-tree`
  41echo "$t0" >t0
  42
  43cat > expected <<\EOF
  44just space
  45no-funny
  46"tabs\t,\" (dq) and spaces"
  47EOF
  48test_expect_success 'git ls-files with-funny' \
  49        'git update-index --add "$p1" &&
  50        git ls-files >current &&
  51        test_cmp expected current'
  52
  53echo 'just space
  54no-funny
  55tabs    ," (dq) and spaces' >expected
  56test_expect_success 'git ls-files -z with-funny' \
  57        'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
  58        test_cmp expected current'
  59
  60t1=`git write-tree`
  61echo "$t1" >t1
  62
  63cat > expected <<\EOF
  64just space
  65no-funny
  66"tabs\t,\" (dq) and spaces"
  67EOF
  68test_expect_success 'git ls-tree with funny' \
  69        'git ls-tree -r $t1 | sed -e "s/^[^     ]*      //" >current &&
  70         test_cmp expected current'
  71
  72cat > expected <<\EOF
  73A       "tabs\t,\" (dq) and spaces"
  74EOF
  75test_expect_success 'git diff-index with-funny' \
  76        'git diff-index --name-status $t0 >current &&
  77        test_cmp expected current'
  78
  79test_expect_success 'git diff-tree with-funny' \
  80        'git diff-tree --name-status $t0 $t1 >current &&
  81        test_cmp expected current'
  82
  83echo 'A
  84tabs    ," (dq) and spaces' >expected
  85test_expect_success 'git diff-index -z with-funny' \
  86        'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
  87        test_cmp expected current'
  88
  89test_expect_success 'git diff-tree -z with-funny' \
  90        'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
  91        test_cmp expected current'
  92
  93cat > expected <<\EOF
  94CNUM    no-funny        "tabs\t,\" (dq) and spaces"
  95EOF
  96test_expect_success 'git diff-tree -C with-funny' \
  97        'git diff-tree -C --find-copies-harder --name-status \
  98                $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
  99        test_cmp expected current'
 100
 101cat > expected <<\EOF
 102RNUM    no-funny        "tabs\t,\" (dq) and spaces"
 103EOF
 104test_expect_success 'git diff-tree delete with-funny' \
 105        'git update-index --force-remove "$p0" &&
 106        git diff-index -M --name-status \
 107                $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
 108        test_cmp expected current'
 109
 110cat > expected <<\EOF
 111diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 112similarity index NUM%
 113rename from no-funny
 114rename to "tabs\t,\" (dq) and spaces"
 115EOF
 116test_expect_success 'git diff-tree delete with-funny' \
 117        'git diff-index -M -p $t0 |
 118         sed -e "s/index [0-9]*%/index NUM%/" >current &&
 119         test_cmp expected current'
 120
 121chmod +x "$p1"
 122cat > expected <<\EOF
 123diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 124old mode 100644
 125new mode 100755
 126similarity index NUM%
 127rename from no-funny
 128rename to "tabs\t,\" (dq) and spaces"
 129EOF
 130test_expect_success 'git diff-tree delete with-funny' \
 131        'git diff-index -M -p $t0 |
 132         sed -e "s/index [0-9]*%/index NUM%/" >current &&
 133         test_cmp expected current'
 134
 135cat >expected <<\EOF
 136 "tabs\t,\" (dq) and spaces"
 137 1 files changed, 0 insertions(+), 0 deletions(-)
 138EOF
 139test_expect_success 'git diff-tree rename with-funny applied' \
 140        'git diff-index -M -p $t0 |
 141         git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 142         test_cmp expected current'
 143
 144cat > expected <<\EOF
 145 no-funny
 146 "tabs\t,\" (dq) and spaces"
 147 2 files changed, 3 insertions(+), 3 deletions(-)
 148EOF
 149test_expect_success 'git diff-tree delete with-funny applied' \
 150        'git diff-index -p $t0 |
 151         git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 152         test_cmp expected current'
 153
 154test_expect_success 'git apply non-git diff' \
 155        'git diff-index -p $t0 |
 156         sed -ne "/^[-+@]/p" |
 157         git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 158         test_cmp expected current'
 159
 160test_done