]>
Commit | Line | Data |
---|---|---|
b335d3f1 AR |
1 | #!/bin/sh |
2 | ||
3 | test_description='git cat-file' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | echo_without_newline () { | |
8 | printf '%s' "$*" | |
9 | } | |
10 | ||
11 | strlen () { | |
12 | echo_without_newline "$1" | wc -c | sed -e 's/^ *//' | |
13 | } | |
14 | ||
15 | maybe_remove_timestamp () { | |
16 | if test -z "$2"; then | |
17 | echo_without_newline "$1" | |
18 | else | |
19 | echo_without_newline "$(printf '%s\n' "$1" | sed -e 's/ [0-9][0-9]* [-+][0-9][0-9][0-9][0-9]$//')" | |
20 | fi | |
21 | } | |
22 | ||
23 | run_tests () { | |
24 | type=$1 | |
25 | sha1=$2 | |
26 | size=$3 | |
27 | content=$4 | |
28 | pretty_content=$5 | |
29 | no_ts=$6 | |
30 | ||
a8128ed6 AR |
31 | batch_output="$sha1 $type $size |
32 | $content" | |
33 | ||
b335d3f1 AR |
34 | test_expect_success "$type exists" ' |
35 | git cat-file -e $sha1 | |
36 | ' | |
37 | ||
38 | test_expect_success "Type of $type is correct" ' | |
39 | test $type = "$(git cat-file -t $sha1)" | |
40 | ' | |
41 | ||
42 | test_expect_success "Size of $type is correct" ' | |
43 | test $size = "$(git cat-file -s $sha1)" | |
44 | ' | |
45 | ||
46 | test -z "$content" || | |
47 | test_expect_success "Content of $type is correct" ' | |
48 | expect="$(maybe_remove_timestamp "$content" $no_ts)" | |
49 | actual="$(maybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts)" | |
50 | ||
51 | if test "z$expect" = "z$actual" | |
52 | then | |
53 | : happy | |
54 | else | |
55 | echo "Oops: expected $expect" | |
56 | echo "but got $actual" | |
57 | false | |
58 | fi | |
59 | ' | |
60 | ||
61 | test_expect_success "Pretty content of $type is correct" ' | |
62 | expect="$(maybe_remove_timestamp "$pretty_content" $no_ts)" | |
63 | actual="$(maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts)" | |
64 | if test "z$expect" = "z$actual" | |
65 | then | |
66 | : happy | |
67 | else | |
68 | echo "Oops: expected $expect" | |
69 | echo "but got $actual" | |
70 | false | |
71 | fi | |
72 | ' | |
05d5667f | 73 | |
a8128ed6 AR |
74 | test -z "$content" || |
75 | test_expect_success "--batch output of $type is correct" ' | |
76 | expect="$(maybe_remove_timestamp "$batch_output" $no_ts)" | |
4e44ae45 | 77 | actual="$(maybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts)" |
a8128ed6 AR |
78 | if test "z$expect" = "z$actual" |
79 | then | |
80 | : happy | |
81 | else | |
82 | echo "Oops: expected $expect" | |
83 | echo "but got $actual" | |
84 | false | |
85 | fi | |
86 | ' | |
87 | ||
05d5667f AR |
88 | test_expect_success "--batch-check output of $type is correct" ' |
89 | expect="$sha1 $type $size" | |
90 | actual="$(echo_without_newline $sha1 | git cat-file --batch-check)" | |
91 | if test "z$expect" = "z$actual" | |
92 | then | |
93 | : happy | |
94 | else | |
95 | echo "Oops: expected $expect" | |
96 | echo "but got $actual" | |
97 | false | |
98 | fi | |
99 | ' | |
b335d3f1 AR |
100 | } |
101 | ||
102 | hello_content="Hello World" | |
103 | hello_size=$(strlen "$hello_content") | |
104 | hello_sha1=$(echo_without_newline "$hello_content" | git hash-object --stdin) | |
105 | ||
106 | test_expect_success "setup" ' | |
107 | echo_without_newline "$hello_content" > hello && | |
108 | git update-index --add hello | |
109 | ' | |
110 | ||
111 | run_tests 'blob' $hello_sha1 $hello_size "$hello_content" "$hello_content" | |
112 | ||
113 | tree_sha1=$(git write-tree) | |
114 | tree_size=33 | |
115 | tree_pretty_content="100644 blob $hello_sha1 hello" | |
116 | ||
117 | run_tests 'tree' $tree_sha1 $tree_size "" "$tree_pretty_content" | |
118 | ||
119 | commit_message="Intial commit" | |
120 | commit_sha1=$(echo_without_newline "$commit_message" | git commit-tree $tree_sha1) | |
121 | commit_size=176 | |
122 | commit_content="tree $tree_sha1 | |
123 | author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 0000000000 +0000 | |
124 | committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 0000000000 +0000 | |
125 | ||
126 | $commit_message" | |
127 | ||
128 | run_tests 'commit' $commit_sha1 $commit_size "$commit_content" "$commit_content" 1 | |
129 | ||
130 | tag_header_without_timestamp="object $hello_sha1 | |
131 | type blob | |
132 | tag hellotag | |
133 | tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" | |
134 | tag_description="This is a tag" | |
135 | tag_content="$tag_header_without_timestamp 0000000000 +0000 | |
136 | ||
137 | $tag_description" | |
138 | tag_pretty_content="$tag_header_without_timestamp Thu Jan 1 00:00:00 1970 +0000 | |
139 | ||
140 | $tag_description" | |
141 | ||
142 | tag_sha1=$(echo_without_newline "$tag_content" | git mktag) | |
143 | tag_size=$(strlen "$tag_content") | |
144 | ||
145 | run_tests 'tag' $tag_sha1 $tag_size "$tag_content" "$tag_pretty_content" 1 | |
146 | ||
147 | test_expect_success \ | |
148 | "Reach a blob from a tag pointing to it" \ | |
149 | "test '$hello_content' = \"\$(git cat-file blob $tag_sha1)\"" | |
150 | ||
a8128ed6 | 151 | for batch in batch batch-check |
05d5667f | 152 | do |
a8128ed6 AR |
153 | for opt in t s e p |
154 | do | |
155 | test_expect_success "Passing -$opt with --$batch fails" ' | |
156 | test_must_fail git cat-file --$batch -$opt $hello_sha1 | |
157 | ' | |
158 | ||
159 | test_expect_success "Passing --$batch with -$opt fails" ' | |
160 | test_must_fail git cat-file -$opt --$batch $hello_sha1 | |
161 | ' | |
162 | done | |
163 | ||
164 | test_expect_success "Passing <type> with --$batch fails" ' | |
165 | test_must_fail git cat-file --$batch blob $hello_sha1 | |
05d5667f AR |
166 | ' |
167 | ||
a8128ed6 AR |
168 | test_expect_success "Passing --$batch with <type> fails" ' |
169 | test_must_fail git cat-file blob --$batch $hello_sha1 | |
05d5667f | 170 | ' |
05d5667f | 171 | |
a8128ed6 AR |
172 | test_expect_success "Passing sha1 with --$batch fails" ' |
173 | test_must_fail git cat-file --$batch $hello_sha1 | |
174 | ' | |
175 | done | |
05d5667f | 176 | |
3c076dbe LW |
177 | test_expect_success "--batch-check for a non-existent named object" ' |
178 | test "foobar42 missing | |
179 | foobar84 missing" = \ | |
180 | "$( ( echo foobar42; echo_without_newline foobar84; ) | git cat-file --batch-check)" | |
181 | ' | |
182 | ||
183 | test_expect_success "--batch-check for a non-existent hash" ' | |
184 | test "0000000000000000000000000000000000000042 missing | |
185 | 0000000000000000000000000000000000000084 missing" = \ | |
186 | "$( ( echo 0000000000000000000000000000000000000042; | |
187 | echo_without_newline 0000000000000000000000000000000000000084; ) \ | |
188 | | git cat-file --batch-check)" | |
189 | ' | |
190 | ||
191 | test_expect_success "--batch for an existent and a non-existent hash" ' | |
192 | test "$tag_sha1 tag $tag_size | |
193 | $tag_content | |
194 | 0000000000000000000000000000000000000000 missing" = \ | |
195 | "$( ( echo $tag_sha1; | |
196 | echo_without_newline 0000000000000000000000000000000000000000; ) \ | |
197 | | git cat-file --batch)" | |
05d5667f AR |
198 | ' |
199 | ||
200 | test_expect_success "--batch-check for an emtpy line" ' | |
201 | test " missing" = "$(echo | git cat-file --batch-check)" | |
202 | ' | |
203 | ||
a8128ed6 AR |
204 | batch_input="$hello_sha1 |
205 | $commit_sha1 | |
206 | $tag_sha1 | |
207 | deadbeef | |
208 | ||
209 | " | |
210 | ||
211 | batch_output="$hello_sha1 blob $hello_size | |
212 | $hello_content | |
213 | $commit_sha1 commit $commit_size | |
214 | $commit_content | |
215 | $tag_sha1 tag $tag_size | |
216 | $tag_content | |
217 | deadbeef missing | |
218 | missing" | |
219 | ||
6c41e21d MB |
220 | test_expect_success '--batch with multiple sha1s gives correct format' ' |
221 | test "$(maybe_remove_timestamp "$batch_output" 1)" = "$(maybe_remove_timestamp "$(echo_without_newline "$batch_input" | git cat-file --batch)" 1)" | |
222 | ' | |
a8128ed6 | 223 | |
05d5667f AR |
224 | batch_check_input="$hello_sha1 |
225 | $tree_sha1 | |
226 | $commit_sha1 | |
227 | $tag_sha1 | |
228 | deadbeef | |
229 | ||
230 | " | |
231 | ||
232 | batch_check_output="$hello_sha1 blob $hello_size | |
233 | $tree_sha1 tree $tree_size | |
234 | $commit_sha1 commit $commit_size | |
235 | $tag_sha1 tag $tag_size | |
236 | deadbeef missing | |
237 | missing" | |
238 | ||
239 | test_expect_success "--batch-check with multiple sha1s gives correct format" ' | |
240 | test "$batch_check_output" = \ | |
241 | "$(echo_without_newline "$batch_check_input" | git cat-file --batch-check)" | |
242 | ' | |
243 | ||
b335d3f1 | 244 | test_done |