1#!/bin/sh
   2#
   3# Copyright (c) 2006 Junio C Hamano
   4#
   5test_description='quoted output'
   7. ./test-lib.sh
   9P1='pathname    with HT'
  11: >"$P1" 2>&1 && test -f "$P1" && rm -f "$P1" || {
  12        echo >&2 'Filesystem does not support HT in names'
  13        test_done
  14}
  15FN='濱野'
  17GN='純'
  18HT='    '
  19LF='
  20'
  21DQ='"'
  22echo foo > "Name and an${HT}HT"
  24test -f "Name and an${HT}HT" || {
  25        # since FAT/NTFS does not allow tabs in filenames, skip this test
  26        say 'Your filesystem does not allow tabs in filenames, test skipped.'
  27        test_done
  28}
  29for_each_name () {
  31        for name in \
  32            Name "Name and a${LF}LF" "Name and an${HT}HT" "Name${DQ}" \
  33            "$FN$HT$GN" "$FN$LF$GN" "$FN $GN" "$FN$GN" "$FN$DQ$GN" \
  34            "With SP in it"
  35        do
  36                eval "$1"
  37        done
  38}
  39test_expect_success setup '
  41        for_each_name "echo initial >\"\$name\""
  43        git add . &&
  44        git commit -q -m Initial &&
  45        for_each_name "echo second >\"\$name\"" &&
  47        git commit -a -m Second
  48        for_each_name "echo modified >\"\$name\""
  50'
  52cat >expect.quoted <<\EOF
  54Name
  55"Name and a\nLF"
  56"Name and an\tHT"
  57"Name\""
  58With SP in it
  59"\346\277\261\351\207\216\t\347\264\224"
  60"\346\277\261\351\207\216\n\347\264\224"
  61"\346\277\261\351\207\216 \347\264\224"
  62"\346\277\261\351\207\216\"\347\264\224"
  63"\346\277\261\351\207\216\347\264\224"
  64EOF
  65cat >expect.raw <<\EOF
  67Name
  68"Name and a\nLF"
  69"Name and an\tHT"
  70"Name\""
  71With SP in it
  72"濱野\t純"
  73"濱野\n純"
  74濱野 純
  75"濱野\"純"
  76濱野純
  77EOF
  78test_expect_success 'check fully quoted output from ls-files' '
  80        git ls-files >current && test_cmp expect.quoted current
  82'
  84test_expect_success 'check fully quoted output from diff-files' '
  86        git diff --name-only >current &&
  88        test_cmp expect.quoted current
  89'
  91test_expect_success 'check fully quoted output from diff-index' '
  93        git diff --name-only HEAD >current &&
  95        test_cmp expect.quoted current
  96'
  98test_expect_success 'check fully quoted output from diff-tree' '
 100        git diff --name-only HEAD^ HEAD >current &&
 102        test_cmp expect.quoted current
 103'
 105test_expect_success 'setting core.quotepath' '
 107        git config --bool core.quotepath false
 109'
 111test_expect_success 'check fully quoted output from ls-files' '
 113        git ls-files >current && test_cmp expect.raw current
 115'
 117test_expect_success 'check fully quoted output from diff-files' '
 119        git diff --name-only >current &&
 121        test_cmp expect.raw current
 122'
 124test_expect_success 'check fully quoted output from diff-index' '
 126        git diff --name-only HEAD >current &&
 128        test_cmp expect.raw current
 129'
 131test_expect_success 'check fully quoted output from diff-tree' '
 133        git diff --name-only HEAD^ HEAD >current &&
 135        test_cmp expect.raw current
 136'
 138test_done