Mercurial > public > mercurial-scm > hg
diff mercurial/appendfile.py @ 2176:9b42304d9896
fix file handling bugs on windows.
add util.posixfile class that has posix semantics on windows.
fix util.rename so it works with stupid windows delete semantics.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Tue, 02 May 2006 14:30:00 -0700 |
parents | c62112815801 |
children | 6886bc0b77af |
line wrap: on
line diff
--- a/mercurial/appendfile.py Tue Apr 25 23:28:40 2006 +0200 +++ b/mercurial/appendfile.py Tue May 02 14:30:00 2006 -0700 @@ -6,7 +6,7 @@ # of the GNU General Public License, incorporated herein by reference. from demandload import * -demandload(globals(), "cStringIO changelog errno manifest os tempfile") +demandload(globals(), "cStringIO changelog errno manifest os tempfile util") # writes to metadata files are ordered. reads: changelog, manifest, # normal files. writes: normal files, manifest, changelog. @@ -36,19 +36,21 @@ def __init__(self, fp, tmpname): if tmpname: self.tmpname = tmpname - self.tmpfp = open(self.tmpname, 'ab+') + self.tmpfp = util.posixfile(self.tmpname, 'ab+') else: fd, self.tmpname = tempfile.mkstemp() - self.tmpfp = os.fdopen(fd, 'ab+') + os.close(fd) + self.tmpfp = util.posixfile(self.tmpname, 'ab+') self.realfp = fp self.offset = fp.tell() # real file is not written by anyone else. cache its size so # seek and read can be fast. - self.realsize = os.fstat(fp.fileno()).st_size + self.realsize = util.fstat(fp).st_size + self.name = fp.name def end(self): self.tmpfp.flush() # make sure the stat is correct - return self.realsize + os.fstat(self.tmpfp.fileno()).st_size + return self.realsize + util.fstat(self.tmpfp).st_size def tell(self): return self.offset