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