1#!/bin/sh
   2test_description='external diff interface test'
   4. ./test-lib.sh
   6_z40=0000000000000000000000000000000000000000
   8test_expect_success setup '
  10        test_tick &&
  12        echo initial >file &&
  13        git add file &&
  14        git commit -m initial &&
  15        test_tick &&
  17        echo second >file &&
  18        git add file &&
  19        git commit -m second &&
  20        test_tick &&
  22        echo third >file
  23'
  24test_expect_success 'GIT_EXTERNAL_DIFF environment' '
  26        GIT_EXTERNAL_DIFF=echo git diff | {
  28                read path oldfile oldhex oldmode newfile newhex newmode &&
  29                test "z$path" = zfile &&
  30                test "z$oldmode" = z100644 &&
  31                test "z$newhex" = "z$_z40" &&
  32                test "z$newmode" = z100644 &&
  33                oh=$(git rev-parse --verify HEAD:file) &&
  34                test "z$oh" = "z$oldhex"
  35        }
  36'
  38test_expect_success 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
  40        GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD |
  42        grep "^diff --git a/file b/file"
  43'
  45test_expect_success 'diff attribute' '
  47        git config diff.parrot.command echo &&
  49        echo >.gitattributes "file diff=parrot" &&
  51        git diff | {
  53                read path oldfile oldhex oldmode newfile newhex newmode &&
  54                test "z$path" = zfile &&
  55                test "z$oldmode" = z100644 &&
  56                test "z$newhex" = "z$_z40" &&
  57                test "z$newmode" = z100644 &&
  58                oh=$(git rev-parse --verify HEAD:file) &&
  59                test "z$oh" = "z$oldhex"
  60        }
  61'
  63test_expect_success 'diff attribute should apply only to diff' '
  65        git log -p -1 HEAD |
  67        grep "^diff --git a/file b/file"
  68'
  70test_expect_success 'diff attribute' '
  72        git config --unset diff.parrot.command &&
  74        git config diff.color.command echo &&
  75        echo >.gitattributes "file diff=color" &&
  77        git diff | {
  79                read path oldfile oldhex oldmode newfile newhex newmode &&
  80                test "z$path" = zfile &&
  81                test "z$oldmode" = z100644 &&
  82                test "z$newhex" = "z$_z40" &&
  83                test "z$newmode" = z100644 &&
  84                oh=$(git rev-parse --verify HEAD:file) &&
  85                test "z$oh" = "z$oldhex"
  86        }
  87'
  89test_expect_success 'diff attribute should apply only to diff' '
  91        git log -p -1 HEAD |
  93        grep "^diff --git a/file b/file"
  94'
  96test_expect_success 'no diff with -diff' '
  98        echo >.gitattributes "file -diff" &&
  99        git diff | grep Binary
 100'
 101echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
 103test_expect_success 'force diff with "diff"' '
 105        echo >.gitattributes "file diff" &&
 106        git diff >actual &&
 107        test_cmp ../t4020/diff.NUL actual
 108'
 109test_done