equal
deleted
inserted
replaced
619 'of 2') % self._chunkcachesize) |
619 'of 2') % self._chunkcachesize) |
620 |
620 |
621 indexdata = '' |
621 indexdata = '' |
622 self._initempty = True |
622 self._initempty = True |
623 try: |
623 try: |
624 f = self.opener(self.indexfile) |
624 f = self._indexfp() |
625 if (mmapindexthreshold is not None and |
625 if (mmapindexthreshold is not None and |
626 self.opener.fstat(f).st_size >= mmapindexthreshold): |
626 self.opener.fstat(f).st_size >= mmapindexthreshold): |
627 indexdata = util.buffer(util.mmapread(f)) |
627 indexdata = util.buffer(util.mmapread(f)) |
628 else: |
628 else: |
629 indexdata = f.read() |
629 indexdata = f.read() |
679 self._decompressors = {} |
679 self._decompressors = {} |
680 |
680 |
681 @util.propertycache |
681 @util.propertycache |
682 def _compressor(self): |
682 def _compressor(self): |
683 return util.compengines[self._compengine].revlogcompressor() |
683 return util.compengines[self._compengine].revlogcompressor() |
|
684 |
|
685 def _indexfp(self, mode='r'): |
|
686 """file object for the revlog's index file""" |
|
687 args = {r'mode': mode} |
|
688 if mode != 'r': |
|
689 args[r'checkambig'] = self._checkambig |
|
690 if mode == 'w': |
|
691 args[r'atomictemp'] = True |
|
692 return self.opener(self.indexfile, **args) |
684 |
693 |
685 def _datafp(self, mode='r'): |
694 def _datafp(self, mode='r'): |
686 """file object for the revlog's data file""" |
695 """file object for the revlog's data file""" |
687 return self.opener(self.datafile, mode=mode) |
696 return self.opener(self.datafile, mode=mode) |
688 |
697 |
1496 """ |
1505 """ |
1497 if df is not None: |
1506 if df is not None: |
1498 closehandle = False |
1507 closehandle = False |
1499 else: |
1508 else: |
1500 if self._inline: |
1509 if self._inline: |
1501 df = self.opener(self.indexfile) |
1510 df = self._indexfp() |
1502 else: |
1511 else: |
1503 df = self._datafp() |
1512 df = self._datafp() |
1504 closehandle = True |
1513 closehandle = True |
1505 |
1514 |
1506 # Cache data both forward and backward around the requested |
1515 # Cache data both forward and backward around the requested |
1856 for r in self: |
1865 for r in self: |
1857 df.write(self._getsegmentforrevs(r, r)[1]) |
1866 df.write(self._getsegmentforrevs(r, r)[1]) |
1858 finally: |
1867 finally: |
1859 df.close() |
1868 df.close() |
1860 |
1869 |
1861 fp = self.opener(self.indexfile, 'w', atomictemp=True, |
1870 fp = self._indexfp('w') |
1862 checkambig=self._checkambig) |
|
1863 self.version &= ~FLAG_INLINE_DATA |
1871 self.version &= ~FLAG_INLINE_DATA |
1864 self._inline = False |
1872 self._inline = False |
1865 for i in self: |
1873 for i in self: |
1866 e = self._io.packentry(self.index[i], self.node, self.version, i) |
1874 e = self._io.packentry(self.index[i], self.node, self.version, i) |
1867 fp.write(e) |
1875 fp.write(e) |
1926 over wire, or read from an external bundle). |
1934 over wire, or read from an external bundle). |
1927 """ |
1935 """ |
1928 dfh = None |
1936 dfh = None |
1929 if not self._inline: |
1937 if not self._inline: |
1930 dfh = self._datafp("a+") |
1938 dfh = self._datafp("a+") |
1931 ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig) |
1939 ifh = self._indexfp("a+") |
1932 try: |
1940 try: |
1933 return self._addrevision(node, rawtext, transaction, link, p1, p2, |
1941 return self._addrevision(node, rawtext, transaction, link, p1, p2, |
1934 flags, cachedelta, ifh, dfh, |
1942 flags, cachedelta, ifh, dfh, |
1935 deltacomputer=deltacomputer) |
1943 deltacomputer=deltacomputer) |
1936 finally: |
1944 finally: |
2155 |
2163 |
2156 r = len(self) |
2164 r = len(self) |
2157 end = 0 |
2165 end = 0 |
2158 if r: |
2166 if r: |
2159 end = self.end(r - 1) |
2167 end = self.end(r - 1) |
2160 ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig) |
2168 ifh = self._indexfp("a+") |
2161 isize = r * self._io.size |
2169 isize = r * self._io.size |
2162 if self._inline: |
2170 if self._inline: |
2163 transaction.add(self.indexfile, end + isize, r) |
2171 transaction.add(self.indexfile, end + isize, r) |
2164 dfh = None |
2172 dfh = None |
2165 else: |
2173 else: |
2227 if not dfh and not self._inline: |
2235 if not dfh and not self._inline: |
2228 # addrevision switched from inline to conventional |
2236 # addrevision switched from inline to conventional |
2229 # reopen the index |
2237 # reopen the index |
2230 ifh.close() |
2238 ifh.close() |
2231 dfh = self._datafp("a+") |
2239 dfh = self._datafp("a+") |
2232 ifh = self.opener(self.indexfile, "a+", |
2240 ifh = self._indexfp("a+") |
2233 checkambig=self._checkambig) |
|
2234 finally: |
2241 finally: |
2235 if dfh: |
2242 if dfh: |
2236 dfh.close() |
2243 dfh.close() |
2237 ifh.close() |
2244 ifh.close() |
2238 |
2245 |