116 return self._lgt + len(self._extra) |
116 return self._lgt + len(self._extra) |
117 |
117 |
118 def append(self, tup): |
118 def append(self, tup): |
119 if '_nodemap' in vars(self): |
119 if '_nodemap' in vars(self): |
120 self._nodemap[tup[7]] = len(self) |
120 self._nodemap[tup[7]] = len(self) |
121 data = self._pack_entry(tup) |
121 data = self._pack_entry(len(self), tup) |
122 self._extra.append(data) |
122 self._extra.append(data) |
123 |
123 |
124 def _pack_entry(self, entry): |
124 def _pack_entry(self, rev, entry): |
125 assert entry[8] == 0 |
125 assert entry[8] == 0 |
126 assert entry[9] == 0 |
126 assert entry[9] == 0 |
127 return self.index_format.pack(*entry[:8]) |
127 return self.index_format.pack(*entry[:8]) |
128 |
128 |
129 def _check_index(self, i): |
129 def _check_index(self, i): |
139 if i >= self._lgt: |
139 if i >= self._lgt: |
140 data = self._extra[i - self._lgt] |
140 data = self._extra[i - self._lgt] |
141 else: |
141 else: |
142 index = self._calculate_index(i) |
142 index = self._calculate_index(i) |
143 data = self._data[index : index + self.entry_size] |
143 data = self._data[index : index + self.entry_size] |
144 r = self._unpack_entry(data) |
144 r = self._unpack_entry(i, data) |
145 if self._lgt and i == 0: |
145 if self._lgt and i == 0: |
146 r = (offset_type(0, gettype(r[0])),) + r[1:] |
146 r = (offset_type(0, gettype(r[0])),) + r[1:] |
147 return r |
147 return r |
148 |
148 |
149 def _unpack_entry(self, data): |
149 def _unpack_entry(self, rev, data): |
150 r = self.index_format.unpack(data) |
150 r = self.index_format.unpack(data) |
151 r = r + ( |
151 r = r + ( |
152 0, |
152 0, |
153 0, |
153 0, |
154 revlog_constants.COMP_MODE_INLINE, |
154 revlog_constants.COMP_MODE_INLINE, |
321 entry[0] = offset_flags |
321 entry[0] = offset_flags |
322 entry[8] = sidedata_offset |
322 entry[8] = sidedata_offset |
323 entry[9] = sidedata_length |
323 entry[9] = sidedata_length |
324 entry[11] = compression_mode |
324 entry[11] = compression_mode |
325 entry = tuple(entry) |
325 entry = tuple(entry) |
326 new = self._pack_entry(entry) |
326 new = self._pack_entry(rev, entry) |
327 self._extra[rev - self._lgt] = new |
327 self._extra[rev - self._lgt] = new |
328 |
328 |
329 def _unpack_entry(self, data): |
329 def _unpack_entry(self, rev, data): |
330 data = self.index_format.unpack(data) |
330 data = self.index_format.unpack(data) |
331 entry = data[:10] |
331 entry = data[:10] |
332 data_comp = data[10] & 3 |
332 data_comp = data[10] & 3 |
333 sidedata_comp = (data[10] & (3 << 2)) >> 2 |
333 sidedata_comp = (data[10] & (3 << 2)) >> 2 |
334 return entry + (data_comp, sidedata_comp) |
334 return entry + (data_comp, sidedata_comp) |
335 |
335 |
336 def _pack_entry(self, entry): |
336 def _pack_entry(self, rev, entry): |
337 data = entry[:10] |
337 data = entry[:10] |
338 data_comp = entry[10] & 3 |
338 data_comp = entry[10] & 3 |
339 sidedata_comp = (entry[11] & 3) << 2 |
339 sidedata_comp = (entry[11] & 3) << 2 |
340 data += (data_comp | sidedata_comp,) |
340 data += (data_comp | sidedata_comp,) |
341 |
341 |
342 return self.index_format.pack(*data) |
342 return self.index_format.pack(*data) |
343 |
343 |
344 def entry_binary(self, rev): |
344 def entry_binary(self, rev): |
345 """return the raw binary string representing a revision""" |
345 """return the raw binary string representing a revision""" |
346 entry = self[rev] |
346 entry = self[rev] |
347 return self._pack_entry(entry) |
347 return self._pack_entry(rev, entry) |
348 |
348 |
349 def pack_header(self, header): |
349 def pack_header(self, header): |
350 """pack header information as binary""" |
350 """pack header information as binary""" |
351 msg = 'version header should go in the docket, not the index: %d' |
351 msg = 'version header should go in the docket, not the index: %d' |
352 msg %= header |
352 msg %= header |