Mercurial > public > mercurial-scm > hg
comparison mercurial/bundlerepo.py @ 33887:702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
A future patch will refactor certain parts of bundlerepo initiatlization such
that we need to create temp bundles from another function. Let's move this to
another function to support that.
Differential Revision: https://phab.mercurial-scm.org/D288
author | Durham Goode <durham@fb.com> |
---|---|
date | Wed, 23 Aug 2017 12:34:56 -0700 |
parents | 634997248c97 |
children | 891118dcd279 |
comparison
equal
deleted
inserted
replaced
33886:13dc7f29531e | 33887:702a26fec3e2 |
---|---|
262 pass | 262 pass |
263 return bundlefilespos | 263 return bundlefilespos |
264 | 264 |
265 class bundlerepository(localrepo.localrepository): | 265 class bundlerepository(localrepo.localrepository): |
266 def __init__(self, ui, path, bundlename): | 266 def __init__(self, ui, path, bundlename): |
267 def _writetempbundle(read, suffix, header=''): | |
268 """Write a temporary file to disk | |
269 | |
270 This is closure because we need to make sure this tracked by | |
271 self.tempfile for cleanup purposes.""" | |
272 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-", | |
273 suffix=".hg10un") | |
274 self.tempfile = temp | |
275 | |
276 with os.fdopen(fdtemp, pycompat.sysstr('wb')) as fptemp: | |
277 fptemp.write(header) | |
278 while True: | |
279 chunk = read(2**18) | |
280 if not chunk: | |
281 break | |
282 fptemp.write(chunk) | |
283 | |
284 return self.vfs.open(self.tempfile, mode="rb") | |
285 self._tempparent = None | 267 self._tempparent = None |
286 try: | 268 try: |
287 localrepo.localrepository.__init__(self, ui, path) | 269 localrepo.localrepository.__init__(self, ui, path) |
288 except error.RepoError: | 270 except error.RepoError: |
289 self._tempparent = tempfile.mkdtemp() | 271 self._tempparent = tempfile.mkdtemp() |
312 legalcgvers = changegroup.supportedincomingversions(self) | 294 legalcgvers = changegroup.supportedincomingversions(self) |
313 if version not in legalcgvers: | 295 if version not in legalcgvers: |
314 msg = _('Unsupported changegroup version: %s') | 296 msg = _('Unsupported changegroup version: %s') |
315 raise error.Abort(msg % version) | 297 raise error.Abort(msg % version) |
316 if self.bundle.compressed(): | 298 if self.bundle.compressed(): |
317 cgstream = _writetempbundle(part.read, | 299 cgstream = self._writetempbundle(part.read, |
318 ".cg%sun" % version) | 300 ".cg%sun" % version) |
319 | 301 |
320 if cgstream is None: | 302 if cgstream is None: |
321 raise error.Abort(_('No changegroups found')) | 303 raise error.Abort(_('No changegroups found')) |
322 cgstream.seek(0) | 304 cgstream.seek(0) |
323 | 305 |
324 self.bundle = changegroup.getunbundler(version, cgstream, 'UN') | 306 self.bundle = changegroup.getunbundler(version, cgstream, 'UN') |
325 | 307 |
326 elif self.bundle.compressed(): | 308 elif self.bundle.compressed(): |
327 f = _writetempbundle(self.bundle.read, '.hg10un', header='HG10UN') | 309 f = self._writetempbundle(self.bundle.read, '.hg10un', |
310 header='HG10UN') | |
328 self.bundlefile = self.bundle = exchange.readbundle(ui, f, | 311 self.bundlefile = self.bundle = exchange.readbundle(ui, f, |
329 bundlename, | 312 bundlename, |
330 self.vfs) | 313 self.vfs) |
331 | 314 |
332 # dict with the mapping 'filename' -> position in the bundle | 315 # dict with the mapping 'filename' -> position in the bundle |
333 self.bundlefilespos = {} | 316 self.bundlefilespos = {} |
334 | 317 |
335 self.firstnewrev = self.changelog.repotiprev + 1 | 318 self.firstnewrev = self.changelog.repotiprev + 1 |
336 phases.retractboundary(self, None, phases.draft, | 319 phases.retractboundary(self, None, phases.draft, |
337 [ctx.node() for ctx in self[self.firstnewrev:]]) | 320 [ctx.node() for ctx in self[self.firstnewrev:]]) |
321 | |
322 def _writetempbundle(self, readfn, suffix, header=''): | |
323 """Write a temporary file to disk | |
324 """ | |
325 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-", | |
326 suffix=".hg10un") | |
327 self.tempfile = temp | |
328 | |
329 with os.fdopen(fdtemp, pycompat.sysstr('wb')) as fptemp: | |
330 fptemp.write(header) | |
331 while True: | |
332 chunk = readfn(2**18) | |
333 if not chunk: | |
334 break | |
335 fptemp.write(chunk) | |
336 | |
337 return self.vfs.open(self.tempfile, mode="rb") | |
338 | 338 |
339 @localrepo.unfilteredpropertycache | 339 @localrepo.unfilteredpropertycache |
340 def _phasecache(self): | 340 def _phasecache(self): |
341 return bundlephasecache(self, self._phasedefaults) | 341 return bundlephasecache(self, self._phasedefaults) |
342 | 342 |