]> asedeno.scripts.mit.edu Git - git.git/blob - t/t9119-git-svn-info.sh
Fix race condition in t9119-git-svn-info.sh
[git.git] / t / t9119-git-svn-info.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 David D. Kilzer
4
5 test_description='git-svn info'
6
7 . ./lib-git-svn.sh
8 say 'skipping svn-info test (has a race undiagnosed yet)'
9 test_done
10
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;
24                 }
25         ' "`svn info $2 | grep '^Text Last Updated:'`" "$1"
26 }
27
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
49         "
50
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
55         "
56
57 test_expect_success 'info --url' '
58         test $(cd gitwc; git-svn info --url) = $svnrepo
59         '
60
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
65         "
66
67 test_expect_success 'info --url .' '
68         test $(cd gitwc; git-svn info --url .) = $svnrepo
69         '
70
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
75         "
76
77 test_expect_success 'info --url file' '
78         test $(cd gitwc; git-svn info --url file) = "$svnrepo/file"
79         '
80
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
85         "
86
87 test_expect_success 'info --url directory' '
88         test $(cd gitwc; git-svn info --url directory) = "$svnrepo/directory"
89         '
90
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
95         "
96
97 test_expect_success 'info --url symlink-file' '
98         test $(cd gitwc; git-svn info --url symlink-file) \
99              = "$svnrepo/symlink-file"
100         '
101
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
108         "
109
110 test_expect_success 'info --url symlink-directory' '
111         test $(cd gitwc; git-svn info --url symlink-directory) \
112              = "$svnrepo/symlink-directory"
113         '
114
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
128         "
129
130 test_expect_success 'info --url added-file' '
131         test $(cd gitwc; git-svn info --url added-file) \
132              = "$svnrepo/added-file"
133         '
134
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
150         "
151
152 test_expect_success 'info --url added-directory' '
153         test $(cd gitwc; git-svn info --url added-directory) \
154              = "$svnrepo/added-directory"
155         '
156
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
173         "
174
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"
178         '
179
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
196         "
197
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"
201         '
202
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.
207
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
222         "
223
224 test_expect_success 'info --url file (deleted)' '
225         test $(cd gitwc; git-svn info --url file) \
226              = "$svnrepo/file"
227         '
228
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
243         "
244
245 test_expect_success 'info --url directory (deleted)' '
246         test $(cd gitwc; git-svn info --url directory) \
247              = "$svnrepo/directory"
248         '
249
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
265         "
266
267 test_expect_success 'info --url symlink-file (deleted)' '
268         test $(cd gitwc; git-svn info --url symlink-file) \
269              = "$svnrepo/symlink-file"
270         '
271
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
287         "
288
289 test_expect_success 'info --url symlink-directory (deleted)' '
290         test $(cd gitwc; git-svn info --url symlink-directory) \
291              = "$svnrepo/symlink-directory"
292         '
293
294 # NOTE: git does not have the concept of replaced objects,
295 # so we can't test for files in that state.
296
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
304         "
305
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
310         '
311
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
321         "
322
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
328         '
329
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
344         "
345
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
351         '
352
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
368         "
369
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
375         '
376
377 test_done