t / t4031-diff-rewrite-binary.shon commit Merge branch 'nd/struct-pathspec' (240fe05)
   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 --stat shows binary changes' '
  48        git diff -B --stat --summary >diff &&
  49        grep "Bin" diff &&
  50        grep "0 insertions.*0 deletions" diff &&
  51        grep " rewrite file" diff
  52'
  53
  54{
  55        echo "#!$SHELL_PATH"
  56        cat <<'EOF'
  57perl -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
  58EOF
  59} >dump
  60chmod +x dump
  61
  62test_expect_success 'setup textconv' '
  63        echo file diff=foo >.gitattributes &&
  64        git config diff.foo.textconv "\"$(pwd)\""/dump
  65'
  66
  67test_expect_success 'rewrite diff respects textconv' '
  68        git diff -B >diff &&
  69        grep "dissimilarity index" diff &&
  70        grep "^-61" diff &&
  71        grep "^-0" diff
  72'
  73
  74test_done