blob: 61ba5f707fbd419aa3625eeedc39210f9d6d59ac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
#!/bin/sh
test_description='diff --relative tests'
. ./test-lib.sh
test_expect_success 'setup' '
git commit --allow-empty -m empty &&
echo content >file1 &&
mkdir subdir &&
echo other content >subdir/file2 &&
blob_file1=$(git hash-object file1) &&
blob_file2=$(git hash-object subdir/file2) &&
git add . &&
git commit -m one
'
check_diff () {
dir=$1
shift
expect=$1
shift
short_blob=$(git rev-parse --short $blob_file2)
cat >expected <<-EOF
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..$short_blob
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
test_expect_success "-p $*" "
git -C '$dir' diff -p $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_numstat () {
dir=$1
shift
expect=$1
shift
cat >expected <<-EOF
1 0 $expect
EOF
test_expect_success "--numstat $*" "
echo '1 0 $expect' >expected &&
git -C '$dir' diff --numstat $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_stat () {
dir=$1
shift
expect=$1
shift
cat >expected <<-EOF
$expect | 1 +
1 file changed, 1 insertion(+)
EOF
test_expect_success "--stat $*" "
git -C '$dir' diff --stat $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_raw () {
dir=$1
shift
expect=$1
shift
cat >expected <<-EOF
:000000 100644 $ZERO_OID $blob_file2 A $expect
EOF
test_expect_success "--raw $*" "
git -C '$dir' diff --no-abbrev --raw $* HEAD^ >actual &&
test_cmp expected actual
"
}
for type in diff numstat stat raw
do
check_$type . file2 --relative=subdir/
check_$type . file2 --relative=subdir
check_$type subdir file2 --relative
check_$type . dir/file2 --relative=sub
done
check_diff_relative_option () {
dir=$1
shift
expect=$1
shift
relative_opt=$1
shift
test_expect_success "config diff.relative $relative_opt -p $*" "
short_blob=\$(git rev-parse --short $blob_file2) &&
cat >expected <<-EOF &&
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..\$short_blob
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
test_config -C $dir diff.relative $relative_opt &&
git -C '$dir' diff -p $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_diff_no_relative_option () {
dir=$1
shift
expect=$1
shift
relative_opt=$1
shift
test_expect_success "config diff.relative $relative_opt -p $*" "
short_blob_file1=\$(git rev-parse --short $blob_file1) &&
short_blob_file2=\$(git rev-parse --short $blob_file2) &&
cat >expected <<-EOF &&
diff --git a/file1 b/file1
new file mode 100644
index 0000000..\$short_blob_file1
--- /dev/null
+++ b/file1
@@ -0,0 +1 @@
+content
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..\$short_blob_file2
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
test_config -C $dir diff.relative $relative_opt &&
git -C '$dir' diff -p $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_diff_no_relative_option . subdir/file2 false
check_diff_no_relative_option . subdir/file2 true --no-relative
check_diff_no_relative_option . subdir/file2 false --no-relative
check_diff_no_relative_option subdir subdir/file2 false
check_diff_no_relative_option subdir subdir/file2 true --no-relative
check_diff_no_relative_option subdir subdir/file2 false --no-relative
check_diff_relative_option . file2 false --relative=subdir/
check_diff_relative_option . file2 false --relative=subdir
check_diff_relative_option . file2 true --relative=subdir/
check_diff_relative_option . file2 true --relative=subdir
check_diff_relative_option subdir file2 false --relative
check_diff_relative_option subdir file2 true --relative
check_diff_relative_option subdir file2 true
check_diff_relative_option subdir file2 false --no-relative --relative
check_diff_relative_option subdir file2 true --no-relative --relative
check_diff_relative_option . file2 false --no-relative --relative=subdir
check_diff_relative_option . file2 true --no-relative --relative=subdir
test_done
|