t / t4017-diff-retval.shon commit symbolic ref: refuse non-ref targets in HEAD (afe5d3d)
   1#!/bin/sh
   2
   3test_description='Return value of diffs'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        echo 1 >a &&
   9        git add . &&
  10        git commit -m first &&
  11        echo 2 >b &&
  12        git add . &&
  13        git commit -a -m second
  14'
  15
  16test_expect_success 'git diff-tree HEAD^ HEAD' '
  17        git diff-tree --exit-code HEAD^ HEAD
  18        test $? = 1
  19'
  20test_expect_success 'git diff-tree HEAD^ HEAD -- a' '
  21        git diff-tree --exit-code HEAD^ HEAD -- a
  22        test $? = 0
  23'
  24test_expect_success 'git diff-tree HEAD^ HEAD -- b' '
  25        git diff-tree --exit-code HEAD^ HEAD -- b
  26        test $? = 1
  27'
  28test_expect_success 'echo HEAD | git diff-tree --stdin' '
  29        echo $(git rev-parse HEAD) | git diff-tree --exit-code --stdin
  30        test $? = 1
  31'
  32test_expect_success 'git diff-tree HEAD HEAD' '
  33        git diff-tree --exit-code HEAD HEAD
  34        test $? = 0
  35'
  36test_expect_success 'git diff-files' '
  37        git diff-files --exit-code
  38        test $? = 0
  39'
  40test_expect_success 'git diff-index --cached HEAD' '
  41        git diff-index --exit-code --cached HEAD
  42        test $? = 0
  43'
  44test_expect_success 'git diff-index --cached HEAD^' '
  45        git diff-index --exit-code --cached HEAD^
  46        test $? = 1
  47'
  48test_expect_success 'git diff-index --cached HEAD^' '
  49        echo text >>b &&
  50        echo 3 >c &&
  51        git add . && {
  52                git diff-index --exit-code --cached HEAD^
  53                test $? = 1
  54        }
  55'
  56test_expect_success 'git diff-tree -Stext HEAD^ HEAD -- b' '
  57        git commit -m "text in b" && {
  58                git diff-tree -p --exit-code -Stext HEAD^ HEAD -- b
  59                test $? = 1
  60        }
  61'
  62test_expect_success 'git diff-tree -Snot-found HEAD^ HEAD -- b' '
  63        git diff-tree -p --exit-code -Snot-found HEAD^ HEAD -- b
  64        test $? = 0
  65'
  66test_expect_success 'git diff-files' '
  67        echo 3 >>c && {
  68                git diff-files --exit-code
  69                test $? = 1
  70        }
  71'
  72test_expect_success 'git diff-index --cached HEAD' '
  73        git update-index c && {
  74                git diff-index --exit-code --cached HEAD
  75                test $? = 1
  76        }
  77'
  78
  79test_expect_success '--check --exit-code returns 0 for no difference' '
  80
  81        git diff --check --exit-code
  82
  83'
  84
  85test_expect_success '--check --exit-code returns 1 for a clean difference' '
  86
  87        echo "good" > a &&
  88        git diff --check --exit-code
  89        test $? = 1
  90
  91'
  92
  93test_expect_success '--check --exit-code returns 3 for a dirty difference' '
  94
  95        echo "bad   " >> a &&
  96        git diff --check --exit-code
  97        test $? = 3
  98
  99'
 100
 101test_expect_success '--check with --no-pager returns 2 for dirty difference' '
 102
 103        git --no-pager diff --check
 104        test $? = 2
 105
 106'
 107
 108
 109test_expect_success 'check should test not just the last line' '
 110        echo "" >>a &&
 111        git --no-pager diff --check
 112        test $? = 2
 113
 114'
 115
 116test_expect_success 'check detects leftover conflict markers' '
 117        git reset --hard &&
 118        git checkout HEAD^ &&
 119        echo binary >>b &&
 120        git commit -m "side" b &&
 121        test_must_fail git merge master &&
 122        git add b && (
 123                git --no-pager diff --cached --check >test.out
 124                test $? = 2
 125        ) &&
 126        test 3 = $(grep "conflict marker" test.out | wc -l) &&
 127        git reset --hard
 128'
 129
 130test_done