git svn info: make info relative to the current directory
[git/jrn.git] / t / t9119-git-svn-info.sh
blob8709bcc49cfbc90579bd823d6dff7f050ce5d39f
1 #!/bin/sh
3 # Copyright (c) 2007 David D. Kilzer
5 test_description='git-svn info'
7 . ./lib-git-svn.sh
9 # Tested with: svn, version 1.4.4 (r25188)
10 v=`svn --version | sed -n -e 's/^svn, version \(1\.[0-9]*\.[0-9]*\).*$/\1/p'`
11 case $v in
12 1.[45].*)
15 say "skipping svn-info test (SVN version: $v not supported)"
16 test_done
18 esac
20 ptouch() {
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;
34 ' "`svn info $2 | grep '^Text Last Updated:'`" "$1"
37 test_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
66 test_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
72 test_expect_success 'info --url' '
73 test "$(cd gitwc; git-svn info --url)" = "$svnrepo"
76 test_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
82 test_expect_success 'info --url .' '
83 test "$(cd gitwc; git-svn info --url .)" = "$svnrepo"
86 test_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
92 test_expect_success 'info --url file' '
93 test "$(cd gitwc; git-svn info --url file)" = "$svnrepo/file"
96 test_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
102 test_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
108 test_expect_success 'info --url directory' '
109 test "$(cd gitwc; git-svn info --url directory)" = "$svnrepo/directory"
112 test_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
118 test_expect_success 'info --url symlink-file' '
119 test "$(cd gitwc; git-svn info --url symlink-file)" \
120 = "$svnrepo/symlink-file"
123 test_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
131 test_expect_success 'info --url symlink-directory' '
132 test "$(cd gitwc; git-svn info --url symlink-directory)" \
133 = "$svnrepo/symlink-directory"
136 test_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
151 test_expect_success 'info --url added-file' '
152 test "$(cd gitwc; git-svn info --url added-file)" \
153 = "$svnrepo/added-file"
156 test_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
173 test_expect_success 'info --url added-directory' '
174 test "$(cd gitwc; git-svn info --url added-directory)" \
175 = "$svnrepo/added-directory"
178 test_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
196 test_expect_success 'info --url added-symlink-file' '
197 test "$(cd gitwc; git-svn info --url added-symlink-file)" \
198 = "$svnrepo/added-symlink-file"
201 test_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
219 test_expect_success 'info --url added-symlink-directory' '
220 test "$(cd gitwc; git-svn info --url added-symlink-directory)" \
221 = "$svnrepo/added-symlink-directory"
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.
229 test_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
245 test_expect_success 'info --url file (deleted)' '
246 test "$(cd gitwc; git-svn info --url file)" \
247 = "$svnrepo/file"
250 test_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
266 test_expect_success 'info --url directory (deleted)' '
267 test "$(cd gitwc; git-svn info --url directory)" \
268 = "$svnrepo/directory"
271 test_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
288 test_expect_success 'info --url symlink-file (deleted)' '
289 test "$(cd gitwc; git-svn info --url symlink-file)" \
290 = "$svnrepo/symlink-file"
293 test_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
310 test_expect_success 'info --url symlink-directory (deleted)' '
311 test "$(cd gitwc; git-svn info --url symlink-directory)" \
312 = "$svnrepo/symlink-directory"
315 # NOTE: git does not have the concept of replaced objects,
316 # so we can't test for files in that state.
318 test_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
327 test_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
333 test_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
344 test_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
351 test_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
367 test_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
374 test_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
391 test_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
398 test_done