Code

git svn info: make info relative to the current directory
[git.git] / t / t9119-git-svn-info.sh
1 #!/bin/sh
2 #
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].*)
13         ;;
14 *)
15         say "skipping svn-info test (SVN version: $v not supported)"
16         test_done
17         ;;
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;
33                 }
34         ' "`svn info $2 | grep '^Text Last Updated:'`" "$1"
35 }
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
64         '
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
70         "
72 test_expect_success 'info --url' '
73         test "$(cd gitwc; git-svn info --url)" = "$svnrepo"
74         '
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
80         "
82 test_expect_success 'info --url .' '
83         test "$(cd gitwc; git-svn info --url .)" = "$svnrepo"
84         '
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
90         "
92 test_expect_success 'info --url file' '
93         test "$(cd gitwc; git-svn info --url file)" = "$svnrepo/file"
94         '
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
100         "
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
106         "
108 test_expect_success 'info --url directory' '
109         test "$(cd gitwc; git-svn info --url directory)" = "$svnrepo/directory"
110         '
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
116         "
118 test_expect_success 'info --url symlink-file' '
119         test "$(cd gitwc; git-svn info --url symlink-file)" \
120              = "$svnrepo/symlink-file"
121         '
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
129         "
131 test_expect_success 'info --url symlink-directory' '
132         test "$(cd gitwc; git-svn info --url symlink-directory)" \
133              = "$svnrepo/symlink-directory"
134         '
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
149         "
151 test_expect_success 'info --url added-file' '
152         test "$(cd gitwc; git-svn info --url added-file)" \
153              = "$svnrepo/added-file"
154         '
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
171         "
173 test_expect_success 'info --url added-directory' '
174         test "$(cd gitwc; git-svn info --url added-directory)" \
175              = "$svnrepo/added-directory"
176         '
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
194         "
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"
199         '
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
217         "
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"
222         '
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
243         "
245 test_expect_success 'info --url file (deleted)' '
246         test "$(cd gitwc; git-svn info --url file)" \
247              = "$svnrepo/file"
248         '
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
264         "
266 test_expect_success 'info --url directory (deleted)' '
267         test "$(cd gitwc; git-svn info --url directory)" \
268              = "$svnrepo/directory"
269         '
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
286         "
288 test_expect_success 'info --url symlink-file (deleted)' '
289         test "$(cd gitwc; git-svn info --url symlink-file)" \
290              = "$svnrepo/symlink-file"
291         '
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
308         "
310 test_expect_success 'info --url symlink-directory (deleted)' '
311         test "$(cd gitwc; git-svn info --url symlink-directory)" \
312              = "$svnrepo/symlink-directory"
313         '
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
325         "
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
331         '
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
342         "
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
349         '
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
365         "
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
372         '
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
389         "
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
396         '
398 test_done