Fix race condition in t9119-git-svn-info.sh
[git/mingw.git] / t / t9119-git-svn-info.sh
blob964011ebaf10790d214b8ed6987bb82526df18c0
1 #!/bin/sh
3 # Copyright (c) 2007 David D. Kilzer
5 test_description='git-svn info'
7 . ./lib-git-svn.sh
8 say 'skipping svn-info test (has a race undiagnosed yet)'
9 test_done
11 ptouch() {
12 perl -w -e '
13 use strict;
14 use POSIX qw(mktime);
15 die "ptouch requires exactly 2 arguments" if @ARGV != 2;
16 my $text_last_updated = shift @ARGV;
17 my $git_file = shift @ARGV;
18 die "\"$git_file\" does not exist" if ! -e $git_file;
19 if ($text_last_updated
20 =~ /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/) {
21 my $mtime = mktime($6, $5, $4, $3, $2 - 1, $1 - 1900);
22 my $atime = $mtime;
23 utime $atime, $mtime, $git_file;
25 ' "`svn info $2 | grep '^Text Last Updated:'`" "$1"
28 test_expect_success 'setup repository and import' "
29 mkdir info &&
30 cd info &&
31 echo FIRST > A &&
32 echo one > file &&
33 ln -s file symlink-file &&
34 mkdir directory &&
35 touch directory/.placeholder &&
36 ln -s directory symlink-directory &&
37 svn import -m 'initial' . $svnrepo &&
38 cd .. &&
39 mkdir gitwc &&
40 cd gitwc &&
41 git-svn init $svnrepo &&
42 git-svn fetch &&
43 cd .. &&
44 svn co $svnrepo svnwc &&
45 ptouch svnwc/file gitwc/file &&
46 ptouch svnwc/directory gitwc/directory &&
47 ptouch svnwc/symlink-file gitwc/symlink-file &&
48 ptouch svnwc/symlink-directory gitwc/symlink-directory
51 test_expect_success 'info' "
52 (cd svnwc; svn info) > expected.info &&
53 (cd gitwc; git-svn info) > actual.info &&
54 git-diff expected.info actual.info
57 test_expect_success 'info --url' '
58 test $(cd gitwc; git-svn info --url) = $svnrepo
61 test_expect_success 'info .' "
62 (cd svnwc; svn info .) > expected.info-dot &&
63 (cd gitwc; git-svn info .) > actual.info-dot &&
64 git-diff expected.info-dot actual.info-dot
67 test_expect_success 'info --url .' '
68 test $(cd gitwc; git-svn info --url .) = $svnrepo
71 test_expect_success 'info file' "
72 (cd svnwc; svn info file) > expected.info-file &&
73 (cd gitwc; git-svn info file) > actual.info-file &&
74 git-diff expected.info-file actual.info-file
77 test_expect_success 'info --url file' '
78 test $(cd gitwc; git-svn info --url file) = "$svnrepo/file"
81 test_expect_success 'info directory' "
82 (cd svnwc; svn info directory) > expected.info-directory &&
83 (cd gitwc; git-svn info directory) > actual.info-directory &&
84 git-diff expected.info-directory actual.info-directory
87 test_expect_success 'info --url directory' '
88 test $(cd gitwc; git-svn info --url directory) = "$svnrepo/directory"
91 test_expect_success 'info symlink-file' "
92 (cd svnwc; svn info symlink-file) > expected.info-symlink-file &&
93 (cd gitwc; git-svn info symlink-file) > actual.info-symlink-file &&
94 git-diff expected.info-symlink-file actual.info-symlink-file
97 test_expect_success 'info --url symlink-file' '
98 test $(cd gitwc; git-svn info --url symlink-file) \
99 = "$svnrepo/symlink-file"
102 test_expect_success 'info symlink-directory' "
103 (cd svnwc; svn info symlink-directory) \
104 > expected.info-symlink-directory &&
105 (cd gitwc; git-svn info symlink-directory) \
106 > actual.info-symlink-directory &&
107 git-diff expected.info-symlink-directory actual.info-symlink-directory
110 test_expect_success 'info --url symlink-directory' '
111 test $(cd gitwc; git-svn info --url symlink-directory) \
112 = "$svnrepo/symlink-directory"
115 test_expect_success 'info added-file' "
116 echo two > gitwc/added-file &&
117 cd gitwc &&
118 git add added-file &&
119 cd .. &&
120 cp gitwc/added-file svnwc/added-file &&
121 ptouch gitwc/added-file svnwc/added-file &&
122 cd svnwc &&
123 svn add added-file > /dev/null &&
124 cd .. &&
125 (cd svnwc; svn info added-file) > expected.info-added-file &&
126 (cd gitwc; git-svn info added-file) > actual.info-added-file &&
127 git-diff expected.info-added-file actual.info-added-file
130 test_expect_success 'info --url added-file' '
131 test $(cd gitwc; git-svn info --url added-file) \
132 = "$svnrepo/added-file"
135 test_expect_success 'info added-directory' "
136 mkdir gitwc/added-directory svnwc/added-directory &&
137 ptouch gitwc/added-directory svnwc/added-directory &&
138 touch gitwc/added-directory/.placeholder &&
139 cd svnwc &&
140 svn add added-directory > /dev/null &&
141 cd .. &&
142 cd gitwc &&
143 git add added-directory &&
144 cd .. &&
145 (cd svnwc; svn info added-directory) \
146 > expected.info-added-directory &&
147 (cd gitwc; git-svn info added-directory) \
148 > actual.info-added-directory &&
149 git-diff expected.info-added-directory actual.info-added-directory
152 test_expect_success 'info --url added-directory' '
153 test $(cd gitwc; git-svn info --url added-directory) \
154 = "$svnrepo/added-directory"
157 test_expect_success 'info added-symlink-file' "
158 cd gitwc &&
159 ln -s added-file added-symlink-file &&
160 git add added-symlink-file &&
161 cd .. &&
162 cd svnwc &&
163 ln -s added-file added-symlink-file &&
164 svn add added-symlink-file > /dev/null &&
165 cd .. &&
166 ptouch gitwc/added-symlink-file svnwc/added-symlink-file &&
167 (cd svnwc; svn info added-symlink-file) \
168 > expected.info-added-symlink-file &&
169 (cd gitwc; git-svn info added-symlink-file) \
170 > actual.info-added-symlink-file &&
171 git-diff expected.info-added-symlink-file \
172 actual.info-added-symlink-file
175 test_expect_success 'info --url added-symlink-file' '
176 test $(cd gitwc; git-svn info --url added-symlink-file) \
177 = "$svnrepo/added-symlink-file"
180 test_expect_success 'info added-symlink-directory' "
181 cd gitwc &&
182 ln -s added-directory added-symlink-directory &&
183 git add added-symlink-directory &&
184 cd .. &&
185 cd svnwc &&
186 ln -s added-directory added-symlink-directory &&
187 svn add added-symlink-directory > /dev/null &&
188 cd .. &&
189 ptouch gitwc/added-symlink-directory svnwc/added-symlink-directory &&
190 (cd svnwc; svn info added-symlink-directory) \
191 > expected.info-added-symlink-directory &&
192 (cd gitwc; git-svn info added-symlink-directory) \
193 > actual.info-added-symlink-directory &&
194 git-diff expected.info-added-symlink-directory \
195 actual.info-added-symlink-directory
198 test_expect_success 'info --url added-symlink-directory' '
199 test $(cd gitwc; git-svn info --url added-symlink-directory) \
200 = "$svnrepo/added-symlink-directory"
203 # The next few tests replace the "Text Last Updated" value with a
204 # placeholder since git doesn't have a way to know the date that a
205 # now-deleted file was last checked out locally. Internally it
206 # simply reuses the Last Changed Date.
208 test_expect_success 'info deleted-file' "
209 cd gitwc &&
210 git rm -f file > /dev/null &&
211 cd .. &&
212 cd svnwc &&
213 svn rm --force file > /dev/null &&
214 cd .. &&
215 (cd svnwc; svn info file) |
216 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
217 > expected.info-deleted-file &&
218 (cd gitwc; git-svn info file) |
219 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
220 > actual.info-deleted-file &&
221 git-diff expected.info-deleted-file actual.info-deleted-file
224 test_expect_success 'info --url file (deleted)' '
225 test $(cd gitwc; git-svn info --url file) \
226 = "$svnrepo/file"
229 test_expect_success 'info deleted-directory' "
230 cd gitwc &&
231 git rm -r -f directory > /dev/null &&
232 cd .. &&
233 cd svnwc &&
234 svn rm --force directory > /dev/null &&
235 cd .. &&
236 (cd svnwc; svn info directory) |
237 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
238 > expected.info-deleted-directory &&
239 (cd gitwc; git-svn info directory) |
240 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
241 > actual.info-deleted-directory &&
242 git-diff expected.info-deleted-directory actual.info-deleted-directory
245 test_expect_success 'info --url directory (deleted)' '
246 test $(cd gitwc; git-svn info --url directory) \
247 = "$svnrepo/directory"
250 test_expect_success 'info deleted-symlink-file' "
251 cd gitwc &&
252 git rm -f symlink-file > /dev/null &&
253 cd .. &&
254 cd svnwc &&
255 svn rm --force symlink-file > /dev/null &&
256 cd .. &&
257 (cd svnwc; svn info symlink-file) |
258 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
259 > expected.info-deleted-symlink-file &&
260 (cd gitwc; git-svn info symlink-file) |
261 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
262 > actual.info-deleted-symlink-file &&
263 git-diff expected.info-deleted-symlink-file \
264 actual.info-deleted-symlink-file
267 test_expect_success 'info --url symlink-file (deleted)' '
268 test $(cd gitwc; git-svn info --url symlink-file) \
269 = "$svnrepo/symlink-file"
272 test_expect_success 'info deleted-symlink-directory' "
273 cd gitwc &&
274 git rm -f symlink-directory > /dev/null &&
275 cd .. &&
276 cd svnwc &&
277 svn rm --force symlink-directory > /dev/null &&
278 cd .. &&
279 (cd svnwc; svn info symlink-directory) |
280 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
281 > expected.info-deleted-symlink-directory &&
282 (cd gitwc; git-svn info symlink-directory) |
283 sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
284 > actual.info-deleted-symlink-directory &&
285 git-diff expected.info-deleted-symlink-directory \
286 actual.info-deleted-symlink-directory
289 test_expect_success 'info --url symlink-directory (deleted)' '
290 test $(cd gitwc; git-svn info --url symlink-directory) \
291 = "$svnrepo/symlink-directory"
294 # NOTE: git does not have the concept of replaced objects,
295 # so we can't test for files in that state.
297 test_expect_success 'info unknown-file' "
298 echo two > gitwc/unknown-file &&
299 cp gitwc/unknown-file svnwc/unknown-file &&
300 ptouch gitwc/unknown-file svnwc/unknown-file &&
301 (cd svnwc; svn info unknown-file) 2> expected.info-unknown-file &&
302 (cd gitwc; git-svn info unknown-file) 2> actual.info-unknown-file &&
303 git-diff expected.info-unknown-file actual.info-unknown-file
306 test_expect_success 'info --url unknown-file' '
307 test -z $(cd gitwc; git-svn info --url unknown-file \
308 2> ../actual.info--url-unknown-file) &&
309 git-diff expected.info-unknown-file actual.info--url-unknown-file
312 test_expect_success 'info unknown-directory' "
313 mkdir gitwc/unknown-directory svnwc/unknown-directory &&
314 ptouch gitwc/unknown-directory svnwc/unknown-directory &&
315 touch gitwc/unknown-directory/.placeholder &&
316 (cd svnwc; svn info unknown-directory) \
317 2> expected.info-unknown-directory &&
318 (cd gitwc; git-svn info unknown-directory) \
319 2> actual.info-unknown-directory &&
320 git-diff expected.info-unknown-directory actual.info-unknown-directory
323 test_expect_success 'info --url unknown-directory' '
324 test -z $(cd gitwc; git-svn info --url unknown-directory \
325 2> ../actual.info--url-unknown-directory) &&
326 git-diff expected.info-unknown-directory \
327 actual.info--url-unknown-directory
330 test_expect_success 'info unknown-symlink-file' "
331 cd gitwc &&
332 ln -s unknown-file unknown-symlink-file &&
333 cd .. &&
334 cd svnwc &&
335 ln -s unknown-file unknown-symlink-file &&
336 cd .. &&
337 ptouch gitwc/unknown-symlink-file svnwc/unknown-symlink-file &&
338 (cd svnwc; svn info unknown-symlink-file) \
339 2> expected.info-unknown-symlink-file &&
340 (cd gitwc; git-svn info unknown-symlink-file) \
341 2> actual.info-unknown-symlink-file &&
342 git-diff expected.info-unknown-symlink-file \
343 actual.info-unknown-symlink-file
346 test_expect_success 'info --url unknown-symlink-file' '
347 test -z $(cd gitwc; git-svn info --url unknown-symlink-file \
348 2> ../actual.info--url-unknown-symlink-file) &&
349 git-diff expected.info-unknown-symlink-file \
350 actual.info--url-unknown-symlink-file
353 test_expect_success 'info unknown-symlink-directory' "
354 cd gitwc &&
355 ln -s unknown-directory unknown-symlink-directory &&
356 cd .. &&
357 cd svnwc &&
358 ln -s unknown-directory unknown-symlink-directory &&
359 cd .. &&
360 ptouch gitwc/unknown-symlink-directory \
361 svnwc/unknown-symlink-directory &&
362 (cd svnwc; svn info unknown-symlink-directory) \
363 2> expected.info-unknown-symlink-directory &&
364 (cd gitwc; git-svn info unknown-symlink-directory) \
365 2> actual.info-unknown-symlink-directory &&
366 git-diff expected.info-unknown-symlink-directory \
367 actual.info-unknown-symlink-directory
370 test_expect_success 'info --url unknown-symlink-directory' '
371 test -z $(cd gitwc; git-svn info --url unknown-symlink-directory \
372 2> ../actual.info--url-unknown-symlink-directory) &&
373 git-diff expected.info-unknown-symlink-directory \
374 actual.info--url-unknown-symlink-directory
377 test_done