##// END OF EJS Templates
bundlerepo: move temp-bundle writing logic into a closure...
Pierre-Yves David -
r26800:7cac6ee4 default
parent child Browse files
Show More
@@ -237,6 +237,27 b' class bundlephasecache(phases.phasecache'
237
237
238 class bundlerepository(localrepo.localrepository):
238 class bundlerepository(localrepo.localrepository):
239 def __init__(self, ui, path, bundlename):
239 def __init__(self, ui, path, bundlename):
240 def _writetempbundle(read, suffix, header=''):
241 """Write a temporary file to disk
242
243 This is closure because we need to make sure this tracked by
244 self.tempfile for cleanup purposes."""
245 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-",
246 suffix=".hg10un")
247 self.tempfile = temp
248 fptemp = os.fdopen(fdtemp, 'wb')
249
250 try:
251 fptemp.write(header)
252 while True:
253 chunk = read(2**18)
254 if not chunk:
255 break
256 fptemp.write(chunk)
257 finally:
258 fptemp.close()
259
260 return self.vfs.open(self.tempfile, mode="rb")
240 self._tempparent = None
261 self._tempparent = None
241 try:
262 try:
242 localrepo.localrepository.__init__(self, ui, path)
263 localrepo.localrepository.__init__(self, ui, path)
@@ -255,22 +276,7 b' class bundlerepository(localrepo.localre'
255 f = util.posixfile(bundlename, "rb")
276 f = util.posixfile(bundlename, "rb")
256 self.bundlefile = self.bundle = exchange.readbundle(ui, f, bundlename)
277 self.bundlefile = self.bundle = exchange.readbundle(ui, f, bundlename)
257 if self.bundle.compressed():
278 if self.bundle.compressed():
258 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-",
279 f = _writetempbundle(self.bundle.read, '.hg10un', header='HG10UN')
259 suffix=".hg10un")
260 self.tempfile = temp
261 fptemp = os.fdopen(fdtemp, 'wb')
262
263 try:
264 fptemp.write("HG10UN")
265 while True:
266 chunk = self.bundle.read(2**18)
267 if not chunk:
268 break
269 fptemp.write(chunk)
270 finally:
271 fptemp.close()
272
273 f = self.vfs.open(self.tempfile, mode="rb")
274 self.bundlefile = self.bundle = exchange.readbundle(ui, f,
280 self.bundlefile = self.bundle = exchange.readbundle(ui, f,
275 bundlename,
281 bundlename,
276 self.vfs)
282 self.vfs)
General Comments 0
You need to be logged in to leave comments. Login now