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 blob=$(git hash-object subdir/file2) &&
12 git add . &&
13 git commit -m one
14'
15
16check_diff () {
17 dir=$1
18 shift
19 expect=$1
20 shift
21 short_blob=$(git rev-parse --short $blob)
22 cat >expected <<-EOF
23 diff --git a/$expect b/$expect
24 new file mode 100644
25 index 0000000..$short_blob
26 --- /dev/null
27 +++ b/$expect
28 @@ -0,0 +1 @@
29 +other content
30 EOF
31 test_expect_success "-p $*" "
32 git -C '$dir' diff -p $* HEAD^ >actual &&
33 test_cmp expected actual
34 "
35}
36
37check_numstat () {
38 dir=$1
39 shift
40 expect=$1
41 shift
42 cat >expected <<-EOF
43 1 0 $expect
44 EOF
45 test_expect_success "--numstat $*" "
46 echo '1 0 $expect' >expected &&
47 git -C '$dir' diff --numstat $* HEAD^ >actual &&
48 test_cmp expected actual
49 "
50}
51
52check_stat () {
53 dir=$1
54 shift
55 expect=$1
56 shift
57 cat >expected <<-EOF
58 $expect | 1 +
59 1 file changed, 1 insertion(+)
60 EOF
61 test_expect_success "--stat $*" "
62 git -C '$dir' diff --stat $* HEAD^ >actual &&
63 test_i18ncmp expected actual
64 "
65}
66
67check_raw () {
68 dir=$1
69 shift
70 expect=$1
71 shift
72 cat >expected <<-EOF
73 :000000 100644 0000000000000000000000000000000000000000 $blob A $expect
74 EOF
75 test_expect_success "--raw $*" "
76 git -C '$dir' diff --no-abbrev --raw $* HEAD^ >actual &&
77 test_cmp expected actual
78 "
79}
80
81for type in diff numstat stat raw
82do
83 check_$type . file2 --relative=subdir/
84 check_$type . file2 --relative=subdir
85 check_$type subdir file2 --relative
86 check_$type . dir/file2 --relative=sub
87done
88
89test_done