comparison mercurial/revlog.py @ 8317:5cdf4067857a

revlog: use chunk cache to avoid rereading when splitting inline files
author Matt Mackall <mpm@selenic.com>
date Thu, 07 May 2009 19:39:45 -0500
parents d593922cf480
children 6b8513f8274a
comparison
equal deleted inserted replaced
8316:d593922cf480 8317:5cdf4067857a
1017 trindex = trinfo[2] 1017 trindex = trinfo[2]
1018 dataoff = self.start(trindex) 1018 dataoff = self.start(trindex)
1019 1019
1020 tr.add(self.datafile, dataoff) 1020 tr.add(self.datafile, dataoff)
1021 1021
1022 if not fp: 1022 if fp:
1023 fp = self.opener(self.indexfile, 'r') 1023 fp.flush()
1024 fp.close()
1024 1025
1025 df = self.opener(self.datafile, 'w') 1026 df = self.opener(self.datafile, 'w')
1026 try: 1027 try:
1027 calc = self._io.size 1028 calc = self._io.size
1028 for r in self: 1029 for r in self:
1029 start = self.start(r) + (r + 1) * calc 1030 start = self.start(r) + (r + 1) * calc
1030 length = self.length(r) 1031 length = self.length(r)
1031 fp.seek(start) 1032 d = self._getchunk(start, length)
1032 d = fp.read(length)
1033 df.write(d) 1033 df.write(d)
1034 finally: 1034 finally:
1035 df.close() 1035 df.close()
1036 1036
1037 fp.close()
1038 fp = self.opener(self.indexfile, 'w', atomictemp=True) 1037 fp = self.opener(self.indexfile, 'w', atomictemp=True)
1039 self.version &= ~(REVLOGNGINLINEDATA) 1038 self.version &= ~(REVLOGNGINLINEDATA)
1040 self._inline = False 1039 self._inline = False
1041 for i in self: 1040 for i in self:
1042 e = self._io.packentry(self.index[i], self.node, self.version, i) 1041 e = self._io.packentry(self.index[i], self.node, self.version, i)