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