mercurial/revlog.py
changeset 1784 2e0a288ca93e
parent 1749 d457fec76ab0
child 1853 5ac811b720de
equal deleted inserted replaced
1783:35a05f177267 1784:2e0a288ca93e
    11 """
    11 """
    12 
    12 
    13 from node import *
    13 from node import *
    14 from i18n import gettext as _
    14 from i18n import gettext as _
    15 from demandload import demandload
    15 from demandload import demandload
    16 demandload(globals(), "binascii errno heapq mdiff sha struct zlib")
    16 demandload(globals(), "binascii errno heapq mdiff os sha struct zlib")
    17 
    17 
    18 def hash(text, p1, p2):
    18 def hash(text, p1, p2):
    19     """generate a hash from the given text and its parent hashes
    19     """generate a hash from the given text and its parent hashes
    20 
    20 
    21     This hash combines both the current file contents and its history
    21     This hash combines both the current file contents and its history
   185         and can be used to implement COW semantics or the like.
   185         and can be used to implement COW semantics or the like.
   186         """
   186         """
   187         self.indexfile = indexfile
   187         self.indexfile = indexfile
   188         self.datafile = datafile
   188         self.datafile = datafile
   189         self.opener = opener
   189         self.opener = opener
       
   190 
       
   191         self.indexstat = None
   190         self.cache = None
   192         self.cache = None
   191         self.chunkcache = None
   193         self.chunkcache = None
   192 
   194         self.load()
       
   195 
       
   196     def load(self):
   193         try:
   197         try:
   194             i = self.opener(self.indexfile).read()
   198             f = self.opener(self.indexfile)
   195         except IOError, inst:
   199         except IOError, inst:
   196             if inst.errno != errno.ENOENT:
   200             if inst.errno != errno.ENOENT:
   197                 raise
   201                 raise
   198             i = ""
   202             i = ""
       
   203         else:
       
   204             try:
       
   205                 st = os.fstat(f.fileno())
       
   206             except AttributeError, inst:
       
   207                 st = None
       
   208             else:
       
   209                 oldst = self.indexstat
       
   210                 if (oldst and st.st_dev == oldst.st_dev
       
   211                     and st.st_ino == oldst.st_ino
       
   212                     and st.st_mtime == oldst.st_mtime
       
   213                     and st.st_ctime == oldst.st_ctime):
       
   214                     return
       
   215             self.indexstat = st
       
   216             i = f.read()
   199 
   217 
   200         if i and i[:4] != "\0\0\0\0":
   218         if i and i[:4] != "\0\0\0\0":
   201             raise RevlogError(_("incompatible revlog signature on %s") %
   219             raise RevlogError(_("incompatible revlog signature on %s") %
   202                               self.indexfile)
   220                               self.indexfile)
   203 
   221