mercurial/revlog.py
changeset 35968 91b3b11565e5
parent 35967 61326dd7cb8d
child 35969 1f2b8a644dd4
equal deleted inserted replaced
35967:61326dd7cb8d 35968:91b3b11565e5
   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