##// END OF EJS Templates
revlog: only allow lazy parsing with revlogng files...
Matt Mackall -
r4976:79c39cc9 default
parent child Browse files
Show More
@@ -88,11 +88,9 b' class lazyparser(object):'
88 safe_to_use = os.name != 'nt' or (not util.is_win_9x() and
88 safe_to_use = os.name != 'nt' or (not util.is_win_9x() and
89 hasattr(util, 'win32api'))
89 hasattr(util, 'win32api'))
90
90
91 def __init__(self, dataf, size, indexformat, shaoffset):
91 def __init__(self, dataf, size):
92 self.dataf = dataf
92 self.dataf = dataf
93 self.format = indexformat
93 self.s = struct.calcsize(indexformatng)
94 self.s = struct.calcsize(indexformat)
95 self.indexformat = indexformat
96 self.datasize = size
94 self.datasize = size
97 self.l = size/self.s
95 self.l = size/self.s
98 self.index = [None] * self.l
96 self.index = [None] * self.l
@@ -100,7 +98,6 b' class lazyparser(object):'
100 self.allmap = 0
98 self.allmap = 0
101 self.all = 0
99 self.all = 0
102 self.mapfind_count = 0
100 self.mapfind_count = 0
103 self.shaoffset = shaoffset
104
101
105 def loadmap(self):
102 def loadmap(self):
106 """
103 """
@@ -120,7 +117,7 b' class lazyparser(object):'
120 data = self.dataf.read(blocksize)
117 data = self.dataf.read(blocksize)
121 off = 0
118 off = 0
122 for x in xrange(256):
119 for x in xrange(256):
123 n = data[off + self.shaoffset:off + self.shaoffset + 20]
120 n = data[off + ngshaoffset:off + ngshaoffset + 20]
124 self.map[n] = count
121 self.map[n] = count
125 count += 1
122 count += 1
126 if count >= self.l:
123 if count >= self.l:
@@ -148,7 +145,7 b' class lazyparser(object):'
148 if self.index[i + x] == None:
145 if self.index[i + x] == None:
149 b = data[off : off + self.s]
146 b = data[off : off + self.s]
150 self.index[i + x] = b
147 self.index[i + x] = b
151 n = b[self.shaoffset:self.shaoffset + 20]
148 n = b[ngshaoffset:ngshaoffset + 20]
152 self.map[n] = i + x
149 self.map[n] = i + x
153 off += self.s
150 off += self.s
154
151
@@ -187,7 +184,7 b' class lazyparser(object):'
187 if off >= 0:
184 if off >= 0:
188 i = off / self.s
185 i = off / self.s
189 off = i * self.s
186 off = i * self.s
190 n = data[off + self.shaoffset:off + self.shaoffset + 20]
187 n = data[off + ngshaoffset:off + ngshaoffset + 20]
191 if n == node:
188 if n == node:
192 self.map[n] = i + start / self.s
189 self.map[n] = i + start / self.s
193 return node
190 return node
@@ -232,7 +229,7 b' class lazyindex(object):'
232 def __getitem__(self, pos):
229 def __getitem__(self, pos):
233 ret = self.p.index[pos] or self.load(pos)
230 ret = self.p.index[pos] or self.load(pos)
234 if isinstance(ret, str):
231 if isinstance(ret, str):
235 ret = struct.unpack(self.p.indexformat, ret)
232 ret = struct.unpack(indexformatng, ret)
236 return ret
233 return ret
237 def __setitem__(self, pos, item):
234 def __setitem__(self, pos, item):
238 self.p.index[pos] = item
235 self.p.index[pos] = item
@@ -262,7 +259,7 b' class lazymap(object):'
262 self.p.loadindex(i)
259 self.p.loadindex(i)
263 ret = self.p.index[i]
260 ret = self.p.index[i]
264 if isinstance(ret, str):
261 if isinstance(ret, str):
265 ret = struct.unpack(self.p.indexformat, ret)
262 ret = struct.unpack(indexformatng, ret)
266 yield ret[-1]
263 yield ret[-1]
267 def __getitem__(self, key):
264 def __getitem__(self, key):
268 try:
265 try:
@@ -321,7 +318,7 b' class revlogio(object):'
321 if (lazyparser.safe_to_use and not inline and
318 if (lazyparser.safe_to_use and not inline and
322 st and st.st_size > 1000000):
319 st and st.st_size > 1000000):
323 # big index, let's parse it on demand
320 # big index, let's parse it on demand
324 parser = lazyparser(fp, st.st_size, indexformatng, ngshaoffset)
321 parser = lazyparser(fp, st.st_size)
325 index = lazyindex(parser)
322 index = lazyindex(parser)
326 nodemap = lazymap(parser)
323 nodemap = lazymap(parser)
327 e = list(index[0])
324 e = list(index[0])
General Comments 0
You need to be logged in to leave comments. Login now