Mercurial > public > mercurial-scm > hg
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) |