1
+#!/bin/sh
2
+
3
+test_description='ls-tree output'
4
+
5
+TEST_PASSES_SANITIZE_LEAK=true
6
+. ./test-lib.sh
7
+. "$TEST_DIRECTORY"/lib-t3100.sh
8
+
9
+test_expect_success 'ls-tree --format usage' '
10
+ test_expect_code 129 git ls-tree --format=fmt -l HEAD &&
11
+ test_expect_code 129 git ls-tree --format=fmt --name-only HEAD &&
12
+ test_expect_code 129 git ls-tree --format=fmt --name-status HEAD
13
+'
14
+
15
+test_expect_success 'setup' '
16
+ setup_basic_ls_tree_data
17
+'
18
+
19
+test_ls_tree_format_mode_output () {
20
+ local opts="$1" &&
21
+ shift &&
22
+ cat >expect &&
23
+
24
+ while test $# -gt 0
25
+ do
26
+ local mode="$1" &&
27
+ shift &&
28
+
29
+ test_expect_success "'ls-tree $opts${mode:+ $mode}' output" '
30
+ git ls-tree ${mode:+$mode }$opts HEAD >actual &&
31
+ test_cmp expect actual
32
+ '
33
+
34
+ case "$opts" in
35
+ --full-tree)
36
+ test_expect_success "'ls-tree $opts${mode:+ $mode}' output (via subdir, fails)" '
37
+ test_must_fail git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../
38
+ '
39
+ ;;
40
+ *)
41
+ test_expect_success "'ls-tree $opts${mode:+ $mode}' output (via subdir)" '
42
+ git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual &&
43
+ test_cmp expect actual
44
+ '
45
+ ;;
46
+ esac
47
+ done
48
+}
49
+
50
+# test exact output of option (none, --long, ...) and mode (none and
51
+# -d, -r -t) and combinations
52
+test_expect_success 'setup: HEAD_* variables' '
53
+ HEAD_gitmodules=$(git rev-parse HEAD:.gitmodules) &&
54
+ HEAD_dir=$(git rev-parse HEAD:dir) &&
55
+ HEAD_top_file=$(git rev-parse HEAD:top-file.t) &&
56
+ HEAD_submodule=$(git rev-parse HEAD:submodule) &&
57
+ HEAD_dir_sub_file=$(git rev-parse HEAD:dir/sub-file.t)
58
+'
59
+## opt =
60
+test_ls_tree_format_mode_output "" "" "-t" <<-EOF
61
+ 100644 blob $HEAD_gitmodules .gitmodules
62
+ 040000 tree $HEAD_dir dir
63
+ 160000 commit $HEAD_submodule submodule
64
+ 100644 blob $HEAD_top_file top-file.t
65
+ EOF
66
+test_ls_tree_format_mode_output "" "-d" <<-EOF
67
+ 040000 tree $HEAD_dir dir
68
+ 160000 commit $HEAD_submodule submodule
69
+ EOF
70
+test_ls_tree_format_mode_output "" "-r" <<-EOF
71
+ 100644 blob $HEAD_gitmodules .gitmodules
72
+ 100644 blob $HEAD_dir_sub_file dir/sub-file.t
73
+ 160000 commit $HEAD_submodule submodule
74
+ 100644 blob $HEAD_top_file top-file.t
75
+ EOF
76
+## opt = --long
77
+test_ls_tree_format_mode_output "--long" "" "-t" <<-EOF
78
+ 100644 blob $HEAD_gitmodules 61 .gitmodules
79
+ 040000 tree $HEAD_dir - dir
80
+ 160000 commit $HEAD_submodule - submodule
81
+ 100644 blob $HEAD_top_file 9 top-file.t
82
+ EOF
83
+test_ls_tree_format_mode_output "--long" "-d" <<-EOF
84
+ 040000 tree $HEAD_dir - dir
85
+ 160000 commit $HEAD_submodule - submodule
86
+ EOF
87
+test_ls_tree_format_mode_output "--long" "-r" <<-EOF
88
+ 100644 blob $HEAD_gitmodules 61 .gitmodules
89
+ 100644 blob $HEAD_dir_sub_file 13 dir/sub-file.t
90
+ 160000 commit $HEAD_submodule - submodule
91
+ 100644 blob $HEAD_top_file 9 top-file.t
92
+ EOF
93
+## opt = --name-only
94
+test_ls_tree_format_mode_output "--name-only" "" "-t" <<-EOF
95
+ .gitmodules
96
+ dir
97
+ submodule
98
+ top-file.t
99
+ EOF
100
+test_ls_tree_format_mode_output "--name-only" "-d" <<-EOF
101
+ dir
102
+ submodule
103
+ EOF
104
+test_ls_tree_format_mode_output "--name-only" "-r" <<-EOF
105
+ .gitmodules
106
+ dir/sub-file.t
107
+ submodule
108
+ top-file.t
109
+ EOF
110
+## opt = --object-only
111
+test_ls_tree_format_mode_output "--object-only" "" "-t" <<-EOF
112
+ $HEAD_gitmodules
113
+ $HEAD_dir
114
+ $HEAD_submodule
115
+ $HEAD_top_file
116
+ EOF
117
+test_ls_tree_format_mode_output "--object-only" "-d" <<-EOF
118
+ $HEAD_dir
119
+ $HEAD_submodule
120
+ EOF
121
+test_ls_tree_format_mode_output "--object-only" "-r" <<-EOF
122
+ $HEAD_gitmodules
123
+ $HEAD_dir_sub_file
124
+ $HEAD_submodule
125
+ $HEAD_top_file
126
+ EOF
127
+## opt = --object-only --abbrev
128
+test_expect_success 'setup: HEAD_short_* variables' '
129
+ HEAD_short_gitmodules=$(git rev-parse --short HEAD:.gitmodules) &&
130
+ HEAD_short_dir=$(git rev-parse --short HEAD:dir) &&
131
+ HEAD_short_top_file=$(git rev-parse --short HEAD:top-file.t) &&
132
+ HEAD_short_submodule=$(git rev-parse --short HEAD:submodule) &&
133
+ HEAD_short_dir_sub_file=$(git rev-parse --short HEAD:dir/sub-file.t)
134
+'
135
+test_ls_tree_format_mode_output "--object-only --abbrev" "" "-t" <<-EOF
136
+ $HEAD_short_gitmodules
137
+ $HEAD_short_dir
138
+ $HEAD_short_submodule
139
+ $HEAD_short_top_file
140
+ EOF
141
+test_ls_tree_format_mode_output "--object-only --abbrev" "-d" <<-EOF
142
+ $HEAD_short_dir
143
+ $HEAD_short_submodule
144
+ EOF
145
+test_ls_tree_format_mode_output "--object-only --abbrev" "-r" <<-EOF
146
+ $HEAD_short_gitmodules
147
+ $HEAD_short_dir_sub_file
148
+ $HEAD_short_submodule
149
+ $HEAD_short_top_file
150
+ EOF
151
+## opt = --full-name
152
+test_ls_tree_format_mode_output "--full-name" "" <<-EOF
153
+ 100644 blob $HEAD_gitmodules .gitmodules
154
+ 040000 tree $HEAD_dir dir
155
+ 160000 commit $HEAD_submodule submodule
156
+ 100644 blob $HEAD_top_file top-file.t
157
+ EOF
158
+test_ls_tree_format_mode_output "--full-name" "-d" <<-EOF
159
+ 040000 tree $HEAD_dir dir
160
+ 160000 commit $HEAD_submodule submodule
161
+ EOF
162
+test_ls_tree_format_mode_output "--full-name" "-r" <<-EOF
163
+ 100644 blob $HEAD_gitmodules .gitmodules
164
+ 100644 blob $HEAD_dir_sub_file dir/sub-file.t
165
+ 160000 commit $HEAD_submodule submodule
166
+ 100644 blob $HEAD_top_file top-file.t
167
+ EOF
168
+test_ls_tree_format_mode_output "--full-name" "-t" <<-EOF
169
+ 100644 blob $HEAD_gitmodules .gitmodules
170
+ 040000 tree $HEAD_dir dir
171
+ 160000 commit $HEAD_submodule submodule
172
+ 100644 blob $HEAD_top_file top-file.t
173
+ EOF
174
+## opt = --full-tree
175
+test_ls_tree_format_mode_output "--full-tree" "" "-t" <<-EOF
176
+ 100644 blob $HEAD_gitmodules .gitmodules
177
+ 040000 tree $HEAD_dir dir
178
+ 160000 commit $HEAD_submodule submodule
179
+ 100644 blob $HEAD_top_file top-file.t
180
+ EOF
181
+test_ls_tree_format_mode_output "--full-tree" "-d" <<-EOF
182
+ 040000 tree $HEAD_dir dir
183
+ 160000 commit $HEAD_submodule submodule
184
+ EOF
185
+test_ls_tree_format_mode_output "--full-tree" "-r" <<-EOF
186
+ 100644 blob $HEAD_gitmodules .gitmodules
187
+ 100644 blob $HEAD_dir_sub_file dir/sub-file.t
188
+ 160000 commit $HEAD_submodule submodule
189
+ 100644 blob $HEAD_top_file top-file.t
190
+ EOF
191
+
192
+test_done