diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py --- a/mercurial/bundlerepo.py +++ b/mercurial/bundlerepo.py @@ -264,24 +264,6 @@ class bundlerepository(localrepo.localrepository): def __init__(self, ui, path, bundlename): - def _writetempbundle(read, suffix, header=''): - """Write a temporary file to disk - - This is closure because we need to make sure this tracked by - self.tempfile for cleanup purposes.""" - fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-", - suffix=".hg10un") - self.tempfile = temp - - with os.fdopen(fdtemp, pycompat.sysstr('wb')) as fptemp: - fptemp.write(header) - while True: - chunk = read(2**18) - if not chunk: - break - fptemp.write(chunk) - - return self.vfs.open(self.tempfile, mode="rb") self._tempparent = None try: localrepo.localrepository.__init__(self, ui, path) @@ -314,8 +296,8 @@ msg = _('Unsupported changegroup version: %s') raise error.Abort(msg % version) if self.bundle.compressed(): - cgstream = _writetempbundle(part.read, - ".cg%sun" % version) + cgstream = self._writetempbundle(part.read, + ".cg%sun" % version) if cgstream is None: raise error.Abort(_('No changegroups found')) @@ -324,7 +306,8 @@ self.bundle = changegroup.getunbundler(version, cgstream, 'UN') elif self.bundle.compressed(): - f = _writetempbundle(self.bundle.read, '.hg10un', header='HG10UN') + f = self._writetempbundle(self.bundle.read, '.hg10un', + header='HG10UN') self.bundlefile = self.bundle = exchange.readbundle(ui, f, bundlename, self.vfs) @@ -336,6 +319,23 @@ phases.retractboundary(self, None, phases.draft, [ctx.node() for ctx in self[self.firstnewrev:]]) + def _writetempbundle(self, readfn, suffix, header=''): + """Write a temporary file to disk + """ + fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-", + suffix=".hg10un") + self.tempfile = temp + + with os.fdopen(fdtemp, pycompat.sysstr('wb')) as fptemp: + fptemp.write(header) + while True: + chunk = readfn(2**18) + if not chunk: + break + fptemp.write(chunk) + + return self.vfs.open(self.tempfile, mode="rb") + @localrepo.unfilteredpropertycache def _phasecache(self): return bundlephasecache(self, self._phasedefaults)