Show More
@@ -187,6 +187,59 b' def readbundle(ui, fh, fname, vfs=None):' | |||
|
187 | 187 | else: |
|
188 | 188 | raise error.Abort(_('%s: unknown bundle version %s') % (fname, version)) |
|
189 | 189 | |
|
190 | def getbundlespec(ui, fh): | |
|
191 | """Infer the bundlespec from a bundle file handle. | |
|
192 | ||
|
193 | The input file handle is seeked and the original seek position is not | |
|
194 | restored. | |
|
195 | """ | |
|
196 | def speccompression(alg): | |
|
197 | for k, v in _bundlespeccompressions.items(): | |
|
198 | if v == alg: | |
|
199 | return k | |
|
200 | return None | |
|
201 | ||
|
202 | b = readbundle(ui, fh, None) | |
|
203 | if isinstance(b, changegroup.cg1unpacker): | |
|
204 | alg = b._type | |
|
205 | if alg == '_truncatedBZ': | |
|
206 | alg = 'BZ' | |
|
207 | comp = speccompression(alg) | |
|
208 | if not comp: | |
|
209 | raise error.Abort(_('unknown compression algorithm: %s') % alg) | |
|
210 | return '%s-v1' % comp | |
|
211 | elif isinstance(b, bundle2.unbundle20): | |
|
212 | if 'Compression' in b.params: | |
|
213 | comp = speccompression(b.params['Compression']) | |
|
214 | if not comp: | |
|
215 | raise error.Abort(_('unknown compression algorithm: %s') % comp) | |
|
216 | else: | |
|
217 | comp = 'none' | |
|
218 | ||
|
219 | version = None | |
|
220 | for part in b.iterparts(): | |
|
221 | if part.type == 'changegroup': | |
|
222 | version = part.params['version'] | |
|
223 | if version in ('01', '02'): | |
|
224 | version = 'v2' | |
|
225 | else: | |
|
226 | raise error.Abort(_('changegroup version %s does not have ' | |
|
227 | 'a known bundlespec') % version, | |
|
228 | hint=_('try upgrading your Mercurial ' | |
|
229 | 'client')) | |
|
230 | ||
|
231 | if not version: | |
|
232 | raise error.Abort(_('could not identify changegroup version in ' | |
|
233 | 'bundle')) | |
|
234 | ||
|
235 | return '%s-%s' % (comp, version) | |
|
236 | elif isinstance(b, streamclone.streamcloneapplier): | |
|
237 | requirements = streamclone.readbundle1header(fh)[2] | |
|
238 | params = 'requirements=%s' % ','.join(sorted(requirements)) | |
|
239 | return 'none-packed1;%s' % urllib.quote(params) | |
|
240 | else: | |
|
241 | raise error.Abort(_('unknown bundle type: %s') % b) | |
|
242 | ||
|
190 | 243 | def buildobsmarkerspart(bundler, markers): |
|
191 | 244 | """add an obsmarker part to the bundler with <markers> |
|
192 | 245 |
General Comments 0
You need to be logged in to leave comments.
Login now