summaryrefslogtreecommitdiff
path: root/t/t4045-diff-relative.sh
blob: c2c15e4cf57f7c154ff3b731b6dd288582b15bef (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
#!/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 &&
	git add . &&
	git commit -m one
'

store_diff_relative() {
expect=$1;
cat >expected <<EOF
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..25c05ef
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
}

store_diff_absolute() {
expect=$1;
cat >expected <<EOF
diff --git a/file1 b/file1
new file mode 100644
index 0000000..d95f3ad
--- /dev/null
+++ b/file1
@@ -0,0 +1 @@
+content
diff --git a/subdir/file2 b/subdir/file2
new file mode 100644
index 0000000..25c05ef
--- /dev/null
+++ b/subdir/file2
@@ -0,0 +1 @@
+other content
EOF
}

check_diff() {
store_diff_relative $1; shift
test_expect_success "-p $*" "
	git diff -p $* HEAD^ >actual &&
	test_cmp expected actual
"
}

check_norel_pre() {
store_diff_relative $1; shift
test_expect_success "-p --no-relative $*" "
	git diff -p --no-relative $* HEAD^ >actual &&
	test_cmp expected actual
"
}

check_norel_post() {
store_diff_absolute $1; shift
test_expect_success "-p $* --no-relative" "
	git diff -p $* --no-relative HEAD^ >actual &&
	test_cmp expected actual
"
}

check_numstat() {
expect=$1; shift
cat >expected <<EOF
1	0	$expect
EOF
test_expect_success "--numstat $*" "
	echo '1	0	$expect' >expected &&
	git diff --numstat $* HEAD^ >actual &&
	test_cmp expected actual
"
}

check_stat() {
expect=$1; shift
cat >expected <<EOF
 $expect | 1 +
 1 file changed, 1 insertion(+)
EOF
test_expect_success "--stat $*" "
	git diff --stat $* HEAD^ >actual &&
	test_i18ncmp expected actual
"
}

check_raw() {
expect=$1; shift
cat >expected <<EOF
:000000 100644 0000000000000000000000000000000000000000 25c05ef3639d2d270e7fe765a67668f098092bc5 A	$expect
EOF
test_expect_success "--raw $*" "
	git diff --no-abbrev --raw $* HEAD^ >actual &&
	test_cmp expected actual
"
}

check_config() {
store_diff_relative $1; shift
test_expect_success "git-config diff.relative=true in $1" "
	(cd $1; git -c diff.relative=true diff -p HEAD^ >../actual) &&
	test_cmp expected actual
"
}

check_config_no_relative() {
store_diff_absolute $1; shift
test_expect_success "--no-relative w/ git-config diff.relative=true in $1" "
	(cd $1; git -c diff.relative=true diff --no-relative -p HEAD^ >../actual) &&
	test_cmp expected actual
"
}

for type in diff numstat stat raw norel_pre norel_post; do
	check_$type file2 --relative=subdir/
	check_$type file2 --relative=subdir
	check_$type dir/file2 --relative=sub
done
for type in config config_no_relative; do
	check_$type file2 subdir/
	check_$type file2 subdir
done

test_done