equal
deleted
inserted
replaced
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 |