Show More
@@ -237,19 +237,30 b' def default_docket(revlog, version_heade' | |||||
237 | def parse_docket(revlog, data, use_pending=False): |
|
237 | def parse_docket(revlog, data, use_pending=False): | |
238 | """given some docket data return a docket object for the given revlog""" |
|
238 | """given some docket data return a docket object for the given revlog""" | |
239 | header = S_HEADER.unpack(data[: S_HEADER.size]) |
|
239 | header = S_HEADER.unpack(data[: S_HEADER.size]) | |
240 | offset = S_HEADER.size |
|
240 | ||
|
241 | # this is a mutable closure capture used in `get_data` | |||
|
242 | offset = [S_HEADER.size] | |||
|
243 | ||||
|
244 | def get_data(size): | |||
|
245 | """utility closure to access the `size` next bytes""" | |||
|
246 | if offset[0] + size > len(data): | |||
|
247 | # XXX better class | |||
|
248 | msg = b"docket is too short, expected %d got %d" | |||
|
249 | msg %= (offset[0] + size, len(data)) | |||
|
250 | raise error.Abort(msg) | |||
|
251 | raw = data[offset[0] : offset[0] + size] | |||
|
252 | offset[0] += size | |||
|
253 | return raw | |||
241 |
|
254 | |||
242 | iheader = iter(header) |
|
255 | iheader = iter(header) | |
243 |
|
256 | |||
244 | version_header = next(iheader) |
|
257 | version_header = next(iheader) | |
245 |
|
258 | |||
246 | index_uuid_size = next(iheader) |
|
259 | index_uuid_size = next(iheader) | |
247 |
index_uuid = |
|
260 | index_uuid = get_data(index_uuid_size) | |
248 | offset += index_uuid_size |
|
|||
249 |
|
261 | |||
250 | data_uuid_size = next(iheader) |
|
262 | data_uuid_size = next(iheader) | |
251 |
data_uuid = |
|
263 | data_uuid = get_data(data_uuid_size) | |
252 | offset += data_uuid_size |
|
|||
253 |
|
264 | |||
254 | index_size = next(iheader) |
|
265 | index_size = next(iheader) | |
255 |
|
266 |
General Comments 0
You need to be logged in to leave comments.
Login now