8709bcc49cfbc90579bd823d6dff7f050ce5d39f
1#!/bin/sh
2#
3# Copyright (c) 2007 David D. Kilzer
4
5test_description='git-svn info'
6
7. ./lib-git-svn.sh
8
9# Tested with: svn, version 1.4.4 (r25188)
10v=`svn --version | sed -n -e 's/^svn, version \(1\.[0-9]*\.[0-9]*\).*$/\1/p'`
11case $v in
121.[45].*)
13 ;;
14*)
15 say "skipping svn-info test (SVN version: $v not supported)"
16 test_done
17 ;;
18esac
19
20ptouch() {
21 perl -w -e '
22 use strict;
23 use POSIX qw(mktime);
24 die "ptouch requires exactly 2 arguments" if @ARGV != 2;
25 my $text_last_updated = shift @ARGV;
26 my $git_file = shift @ARGV;
27 die "\"$git_file\" does not exist" if ! -e $git_file;
28 if ($text_last_updated
29 =~ /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/) {
30 my $mtime = mktime($6, $5, $4, $3, $2 - 1, $1 - 1900);
31 my $atime = $mtime;
32 utime $atime, $mtime, $git_file;
33 }
34 ' "`svn info $2 | grep '^Text Last Updated:'`" "$1"
35}
36
37test_expect_success 'setup repository and import' '
38 mkdir info &&
39 cd info &&
40 echo FIRST > A &&
41 echo one > file &&
42 ln -s file symlink-file &&
43 mkdir directory &&
44 touch directory/.placeholder &&
45 ln -s directory symlink-directory &&
46 svn import -m "initial" . "$svnrepo" &&
47 cd .. &&
48 svn co "$svnrepo" svnwc &&
49 cd svnwc &&
50 echo foo > foo &&
51 svn add foo &&
52 svn commit -m "change outside directory" &&
53 svn update &&
54 cd .. &&
55 mkdir gitwc &&
56 cd gitwc &&
57 git-svn init "$svnrepo" &&
58 git-svn fetch &&
59 cd .. &&
60 ptouch gitwc/file svnwc/file &&
61 ptouch gitwc/directory svnwc/directory &&
62 ptouch gitwc/symlink-file svnwc/symlink-file &&
63 ptouch gitwc/symlink-directory svnwc/symlink-directory
64 '
65
66test_expect_success 'info' "
67 (cd svnwc; svn info) > expected.info &&
68 (cd gitwc; git-svn info) > actual.info &&
69 test_cmp expected.info actual.info
70 "
71
72test_expect_success 'info --url' '
73 test "$(cd gitwc; git-svn info --url)" = "$svnrepo"
74 '
75
76test_expect_success 'info .' "
77 (cd svnwc; svn info .) > expected.info-dot &&
78 (cd gitwc; git-svn info .) > actual.info-dot &&
79 test_cmp expected.info-dot actual.info-dot
80 "
81
82test_expect_success 'info --url .' '
83 test "$(cd gitwc; git-svn info --url .)" = "$svnrepo"
84 '
85
86test_expect_success 'info file' "
87 (cd svnwc; svn info file) > expected.info-file &&
88 (cd gitwc; git-svn info file) > actual.info-file &&
89 test_cmp expected.info-file actual.info-file
90 "
91
92test_expect_success 'info --url file' '
93 test "$(cd gitwc; git-svn info --url file)" = "$svnrepo/file"
94 '
95
96test_expect_success 'info directory' "
97 (cd svnwc; svn info directory) > expected.info-directory &&
98 (cd gitwc; git-svn info directory) > actual.info-directory &&
99 test_cmp expected.info-directory actual.info-directory
100 "
101
102test_expect_success 'info inside directory' "
103 (cd svnwc/directory; svn info) > expected.info-inside-directory &&
104 (cd gitwc/directory; git-svn info) > actual.info-inside-directory &&
105 test_cmp expected.info-inside-directory actual.info-inside-directory
106 "
107
108test_expect_success 'info --url directory' '
109 test "$(cd gitwc; git-svn info --url directory)" = "$svnrepo/directory"
110 '
111
112test_expect_success 'info symlink-file' "
113 (cd svnwc; svn info symlink-file) > expected.info-symlink-file &&
114 (cd gitwc; git-svn info symlink-file) > actual.info-symlink-file &&
115 test_cmp expected.info-symlink-file actual.info-symlink-file
116 "
117
118test_expect_success 'info --url symlink-file' '
119 test "$(cd gitwc; git-svn info --url symlink-file)" \
120 = "$svnrepo/symlink-file"
121 '
122
123test_expect_success 'info symlink-directory' "
124 (cd svnwc; svn info symlink-directory) \
125 > expected.info-symlink-directory &&
126 (cd gitwc; git-svn info symlink-directory) \
127 > actual.info-symlink-directory &&
128 test_cmp expected.info-symlink-directory actual.info-symlink-directory
129 "
130
131test_expect_success 'info --url symlink-directory' '
132 test "$(cd gitwc; git-svn info --url symlink-directory)" \
133 = "$svnrepo/symlink-directory"
134 '
135
136test_expect_success 'info added-file' "
137 echo two > gitwc/added-file &&
138 cd gitwc &&
139 git add added-file &&
140 cd .. &&
141 cp gitwc/added-file svnwc/added-file &&
142 ptouch gitwc/added-file svnwc/added-file &&
143 cd svnwc &&
144 svn add added-file > /dev/null &&
145 cd .. &&
146 (cd svnwc; svn info added-file) > expected.info-added-file &&
147 (cd gitwc; git-svn info added-file) > actual.info-added-file &&
148 test_cmp expected.info-added-file actual.info-added-file
149 "
150
151test_expect_success 'info --url added-file' '
152 test "$(cd gitwc; git-svn info --url added-file)" \
153 = "$svnrepo/added-file"
154 '
155
156test_expect_success 'info added-directory' "
157 mkdir gitwc/added-directory svnwc/added-directory &&
158 ptouch gitwc/added-directory svnwc/added-directory &&
159 touch gitwc/added-directory/.placeholder &&
160 cd svnwc &&
161 svn add added-directory > /dev/null &&
162 cd .. &&
163 cd gitwc &&
164 git add added-directory &&
165 cd .. &&
166 (cd svnwc; svn info added-directory) \
167 > expected.info-added-directory &&
168 (cd gitwc; git-svn info added-directory) \
169 > actual.info-added-directory &&
170 test_cmp expected.info-added-directory actual.info-added-directory
171 "
172
173test_expect_success 'info --url added-directory' '
174 test "$(cd gitwc; git-svn info --url added-directory)" \
175 = "$svnrepo/added-directory"
176 '
177
178test_expect_success 'info added-symlink-file' "
179 cd gitwc &&
180 ln -s added-file added-symlink-file &&
181 git add added-symlink-file &&
182 cd .. &&
183 cd svnwc &&
184 ln -s added-file added-symlink-file &&
185 svn add added-symlink-file > /dev/null &&
186 cd .. &&
187 ptouch gitwc/added-symlink-file svnwc/added-symlink-file &&
188 (cd svnwc; svn info added-symlink-file) \
189 > expected.info-added-symlink-file &&
190 (cd gitwc; git-svn info added-symlink-file) \
191 > actual.info-added-symlink-file &&
192 test_cmp expected.info-added-symlink-file \
193 actual.info-added-symlink-file
194 "
195
196test_expect_success 'info --url added-symlink-file' '
197 test "$(cd gitwc; git-svn info --url added-symlink-file)" \
198 = "$svnrepo/added-symlink-file"
199 '
200
201test_expect_success 'info added-symlink-directory' "
202 cd gitwc &&
203 ln -s added-directory added-symlink-directory &&
204 git add added-symlink-directory &&
205 cd .. &&
206 cd svnwc &&
207 ln -s added-directory added-symlink-directory &&
208 svn add added-symlink-directory > /dev/null &&
209 cd .. &&
210 ptouch gitwc/added-symlink-directory svnwc/added-symlink-directory &&
211 (cd svnwc; svn info added-symlink-directory) \
212 > expected.info-added-symlink-directory &&
213 (cd gitwc; git-svn info added-symlink-directory) \
214 > actual.info-added-symlink-directory &&
215 test_cmp expected.info-added-symlink-directory \
216 actual.info-added-symlink-directory
217 "
218
219test_expect_success 'info --url added-symlink-directory' '
220 test "$(cd gitwc; git-svn info --url added-symlink-directory)" \
221 = "$svnrepo/added-symlink-directory"
222 '
223
224# The next few tests replace the "Text Last Updated" value with a
225# placeholder since git doesn't have a way to know the date that a
226# now-deleted file was last checked out locally. Internally it
227# simply reuses the Last Changed Date.
228
229test_expect_success 'info deleted-file' "
230 cd gitwc &&
231 git rm -f file > /dev/null &&
232 cd .. &&
233 cd svnwc &&
234 svn rm --force file > /dev/null &&
235 cd .. &&
236 (cd svnwc; svn info file) |
237 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
238 > expected.info-deleted-file &&
239 (cd gitwc; git-svn info file) |
240 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
241 > actual.info-deleted-file &&
242 test_cmp expected.info-deleted-file actual.info-deleted-file
243 "
244
245test_expect_success 'info --url file (deleted)' '
246 test "$(cd gitwc; git-svn info --url file)" \
247 = "$svnrepo/file"
248 '
249
250test_expect_success 'info deleted-directory' "
251 cd gitwc &&
252 git rm -r -f directory > /dev/null &&
253 cd .. &&
254 cd svnwc &&
255 svn rm --force directory > /dev/null &&
256 cd .. &&
257 (cd svnwc; svn info directory) |
258 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
259 > expected.info-deleted-directory &&
260 (cd gitwc; git-svn info directory) |
261 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
262 > actual.info-deleted-directory &&
263 test_cmp expected.info-deleted-directory actual.info-deleted-directory
264 "
265
266test_expect_success 'info --url directory (deleted)' '
267 test "$(cd gitwc; git-svn info --url directory)" \
268 = "$svnrepo/directory"
269 '
270
271test_expect_success 'info deleted-symlink-file' "
272 cd gitwc &&
273 git rm -f symlink-file > /dev/null &&
274 cd .. &&
275 cd svnwc &&
276 svn rm --force symlink-file > /dev/null &&
277 cd .. &&
278 (cd svnwc; svn info symlink-file) |
279 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
280 > expected.info-deleted-symlink-file &&
281 (cd gitwc; git-svn info symlink-file) |
282 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
283 > actual.info-deleted-symlink-file &&
284 test_cmp expected.info-deleted-symlink-file \
285 actual.info-deleted-symlink-file
286 "
287
288test_expect_success 'info --url symlink-file (deleted)' '
289 test "$(cd gitwc; git-svn info --url symlink-file)" \
290 = "$svnrepo/symlink-file"
291 '
292
293test_expect_success 'info deleted-symlink-directory' "
294 cd gitwc &&
295 git rm -f symlink-directory > /dev/null &&
296 cd .. &&
297 cd svnwc &&
298 svn rm --force symlink-directory > /dev/null &&
299 cd .. &&
300 (cd svnwc; svn info symlink-directory) |
301 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
302 > expected.info-deleted-symlink-directory &&
303 (cd gitwc; git-svn info symlink-directory) |
304 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
305 > actual.info-deleted-symlink-directory &&
306 test_cmp expected.info-deleted-symlink-directory \
307 actual.info-deleted-symlink-directory
308 "
309
310test_expect_success 'info --url symlink-directory (deleted)' '
311 test "$(cd gitwc; git-svn info --url symlink-directory)" \
312 = "$svnrepo/symlink-directory"
313 '
314
315# NOTE: git does not have the concept of replaced objects,
316# so we can't test for files in that state.
317
318test_expect_success 'info unknown-file' "
319 echo two > gitwc/unknown-file &&
320 cp gitwc/unknown-file svnwc/unknown-file &&
321 ptouch gitwc/unknown-file svnwc/unknown-file &&
322 (cd svnwc; svn info unknown-file) 2> expected.info-unknown-file &&
323 (cd gitwc; git-svn info unknown-file) 2> actual.info-unknown-file &&
324 test_cmp expected.info-unknown-file actual.info-unknown-file
325 "
326
327test_expect_success 'info --url unknown-file' '
328 test -z "$(cd gitwc; git-svn info --url unknown-file \
329 2> ../actual.info--url-unknown-file)" &&
330 test_cmp expected.info-unknown-file actual.info--url-unknown-file
331 '
332
333test_expect_success 'info unknown-directory' "
334 mkdir gitwc/unknown-directory svnwc/unknown-directory &&
335 ptouch gitwc/unknown-directory svnwc/unknown-directory &&
336 touch gitwc/unknown-directory/.placeholder &&
337 (cd svnwc; svn info unknown-directory) \
338 2> expected.info-unknown-directory &&
339 (cd gitwc; git-svn info unknown-directory) \
340 2> actual.info-unknown-directory &&
341 test_cmp expected.info-unknown-directory actual.info-unknown-directory
342 "
343
344test_expect_success 'info --url unknown-directory' '
345 test -z "$(cd gitwc; git-svn info --url unknown-directory \
346 2> ../actual.info--url-unknown-directory)" &&
347 test_cmp expected.info-unknown-directory \
348 actual.info--url-unknown-directory
349 '
350
351test_expect_success 'info unknown-symlink-file' "
352 cd gitwc &&
353 ln -s unknown-file unknown-symlink-file &&
354 cd .. &&
355 cd svnwc &&
356 ln -s unknown-file unknown-symlink-file &&
357 cd .. &&
358 ptouch gitwc/unknown-symlink-file svnwc/unknown-symlink-file &&
359 (cd svnwc; svn info unknown-symlink-file) \
360 2> expected.info-unknown-symlink-file &&
361 (cd gitwc; git-svn info unknown-symlink-file) \
362 2> actual.info-unknown-symlink-file &&
363 test_cmp expected.info-unknown-symlink-file \
364 actual.info-unknown-symlink-file
365 "
366
367test_expect_success 'info --url unknown-symlink-file' '
368 test -z "$(cd gitwc; git-svn info --url unknown-symlink-file \
369 2> ../actual.info--url-unknown-symlink-file)" &&
370 test_cmp expected.info-unknown-symlink-file \
371 actual.info--url-unknown-symlink-file
372 '
373
374test_expect_success 'info unknown-symlink-directory' "
375 cd gitwc &&
376 ln -s unknown-directory unknown-symlink-directory &&
377 cd .. &&
378 cd svnwc &&
379 ln -s unknown-directory unknown-symlink-directory &&
380 cd .. &&
381 ptouch gitwc/unknown-symlink-directory \
382 svnwc/unknown-symlink-directory &&
383 (cd svnwc; svn info unknown-symlink-directory) \
384 2> expected.info-unknown-symlink-directory &&
385 (cd gitwc; git-svn info unknown-symlink-directory) \
386 2> actual.info-unknown-symlink-directory &&
387 test_cmp expected.info-unknown-symlink-directory \
388 actual.info-unknown-symlink-directory
389 "
390
391test_expect_success 'info --url unknown-symlink-directory' '
392 test -z "$(cd gitwc; git-svn info --url unknown-symlink-directory \
393 2> ../actual.info--url-unknown-symlink-directory)" &&
394 test_cmp expected.info-unknown-symlink-directory \
395 actual.info--url-unknown-symlink-directory
396 '
397
398test_done