1#!/bin/sh
   2test_description='rewrite diff on binary file'
   4. ./test-lib.sh
   6# 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}
  23test_expect_success 'create binary file with changes' '
  25        make_file "\\0" &&
  26        git add file &&
  27        make_file "\\01"
  28'
  29test_expect_success 'vanilla diff is binary' '
  31        git diff >diff &&
  32        grep "Binary files a/file and b/file differ" diff
  33'
  34test_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'
  40test_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'
  46test_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'
  52test_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{
  61        echo "#!$SHELL_PATH"
  62        cat <<'EOF'
  63"$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
  64EOF
  65} >dump
  66chmod +x dump
  67test_expect_success 'setup textconv' '
  69        echo file diff=foo >.gitattributes &&
  70        git config diff.foo.textconv "\"$(pwd)\""/dump
  71'
  72test_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'
  79test_done