1#!/bin/sh
2
3test_description='diff --relative tests'
4. ./test-lib.sh
5
6test_expect_success 'setup' '
7 git commit --allow-empty -m empty &&
8 echo content >file1 &&
9 mkdir subdir &&
10 echo other content >subdir/file2 &&
11 git add . &&
12 git commit -m one
13'
14
15check_diff() {
16expect=$1; shift
17cat >expected <<EOF
18diff --git a/$expect b/$expect
19new file mode 100644
20index 0000000..25c05ef
21--- /dev/null
22+++ b/$expect
23@@ -0,0 +1 @@
24+other content
25EOF
26test_expect_success "-p $*" "
27 git diff -p $* HEAD^ >actual &&
28 test_cmp expected actual
29"
30}
31
32check_numstat() {
33expect=$1; shift
34cat >expected <<EOF
351 0 $expect
36EOF
37test_expect_success "--numstat $*" "
38 echo '1 0 $expect' >expected &&
39 git diff --numstat $* HEAD^ >actual &&
40 test_cmp expected actual
41"
42}
43
44check_stat() {
45expect=$1; shift
46cat >expected <<EOF
47 $expect | 1 +
48 1 file changed, 1 insertion(+)
49EOF
50test_expect_success "--stat $*" "
51 git diff --stat $* HEAD^ >actual &&
52 test_i18ncmp expected actual
53"
54}
55
56check_raw() {
57expect=$1; shift
58cat >expected <<EOF
59:000000 100644 0000000000000000000000000000000000000000 25c05ef3639d2d270e7fe765a67668f098092bc5 A $expect
60EOF
61test_expect_success "--raw $*" "
62 git diff --no-abbrev --raw $* HEAD^ >actual &&
63 test_cmp expected actual
64"
65}
66
67for type in diff numstat stat raw; do
68 check_$type file2 --relative=subdir/
69 check_$type file2 --relative=subdir
70 check_$type dir/file2 --relative=sub
71done
72
73test_done