mercurial/revlog.py
changeset 49306 2e726c934fcd
parent 49284 d44e3c45f0e4
child 49415 5fe7e9eda0f3
equal deleted inserted replaced
49305:53e9422a9b45 49306:2e726c934fcd
    14 
    14 
    15 
    15 
    16 import binascii
    16 import binascii
    17 import collections
    17 import collections
    18 import contextlib
    18 import contextlib
    19 import errno
       
    20 import io
    19 import io
    21 import os
    20 import os
    22 import struct
    21 import struct
    23 import zlib
    22 import zlib
    24 
    23 
   484                             return util.buffer(util.mmapread(fp, size))
   483                             return util.buffer(util.mmapread(fp, size))
   485                 if size is None:
   484                 if size is None:
   486                     return fp.read()
   485                     return fp.read()
   487                 else:
   486                 else:
   488                     return fp.read(size)
   487                     return fp.read(size)
   489         except IOError as inst:
   488         except FileNotFoundError:
   490             if inst.errno != errno.ENOENT:
       
   491                 raise
       
   492             return b''
   489             return b''
   493 
   490 
   494     def _loadindex(self, docket=None):
   491     def _loadindex(self, docket=None):
   495 
   492 
   496         new_header, mmapindexthreshold, force_nodemap = self._init_opts()
   493         new_header, mmapindexthreshold, force_nodemap = self._init_opts()
   699             if self._docket is None:
   696             if self._docket is None:
   700                 f.seek(0, os.SEEK_END)
   697                 f.seek(0, os.SEEK_END)
   701             else:
   698             else:
   702                 f.seek(self._docket.index_end, os.SEEK_SET)
   699                 f.seek(self._docket.index_end, os.SEEK_SET)
   703             return f
   700             return f
   704         except IOError as inst:
   701         except FileNotFoundError:
   705             if inst.errno != errno.ENOENT:
       
   706                 raise
       
   707             return self.opener(
   702             return self.opener(
   708                 self._indexfile, mode=b"w+", checkambig=self._checkambig
   703                 self._indexfile, mode=b"w+", checkambig=self._checkambig
   709             )
   704             )
   710 
   705 
   711     def __index_new_fp(self):
   706     def __index_new_fp(self):
  2114                         dfh = self._datafp(b"r+")
  2109                         dfh = self._datafp(b"r+")
  2115                         if self._docket is None:
  2110                         if self._docket is None:
  2116                             dfh.seek(0, os.SEEK_END)
  2111                             dfh.seek(0, os.SEEK_END)
  2117                         else:
  2112                         else:
  2118                             dfh.seek(self._docket.data_end, os.SEEK_SET)
  2113                             dfh.seek(self._docket.data_end, os.SEEK_SET)
  2119                     except IOError as inst:
  2114                     except FileNotFoundError:
  2120                         if inst.errno != errno.ENOENT:
       
  2121                             raise
       
  2122                         dfh = self._datafp(b"w+")
  2115                         dfh = self._datafp(b"w+")
  2123                     transaction.add(self._datafile, dsize)
  2116                     transaction.add(self._datafile, dsize)
  2124                 if self._sidedatafile is not None:
  2117                 if self._sidedatafile is not None:
  2125                     # revlog-v2 does not inline, help Pytype
  2118                     # revlog-v2 does not inline, help Pytype
  2126                     assert dfh is not None
  2119                     assert dfh is not None
  2127                     try:
  2120                     try:
  2128                         sdfh = self.opener(self._sidedatafile, mode=b"r+")
  2121                         sdfh = self.opener(self._sidedatafile, mode=b"r+")
  2129                         dfh.seek(self._docket.sidedata_end, os.SEEK_SET)
  2122                         dfh.seek(self._docket.sidedata_end, os.SEEK_SET)
  2130                     except IOError as inst:
  2123                     except FileNotFoundError:
  2131                         if inst.errno != errno.ENOENT:
       
  2132                             raise
       
  2133                         sdfh = self.opener(self._sidedatafile, mode=b"w+")
  2124                         sdfh = self.opener(self._sidedatafile, mode=b"w+")
  2134                     transaction.add(
  2125                     transaction.add(
  2135                         self._sidedatafile, self._docket.sidedata_end
  2126                         self._sidedatafile, self._docket.sidedata_end
  2136                     )
  2127                     )
  2137 
  2128 
  2830         try:
  2821         try:
  2831             with self._datafp() as f:
  2822             with self._datafp() as f:
  2832                 f.seek(0, io.SEEK_END)
  2823                 f.seek(0, io.SEEK_END)
  2833                 actual = f.tell()
  2824                 actual = f.tell()
  2834             dd = actual - expected
  2825             dd = actual - expected
  2835         except IOError as inst:
  2826         except FileNotFoundError:
  2836             if inst.errno != errno.ENOENT:
       
  2837                 raise
       
  2838             dd = 0
  2827             dd = 0
  2839 
  2828 
  2840         try:
  2829         try:
  2841             f = self.opener(self._indexfile)
  2830             f = self.opener(self._indexfile)
  2842             f.seek(0, io.SEEK_END)
  2831             f.seek(0, io.SEEK_END)
  2849                 databytes = 0
  2838                 databytes = 0
  2850                 for r in self:
  2839                 for r in self:
  2851                     databytes += max(0, self.length(r))
  2840                     databytes += max(0, self.length(r))
  2852                 dd = 0
  2841                 dd = 0
  2853                 di = actual - len(self) * s - databytes
  2842                 di = actual - len(self) * s - databytes
  2854         except IOError as inst:
  2843         except FileNotFoundError:
  2855             if inst.errno != errno.ENOENT:
       
  2856                 raise
       
  2857             di = 0
  2844             di = 0
  2858 
  2845 
  2859         return (dd, di)
  2846         return (dd, di)
  2860 
  2847 
  2861     def files(self):
  2848     def files(self):