3 test_description='check svn dumpfile importer'
17 printf "%s\n" "K ${#property}" &&
18 printf "%s\n" "$property" &&
19 printf "%s\n" "V ${#value}" &&
20 printf "%s\n" "$value" &&
29 printf "%s\n" "Prop-content-length: 10" &&
30 printf "%s\n" "Text-content-length: ${#text}" &&
31 printf "%s\n" "Content-length: $((${#text} + 10))" &&
32 printf "%s\n" "" "PROPS-END" &&
38 test_expect_success 'empty dump' '
40 echo "SVN-fs-dump-format-version: 2" >input &&
41 test-svn-fe input >stream &&
42 git fast-import <stream
45 test_expect_success 'v4 dumps not supported' '
47 echo "SVN-fs-dump-format-version: 4" >v4.dump &&
48 test_must_fail test-svn-fe v4.dump >stream &&
52 test_expect_failure 'empty revision' '
54 printf "rev <nobody, nobody@local>: %s\n" "" "" >expect &&
55 cat >emptyrev.dump <<-\EOF &&
56 SVN-fs-dump-format-version: 3
59 Prop-content-length: 0
63 Prop-content-length: 0
67 test-svn-fe emptyrev.dump >stream &&
68 git fast-import <stream &&
69 git log -p --format="rev <%an, %ae>: %s" HEAD >actual &&
70 test_cmp expect actual
73 test_expect_success 'empty properties' '
75 printf "rev <nobody, nobody@local>: %s\n" "" "" >expect &&
76 cat >emptyprop.dump <<-\EOF &&
77 SVN-fs-dump-format-version: 3
80 Prop-content-length: 10
86 Prop-content-length: 10
91 test-svn-fe emptyprop.dump >stream &&
92 git fast-import <stream &&
93 git log -p --format="rev <%an, %ae>: %s" HEAD >actual &&
94 test_cmp expect actual
97 test_expect_success 'author name and commit message' '
99 echo "<author@example.com, author@example.com@local>" >expect.author &&
100 cat >message <<-\EOF &&
101 A concise summary of the change
103 A detailed description of the change, why it is needed, what
104 was broken and why applying this is the best course of action.
107 Details pertaining to an individual file.
111 svn:author author@example.com \
112 svn:log "$(cat message)" &&
116 echo "SVN-fs-dump-format-version: 3" &&
118 echo "Revision-number: 1" &&
119 echo Prop-content-length: $(wc -c <props) &&
120 echo Content-length: $(wc -c <props) &&
124 test-svn-fe log.dump >stream &&
125 git fast-import <stream &&
126 git log -p --format="%B" HEAD >actual.log &&
127 git log --format="<%an, %ae>" >actual.author &&
128 test_cmp message actual.log &&
129 test_cmp expect.author actual.author
132 test_expect_success 'unsupported properties are ignored' '
134 echo author >expect &&
135 cat >extraprop.dump <<-\EOF &&
136 SVN-fs-dump-format-version: 3
139 Prop-content-length: 56
152 test-svn-fe extraprop.dump >stream &&
153 git fast-import <stream &&
154 git log -p --format=%an HEAD >actual &&
155 test_cmp expect actual
158 test_expect_failure 'timestamp and empty file' '
159 echo author@example.com >expect.author &&
160 echo 1999-01-01 >expect.date &&
161 echo file >expect.files &&
165 svn:author author@example.com \
166 svn:date "1999-01-01T00:01:002.000000Z" \
167 svn:log "add empty file" &&
172 SVN-fs-dump-format-version: 3
176 echo Prop-content-length: $(wc -c <props) &&
177 echo Content-length: $(wc -c <props) &&
182 Node-path: empty-file
189 test-svn-fe emptyfile.dump >stream &&
190 git fast-import <stream &&
191 git log --format=%an HEAD >actual.author &&
192 git log --date=short --format=%ad HEAD >actual.date &&
193 git ls-tree -r --name-only HEAD >actual.files &&
194 test_cmp expect.author actual.author &&
195 test_cmp expect.date actual.date &&
196 test_cmp expect.files actual.files &&
197 git checkout HEAD empty-file &&
201 test_expect_success 'directory with files' '
203 printf "%s\n" directory/file1 directory/file2 >expect.files &&
208 svn:author author@example.com \
209 svn:date "1999-02-01T00:01:002.000000Z" \
210 svn:log "add directory with some files in it" &&
215 SVN-fs-dump-format-version: 3
219 echo Prop-content-length: $(wc -c <props) &&
220 echo Content-length: $(wc -c <props) &&
228 Prop-content-length: 10
233 Node-path: directory/file1
237 text_no_props hello &&
239 Node-path: directory/file2
245 test-svn-fe directory.dump >stream &&
246 git fast-import <stream &&
248 git ls-tree -r --name-only HEAD >actual.files &&
249 git checkout HEAD directory &&
250 test_cmp expect.files actual.files &&
251 test_cmp hello directory/file1 &&
252 test_cmp hi directory/file2
255 test_expect_success 'deltas not supported' '
257 # (old) h + (inline) ello + (old) \n
258 printf "SVNQ%b%b%s" "Q\003\006\005\004" "\001Q\0204\001\002" "ello" |
263 svn:author author@example.com \
264 svn:date "1999-01-05T00:01:002.000000Z" \
265 svn:log "add greeting" &&
270 svn:author author@example.com \
271 svn:date "1999-01-06T00:01:002.000000Z" \
272 svn:log "change it" &&
276 echo SVN-fs-dump-format-version: 3 &&
278 echo Revision-number: 1 &&
279 echo Prop-content-length: $(wc -c <props) &&
280 echo Content-length: $(wc -c <props) &&
288 Prop-content-length: 10
289 Text-content-length: 3
296 echo Revision-number: 2 &&
297 echo Prop-content-length: $(wc -c <props2) &&
298 echo Content-length: $(wc -c <props2) &&
307 Prop-content-length: 10
309 echo Text-content-length: $(wc -c <delta) &&
310 echo Content-length: $((10 + $(wc -c <delta))) &&
315 test_must_fail test-svn-fe delta.dump
318 test_expect_success 'property deltas not supported' '
321 svn:author author@example.com \
322 svn:date "1999-03-06T00:01:002.000000Z" \
323 svn:log "make an executable, or chmod -x it" &&
327 echo SVN-fs-dump-format-version: 3 &&
329 echo Revision-number: 1 &&
330 echo Prop-content-length: $(wc -c <revprops) &&
331 echo Content-length: $(wc -c <revprops) &&
339 Text-content-length: 0
340 Prop-content-length: 39
350 echo Revision-number: 2 &&
351 echo Prop-content-length: $(wc -c <revprops) &&
352 echo Content-length: $(wc -c <revprops) &&
361 Prop-content-length: 30
369 test_must_fail test-svn-fe propdelta.dump
372 test_expect_success 't9135/svn.dump' '
373 svnadmin create simple-svn &&
374 svnadmin load simple-svn <"$TEST_DIRECTORY/t9135/svn.dump" &&
375 svn_cmd export "file://$PWD/simple-svn" simple-svnco &&
376 git init simple-git &&
377 test-svn-fe "$TEST_DIRECTORY/t9135/svn.dump" >simple.fe &&
380 git fast-import <../simple.fe
386 git fetch ../simple-git master &&
387 git diff --exit-code FETCH_HEAD