mercurial/util.py
changeset 2237 4a069064a39b
parent 2220 6d3cc2a982f3
child 2250 45aef5ddcdbe
child 2261 20cf545b4725
equal deleted inserted replaced
2236:d7f866789d7e 2237:4a069064a39b
   683 
   683 
   684     def mktempcopy(name):
   684     def mktempcopy(name):
   685         d, fn = os.path.split(name)
   685         d, fn = os.path.split(name)
   686         fd, temp = tempfile.mkstemp(prefix='.%s-' % fn, dir=d)
   686         fd, temp = tempfile.mkstemp(prefix='.%s-' % fn, dir=d)
   687         os.close(fd)
   687         os.close(fd)
   688         fp = posixfile(temp, "wb")
   688         ofp = posixfile(temp, "wb")
   689         try:
   689         try:
   690             try:
   690             try:
   691                 s = posixfile(name, "rb").read()
   691                 ifp = posixfile(name, "rb")
   692             except IOError, inst:
   692             except IOError, inst:
   693                 if not getattr(inst, 'filename', None):
   693                 if not getattr(inst, 'filename', None):
   694                     inst.filename = name
   694                     inst.filename = name
   695                 raise
   695                 raise
   696             fp.write(s)
   696             for chunk in filechunkiter(ifp):
       
   697                 ofp.write(chunk)
       
   698             ifp.close()
       
   699             ofp.close()
   697         except:
   700         except:
   698             try: os.unlink(temp)
   701             try: os.unlink(temp)
   699             except: pass
   702             except: pass
   700             raise
   703             raise
   701         fp.close()
       
   702         st = os.lstat(name)
   704         st = os.lstat(name)
   703         os.chmod(temp, st.st_mode)
   705         os.chmod(temp, st.st_mode)
   704         return temp
   706         return temp
   705 
   707 
   706     class atomictempfile(posixfile):
   708     class atomictempfile(posixfile):