##// END OF EJS Templates
bundle2: lock the repo during unbundle test...
Pierre-Yves David -
r20946:e9103365 default
parent child Browse files
Show More
@@ -1,404 +1,406 b''
1
1
2 Create an extension to test bundle2 API
2 Create an extension to test bundle2 API
3
3
4 $ cat > bundle2.py << EOF
4 $ cat > bundle2.py << EOF
5 > """A small extension to test bundle2 implementation
5 > """A small extension to test bundle2 implementation
6 >
6 >
7 > Current bundle2 implementation is far too limited to be used in any core
7 > Current bundle2 implementation is far too limited to be used in any core
8 > code. We still need to be able to test it while it grow up.
8 > code. We still need to be able to test it while it grow up.
9 > """
9 > """
10 >
10 >
11 > import sys
11 > import sys
12 > from mercurial import cmdutil
12 > from mercurial import cmdutil
13 > from mercurial import util
13 > from mercurial import util
14 > from mercurial import bundle2
14 > from mercurial import bundle2
15 > cmdtable = {}
15 > cmdtable = {}
16 > command = cmdutil.command(cmdtable)
16 > command = cmdutil.command(cmdtable)
17 >
17 >
18 > ELEPHANTSSONG = """Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
18 > ELEPHANTSSONG = """Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
19 > Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
19 > Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
20 > Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko."""
20 > Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko."""
21 > assert len(ELEPHANTSSONG) == 178 # future test say 178 bytes, trust it.
21 > assert len(ELEPHANTSSONG) == 178 # future test say 178 bytes, trust it.
22 >
22 >
23 > @bundle2.parthandler('test:song')
23 > @bundle2.parthandler('test:song')
24 > def songhandler(repo, part):
24 > def songhandler(repo, part):
25 > """handle a "test:song" bundle2 part, printing the lyrics on stdin"""
25 > """handle a "test:song" bundle2 part, printing the lyrics on stdin"""
26 > repo.ui.write('The choir start singing:\n')
26 > repo.ui.write('The choir start singing:\n')
27 > for line in part.data.split('\n'):
27 > for line in part.data.split('\n'):
28 > repo.ui.write(' %s\n' % line)
28 > repo.ui.write(' %s\n' % line)
29 >
29 >
30 > @command('bundle2',
30 > @command('bundle2',
31 > [('', 'param', [], 'stream level parameter'),
31 > [('', 'param', [], 'stream level parameter'),
32 > ('', 'unknown', False, 'include an unknown mandatory part in the bundle'),
32 > ('', 'unknown', False, 'include an unknown mandatory part in the bundle'),
33 > ('', 'parts', False, 'include some arbitrary parts to the bundle'),],
33 > ('', 'parts', False, 'include some arbitrary parts to the bundle'),],
34 > '[OUTPUTFILE]')
34 > '[OUTPUTFILE]')
35 > def cmdbundle2(ui, repo, path=None, **opts):
35 > def cmdbundle2(ui, repo, path=None, **opts):
36 > """write a bundle2 container on standard ouput"""
36 > """write a bundle2 container on standard ouput"""
37 > bundler = bundle2.bundle20(ui)
37 > bundler = bundle2.bundle20(ui)
38 > for p in opts['param']:
38 > for p in opts['param']:
39 > p = p.split('=', 1)
39 > p = p.split('=', 1)
40 > try:
40 > try:
41 > bundler.addparam(*p)
41 > bundler.addparam(*p)
42 > except ValueError, exc:
42 > except ValueError, exc:
43 > raise util.Abort('%s' % exc)
43 > raise util.Abort('%s' % exc)
44 >
44 >
45 > if opts['parts']:
45 > if opts['parts']:
46 > part = bundle2.part('test:empty')
46 > part = bundle2.part('test:empty')
47 > bundler.addpart(part)
47 > bundler.addpart(part)
48 > # add a second one to make sure we handle multiple parts
48 > # add a second one to make sure we handle multiple parts
49 > part = bundle2.part('test:empty')
49 > part = bundle2.part('test:empty')
50 > bundler.addpart(part)
50 > bundler.addpart(part)
51 > part = bundle2.part('test:song', data=ELEPHANTSSONG)
51 > part = bundle2.part('test:song', data=ELEPHANTSSONG)
52 > bundler.addpart(part)
52 > bundler.addpart(part)
53 > part = bundle2.part('test:math',
53 > part = bundle2.part('test:math',
54 > [('pi', '3.14'), ('e', '2.72')],
54 > [('pi', '3.14'), ('e', '2.72')],
55 > [('cooking', 'raw')],
55 > [('cooking', 'raw')],
56 > '42')
56 > '42')
57 > bundler.addpart(part)
57 > bundler.addpart(part)
58 > if opts['unknown']:
58 > if opts['unknown']:
59 > part = bundle2.part('test:UNKNOWN',
59 > part = bundle2.part('test:UNKNOWN',
60 > data='some random content')
60 > data='some random content')
61 > bundler.addpart(part)
61 > bundler.addpart(part)
62 >
62 >
63 > if path is None:
63 > if path is None:
64 > file = sys.stdout
64 > file = sys.stdout
65 > else:
65 > else:
66 > file = open(path, 'w')
66 > file = open(path, 'w')
67 >
67 >
68 > for chunk in bundler.getchunks():
68 > for chunk in bundler.getchunks():
69 > file.write(chunk)
69 > file.write(chunk)
70 >
70 >
71 > @command('unbundle2', [], '')
71 > @command('unbundle2', [], '')
72 > def cmdunbundle2(ui, repo):
72 > def cmdunbundle2(ui, repo):
73 > """process a bundle2 stream from stdin on the current repo"""
73 > """process a bundle2 stream from stdin on the current repo"""
74 > try:
74 > try:
75 > lock = repo.lock()
75 > try:
76 > try:
76 > bundle2.processbundle(repo, sys.stdin)
77 > bundle2.processbundle(repo, sys.stdin)
77 > except KeyError, exc:
78 > except KeyError, exc:
78 > raise util.Abort('missing support for %s' % exc)
79 > raise util.Abort('missing support for %s' % exc)
79 > finally:
80 > finally:
81 > lock.release()
80 > remains = sys.stdin.read()
82 > remains = sys.stdin.read()
81 > ui.write('%i unread bytes\n' % len(remains))
83 > ui.write('%i unread bytes\n' % len(remains))
82 >
84 >
83 > @command('statbundle2', [], '')
85 > @command('statbundle2', [], '')
84 > def cmdstatbundle2(ui, repo):
86 > def cmdstatbundle2(ui, repo):
85 > """print statistic on the bundle2 container read from stdin"""
87 > """print statistic on the bundle2 container read from stdin"""
86 > unbundler = bundle2.unbundle20(ui, sys.stdin)
88 > unbundler = bundle2.unbundle20(ui, sys.stdin)
87 > try:
89 > try:
88 > params = unbundler.params
90 > params = unbundler.params
89 > except KeyError, exc:
91 > except KeyError, exc:
90 > raise util.Abort('unknown parameters: %s' % exc)
92 > raise util.Abort('unknown parameters: %s' % exc)
91 > ui.write('options count: %i\n' % len(params))
93 > ui.write('options count: %i\n' % len(params))
92 > for key in sorted(params):
94 > for key in sorted(params):
93 > ui.write('- %s\n' % key)
95 > ui.write('- %s\n' % key)
94 > value = params[key]
96 > value = params[key]
95 > if value is not None:
97 > if value is not None:
96 > ui.write(' %s\n' % value)
98 > ui.write(' %s\n' % value)
97 > parts = list(unbundler)
99 > parts = list(unbundler)
98 > ui.write('parts count: %i\n' % len(parts))
100 > ui.write('parts count: %i\n' % len(parts))
99 > for p in parts:
101 > for p in parts:
100 > ui.write(' :%s:\n' % p.type)
102 > ui.write(' :%s:\n' % p.type)
101 > ui.write(' mandatory: %i\n' % len(p.mandatoryparams))
103 > ui.write(' mandatory: %i\n' % len(p.mandatoryparams))
102 > ui.write(' advisory: %i\n' % len(p.advisoryparams))
104 > ui.write(' advisory: %i\n' % len(p.advisoryparams))
103 > ui.write(' payload: %i bytes\n' % len(p.data))
105 > ui.write(' payload: %i bytes\n' % len(p.data))
104 > EOF
106 > EOF
105 $ cat >> $HGRCPATH << EOF
107 $ cat >> $HGRCPATH << EOF
106 > [extensions]
108 > [extensions]
107 > bundle2=$TESTTMP/bundle2.py
109 > bundle2=$TESTTMP/bundle2.py
108 > EOF
110 > EOF
109
111
110 The extension requires a repo (currently unused)
112 The extension requires a repo (currently unused)
111
113
112 $ hg init main
114 $ hg init main
113 $ cd main
115 $ cd main
114 $ touch a
116 $ touch a
115 $ hg add a
117 $ hg add a
116 $ hg commit -m 'a'
118 $ hg commit -m 'a'
117
119
118
120
119 Empty bundle
121 Empty bundle
120 =================
122 =================
121
123
122 - no option
124 - no option
123 - no parts
125 - no parts
124
126
125 Test bundling
127 Test bundling
126
128
127 $ hg bundle2
129 $ hg bundle2
128 HG20\x00\x00\x00\x00 (no-eol) (esc)
130 HG20\x00\x00\x00\x00 (no-eol) (esc)
129
131
130 Test unbundling
132 Test unbundling
131
133
132 $ hg bundle2 | hg statbundle2
134 $ hg bundle2 | hg statbundle2
133 options count: 0
135 options count: 0
134 parts count: 0
136 parts count: 0
135
137
136 Test old style bundle are detected and refused
138 Test old style bundle are detected and refused
137
139
138 $ hg bundle --all ../bundle.hg
140 $ hg bundle --all ../bundle.hg
139 1 changesets found
141 1 changesets found
140 $ hg statbundle2 < ../bundle.hg
142 $ hg statbundle2 < ../bundle.hg
141 abort: unknown bundle version 10
143 abort: unknown bundle version 10
142 [255]
144 [255]
143
145
144 Test parameters
146 Test parameters
145 =================
147 =================
146
148
147 - some options
149 - some options
148 - no parts
150 - no parts
149
151
150 advisory parameters, no value
152 advisory parameters, no value
151 -------------------------------
153 -------------------------------
152
154
153 Simplest possible parameters form
155 Simplest possible parameters form
154
156
155 Test generation simple option
157 Test generation simple option
156
158
157 $ hg bundle2 --param 'caution'
159 $ hg bundle2 --param 'caution'
158 HG20\x00\x07caution\x00\x00 (no-eol) (esc)
160 HG20\x00\x07caution\x00\x00 (no-eol) (esc)
159
161
160 Test unbundling
162 Test unbundling
161
163
162 $ hg bundle2 --param 'caution' | hg statbundle2
164 $ hg bundle2 --param 'caution' | hg statbundle2
163 options count: 1
165 options count: 1
164 - caution
166 - caution
165 parts count: 0
167 parts count: 0
166
168
167 Test generation multiple option
169 Test generation multiple option
168
170
169 $ hg bundle2 --param 'caution' --param 'meal'
171 $ hg bundle2 --param 'caution' --param 'meal'
170 HG20\x00\x0ccaution meal\x00\x00 (no-eol) (esc)
172 HG20\x00\x0ccaution meal\x00\x00 (no-eol) (esc)
171
173
172 Test unbundling
174 Test unbundling
173
175
174 $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
176 $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
175 options count: 2
177 options count: 2
176 - caution
178 - caution
177 - meal
179 - meal
178 parts count: 0
180 parts count: 0
179
181
180 advisory parameters, with value
182 advisory parameters, with value
181 -------------------------------
183 -------------------------------
182
184
183 Test generation
185 Test generation
184
186
185 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants'
187 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants'
186 HG20\x00\x1ccaution meal=vegan elephants\x00\x00 (no-eol) (esc)
188 HG20\x00\x1ccaution meal=vegan elephants\x00\x00 (no-eol) (esc)
187
189
188 Test unbundling
190 Test unbundling
189
191
190 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
192 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
191 options count: 3
193 options count: 3
192 - caution
194 - caution
193 - elephants
195 - elephants
194 - meal
196 - meal
195 vegan
197 vegan
196 parts count: 0
198 parts count: 0
197
199
198 parameter with special char in value
200 parameter with special char in value
199 ---------------------------------------------------
201 ---------------------------------------------------
200
202
201 Test generation
203 Test generation
202
204
203 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
205 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
204 HG20\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00 (no-eol) (esc)
206 HG20\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00 (no-eol) (esc)
205
207
206 Test unbundling
208 Test unbundling
207
209
208 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
210 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
209 options count: 2
211 options count: 2
210 - e|! 7/
212 - e|! 7/
211 babar%#==tutu
213 babar%#==tutu
212 - simple
214 - simple
213 parts count: 0
215 parts count: 0
214
216
215 Test unknown mandatory option
217 Test unknown mandatory option
216 ---------------------------------------------------
218 ---------------------------------------------------
217
219
218 $ hg bundle2 --param 'Gravity' | hg statbundle2
220 $ hg bundle2 --param 'Gravity' | hg statbundle2
219 abort: unknown parameters: 'Gravity'
221 abort: unknown parameters: 'Gravity'
220 [255]
222 [255]
221
223
222 Test debug output
224 Test debug output
223 ---------------------------------------------------
225 ---------------------------------------------------
224
226
225 bundling debug
227 bundling debug
226
228
227 $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2
229 $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2
228 start emission of HG20 stream
230 start emission of HG20 stream
229 bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
231 bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
230 start of parts
232 start of parts
231 end of bundle
233 end of bundle
232
234
233 file content is ok
235 file content is ok
234
236
235 $ cat ../out.hg2
237 $ cat ../out.hg2
236 HG20\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00 (no-eol) (esc)
238 HG20\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00 (no-eol) (esc)
237
239
238 unbundling debug
240 unbundling debug
239
241
240 $ hg statbundle2 --debug < ../out.hg2
242 $ hg statbundle2 --debug < ../out.hg2
241 start processing of HG20 stream
243 start processing of HG20 stream
242 reading bundle2 stream parameters
244 reading bundle2 stream parameters
243 ignoring unknown parameter 'e|! 7/'
245 ignoring unknown parameter 'e|! 7/'
244 ignoring unknown parameter 'simple'
246 ignoring unknown parameter 'simple'
245 options count: 2
247 options count: 2
246 - e|! 7/
248 - e|! 7/
247 babar%#==tutu
249 babar%#==tutu
248 - simple
250 - simple
249 start extraction of bundle2 parts
251 start extraction of bundle2 parts
250 part header size: 0
252 part header size: 0
251 end of bundle2 stream
253 end of bundle2 stream
252 parts count: 0
254 parts count: 0
253
255
254
256
255 Test buggy input
257 Test buggy input
256 ---------------------------------------------------
258 ---------------------------------------------------
257
259
258 empty parameter name
260 empty parameter name
259
261
260 $ hg bundle2 --param '' --quiet
262 $ hg bundle2 --param '' --quiet
261 abort: empty parameter name
263 abort: empty parameter name
262 [255]
264 [255]
263
265
264 bad parameter name
266 bad parameter name
265
267
266 $ hg bundle2 --param 42babar
268 $ hg bundle2 --param 42babar
267 abort: non letter first character: '42babar'
269 abort: non letter first character: '42babar'
268 [255]
270 [255]
269
271
270
272
271 Test part
273 Test part
272 =================
274 =================
273
275
274 $ hg bundle2 --parts ../parts.hg2 --debug
276 $ hg bundle2 --parts ../parts.hg2 --debug
275 start emission of HG20 stream
277 start emission of HG20 stream
276 bundle parameter:
278 bundle parameter:
277 start of parts
279 start of parts
278 bundle part: "test:empty"
280 bundle part: "test:empty"
279 bundle part: "test:empty"
281 bundle part: "test:empty"
280 bundle part: "test:song"
282 bundle part: "test:song"
281 bundle part: "test:math"
283 bundle part: "test:math"
282 end of bundle
284 end of bundle
283
285
284 $ cat ../parts.hg2
286 $ cat ../parts.hg2
285 HG20\x00\x00\x00\r (esc)
287 HG20\x00\x00\x00\r (esc)
286 test:empty\x00\x00\x00\x00\x00\x00\x00\r (esc)
288 test:empty\x00\x00\x00\x00\x00\x00\x00\r (esc)
287 test:empty\x00\x00\x00\x00\x00\x00\x00\x0c test:song\x00\x00\x00\x00\x00\xb2Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko (esc)
289 test:empty\x00\x00\x00\x00\x00\x00\x00\x0c test:song\x00\x00\x00\x00\x00\xb2Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko (esc)
288 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
290 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
289 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.\x00\x00\x00\x00\x00' test:math\x02\x01\x02\x04\x01\x04\x07\x03pi3.14e2.72cookingraw\x00\x00\x00\x0242\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
291 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.\x00\x00\x00\x00\x00' test:math\x02\x01\x02\x04\x01\x04\x07\x03pi3.14e2.72cookingraw\x00\x00\x00\x0242\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
290
292
291
293
292 $ hg statbundle2 < ../parts.hg2
294 $ hg statbundle2 < ../parts.hg2
293 options count: 0
295 options count: 0
294 parts count: 4
296 parts count: 4
295 :test:empty:
297 :test:empty:
296 mandatory: 0
298 mandatory: 0
297 advisory: 0
299 advisory: 0
298 payload: 0 bytes
300 payload: 0 bytes
299 :test:empty:
301 :test:empty:
300 mandatory: 0
302 mandatory: 0
301 advisory: 0
303 advisory: 0
302 payload: 0 bytes
304 payload: 0 bytes
303 :test:song:
305 :test:song:
304 mandatory: 0
306 mandatory: 0
305 advisory: 0
307 advisory: 0
306 payload: 178 bytes
308 payload: 178 bytes
307 :test:math:
309 :test:math:
308 mandatory: 2
310 mandatory: 2
309 advisory: 1
311 advisory: 1
310 payload: 2 bytes
312 payload: 2 bytes
311
313
312 $ hg statbundle2 --debug < ../parts.hg2
314 $ hg statbundle2 --debug < ../parts.hg2
313 start processing of HG20 stream
315 start processing of HG20 stream
314 reading bundle2 stream parameters
316 reading bundle2 stream parameters
315 options count: 0
317 options count: 0
316 start extraction of bundle2 parts
318 start extraction of bundle2 parts
317 part header size: 13
319 part header size: 13
318 part type: "test:empty"
320 part type: "test:empty"
319 part parameters: 0
321 part parameters: 0
320 payload chunk size: 0
322 payload chunk size: 0
321 part header size: 13
323 part header size: 13
322 part type: "test:empty"
324 part type: "test:empty"
323 part parameters: 0
325 part parameters: 0
324 payload chunk size: 0
326 payload chunk size: 0
325 part header size: 12
327 part header size: 12
326 part type: "test:song"
328 part type: "test:song"
327 part parameters: 0
329 part parameters: 0
328 payload chunk size: 178
330 payload chunk size: 178
329 payload chunk size: 0
331 payload chunk size: 0
330 part header size: 39
332 part header size: 39
331 part type: "test:math"
333 part type: "test:math"
332 part parameters: 3
334 part parameters: 3
333 payload chunk size: 2
335 payload chunk size: 2
334 payload chunk size: 0
336 payload chunk size: 0
335 part header size: 0
337 part header size: 0
336 end of bundle2 stream
338 end of bundle2 stream
337 parts count: 4
339 parts count: 4
338 :test:empty:
340 :test:empty:
339 mandatory: 0
341 mandatory: 0
340 advisory: 0
342 advisory: 0
341 payload: 0 bytes
343 payload: 0 bytes
342 :test:empty:
344 :test:empty:
343 mandatory: 0
345 mandatory: 0
344 advisory: 0
346 advisory: 0
345 payload: 0 bytes
347 payload: 0 bytes
346 :test:song:
348 :test:song:
347 mandatory: 0
349 mandatory: 0
348 advisory: 0
350 advisory: 0
349 payload: 178 bytes
351 payload: 178 bytes
350 :test:math:
352 :test:math:
351 mandatory: 2
353 mandatory: 2
352 advisory: 1
354 advisory: 1
353 payload: 2 bytes
355 payload: 2 bytes
354
356
355 Test actual unbundling
357 Test actual unbundling
356 ========================
358 ========================
357
359
358 Process the bundle
360 Process the bundle
359
361
360 $ hg unbundle2 --debug < ../parts.hg2
362 $ hg unbundle2 --debug < ../parts.hg2
361 start processing of HG20 stream
363 start processing of HG20 stream
362 reading bundle2 stream parameters
364 reading bundle2 stream parameters
363 start extraction of bundle2 parts
365 start extraction of bundle2 parts
364 part header size: 13
366 part header size: 13
365 part type: "test:empty"
367 part type: "test:empty"
366 part parameters: 0
368 part parameters: 0
367 payload chunk size: 0
369 payload chunk size: 0
368 ignoring unknown advisory part 'test:empty'
370 ignoring unknown advisory part 'test:empty'
369 part header size: 13
371 part header size: 13
370 part type: "test:empty"
372 part type: "test:empty"
371 part parameters: 0
373 part parameters: 0
372 payload chunk size: 0
374 payload chunk size: 0
373 ignoring unknown advisory part 'test:empty'
375 ignoring unknown advisory part 'test:empty'
374 part header size: 12
376 part header size: 12
375 part type: "test:song"
377 part type: "test:song"
376 part parameters: 0
378 part parameters: 0
377 payload chunk size: 178
379 payload chunk size: 178
378 payload chunk size: 0
380 payload chunk size: 0
379 found an handler for part 'test:song'
381 found an handler for part 'test:song'
380 The choir start singing:
382 The choir start singing:
381 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
383 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
382 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
384 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
383 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
385 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
384 part header size: 39
386 part header size: 39
385 part type: "test:math"
387 part type: "test:math"
386 part parameters: 3
388 part parameters: 3
387 payload chunk size: 2
389 payload chunk size: 2
388 payload chunk size: 0
390 payload chunk size: 0
389 ignoring unknown advisory part 'test:math'
391 ignoring unknown advisory part 'test:math'
390 part header size: 0
392 part header size: 0
391 end of bundle2 stream
393 end of bundle2 stream
392 0 unread bytes
394 0 unread bytes
393
395
394
396
395 $ hg bundle2 --parts --unknown ../unknown.hg2
397 $ hg bundle2 --parts --unknown ../unknown.hg2
396
398
397 $ hg unbundle2 < ../unknown.hg2
399 $ hg unbundle2 < ../unknown.hg2
398 The choir start singing:
400 The choir start singing:
399 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
401 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
400 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
402 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
401 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
403 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
402 0 unread bytes
404 0 unread bytes
403 abort: missing support for 'test:unknown'
405 abort: missing support for 'test:unknown'
404 [255]
406 [255]
General Comments 0
You need to be logged in to leave comments. Login now