t / t4031-diff-rewrite-binary.shon commit Merge branch 'maint' (de0db42)
   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
  47{
  48        echo "#!$SHELL_PATH"
  49        cat <<'EOF'
  50perl -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
  51EOF
  52} >dump
  53chmod +x dump
  54
  55test_expect_success 'setup textconv' '
  56        echo file diff=foo >.gitattributes &&
  57        git config diff.foo.textconv "$PWD"/dump
  58'
  59
  60test_expect_success 'rewrite diff respects textconv' '
  61        git diff -B >diff &&
  62        grep "dissimilarity index" diff &&
  63        grep "^-61" diff &&
  64        grep "^-0" diff
  65'
  66
  67test_done