t / t4031-diff-rewrite-binary.shon commit t/check-non-portable-shell: detect "FOO=bar shell_func" (a0a6301)
   1#!/bin/sh
   2
   3test_description='rewrite diff on binary file'
   4
   5. ./test-lib.sh
   6
   7# We must be large enough to meet the MINIMUM_BREAK_SIZE
   8# requirement.
   9make_file() {
  10        # common first line to help identify rewrite versus regular diff
  11        printf "=\n" >file
  12        for i in 1 2 3 4 5 6 7 8 9 10
  13        do
  14                for j in 1 2 3 4 5 6 7 8 9
  15                do
  16                        for k in 1 2 3 4 5
  17                        do
  18                                printf "$1\n"
  19                        done
  20                done
  21        done >>file
  22}
  23
  24test_expect_success 'create binary file with changes' '
  25        make_file "\\0" &&
  26        git add file &&
  27        make_file "\\01"
  28'
  29
  30test_expect_success 'vanilla diff is binary' '
  31        git diff >diff &&
  32        grep "Binary files a/file and b/file differ" diff
  33'
  34
  35test_expect_success 'rewrite diff is binary' '
  36        git diff -B >diff &&
  37        grep "dissimilarity index" diff &&
  38        grep "Binary files a/file and b/file differ" diff
  39'
  40
  41test_expect_success 'rewrite diff can show binary patch' '
  42        git diff -B --binary >diff &&
  43        grep "dissimilarity index" diff &&
  44        grep "GIT binary patch" diff
  45'
  46
  47test_expect_success 'rewrite diff --numstat shows binary changes' '
  48        git diff -B --numstat --summary >diff &&
  49        grep -e "-      -       " diff &&
  50        grep " rewrite file" diff
  51'
  52
  53test_expect_success 'diff --stat counts binary rewrite as 0 lines' '
  54        git diff -B --stat --summary >diff &&
  55        grep "Bin" diff &&
  56        test_i18ngrep "0 insertions.*0 deletions" diff &&
  57        grep " rewrite file" diff
  58'
  59
  60{
  61        echo "#!$SHELL_PATH"
  62        cat <<'EOF'
  63"$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
  64EOF
  65} >dump
  66chmod +x dump
  67
  68test_expect_success 'setup textconv' '
  69        echo file diff=foo >.gitattributes &&
  70        git config diff.foo.textconv "\"$(pwd)\""/dump
  71'
  72
  73test_expect_success 'rewrite diff respects textconv' '
  74        git diff -B >diff &&
  75        grep "dissimilarity index" diff &&
  76        grep "^-61" diff &&
  77        grep "^-0" diff
  78'
  79
  80test_done