t / t3300-funny-names.shon commit Improve abstraction of ref lock/write. (4bd18c4)
   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 >"$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        diff -u expected current'
  39
  40t0=`git-write-tree`
  41echo "$t0" >t0
  42
  43echo 'just space
  44no-funny
  45"tabs\t,\" (dq) and spaces"' >expected
  46test_expect_success 'git-ls-files with-funny' \
  47        'git-update-index --add "$p1" &&
  48        git-ls-files >current &&
  49        diff -u expected current'
  50
  51echo 'just space
  52no-funny
  53tabs    ," (dq) and spaces' >expected
  54test_expect_success 'git-ls-files -z with-funny' \
  55        'git-ls-files -z | tr \\0 \\012 >current &&
  56        diff -u expected current'
  57
  58t1=`git-write-tree`
  59echo "$t1" >t1
  60
  61echo 'just space
  62no-funny
  63"tabs\t,\" (dq) and spaces"' >expected
  64test_expect_success 'git-ls-tree with funny' \
  65        'git-ls-tree -r $t1 | sed -e "s/^[^     ]*      //" >current &&
  66         diff -u expected current'
  67
  68echo 'A "tabs\t,\" (dq) and spaces"' >expected
  69test_expect_success 'git-diff-index with-funny' \
  70        'git-diff-index --name-status $t0 >current &&
  71        diff -u expected current'
  72
  73test_expect_success 'git-diff-tree with-funny' \
  74        'git-diff-tree --name-status $t0 $t1 >current &&
  75        diff -u expected current'
  76
  77echo 'A
  78tabs    ," (dq) and spaces' >expected
  79test_expect_success 'git-diff-index -z with-funny' \
  80        'git-diff-index -z --name-status $t0 | tr \\0 \\012 >current &&
  81        diff -u expected current'
  82
  83test_expect_success 'git-diff-tree -z with-funny' \
  84        'git-diff-tree -z --name-status $t0 $t1 | tr \\0 \\012 >current &&
  85        diff -u expected current'
  86
  87echo 'CNUM      no-funny        "tabs\t,\" (dq) and spaces"' >expected
  88test_expect_success 'git-diff-tree -C with-funny' \
  89        'git-diff-tree -C --find-copies-harder --name-status \
  90                $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
  91        diff -u expected current'
  92
  93echo 'RNUM      no-funny        "tabs\t,\" (dq) and spaces"' >expected
  94test_expect_success 'git-diff-tree delete with-funny' \
  95        'git-update-index --force-remove "$p0" &&
  96        git-diff-index -M --name-status \
  97                $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
  98        diff -u expected current'
  99
 100echo 'diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 101similarity index NUM%
 102rename from no-funny
 103rename to "tabs\t,\" (dq) and spaces"' >expected
 104
 105test_expect_success 'git-diff-tree delete with-funny' \
 106        'git-diff-index -M -p $t0 |
 107         sed -e "s/index [0-9]*%/index NUM%/" >current &&
 108         diff -u expected current'
 109
 110chmod +x "$p1"
 111echo 'diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
 112old mode 100644
 113new mode 100755
 114similarity index NUM%
 115rename from no-funny
 116rename to "tabs\t,\" (dq) and spaces"' >expected
 117
 118test_expect_success 'git-diff-tree delete with-funny' \
 119        'git-diff-index -M -p $t0 |
 120         sed -e "s/index [0-9]*%/index NUM%/" >current &&
 121         diff -u expected current'
 122
 123echo >expected ' "tabs\t,\" (dq) and spaces"
 124 1 files changed, 0 insertions(+), 0 deletions(-)'
 125test_expect_success 'git-diff-tree rename with-funny applied' \
 126        'git-diff-index -M -p $t0 |
 127         git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 128         diff -u expected current'
 129
 130echo >expected ' no-funny
 131 "tabs\t,\" (dq) and spaces"
 132 2 files changed, 3 insertions(+), 3 deletions(-)'
 133
 134test_expect_success 'git-diff-tree delete with-funny applied' \
 135        'git-diff-index -p $t0 |
 136         git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 137         diff -u expected current'
 138
 139test_expect_success 'git-apply non-git diff' \
 140        'git-diff-index -p $t0 |
 141         sed -ne "/^[-+@]/p" |
 142         git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
 143         diff -u expected current'
 144
 145test_done