marmoute created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches.
REVISION SUMMARY This make the processing more compact but abstracting repetitive processing away. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D10774 AFFECTED FILES mercurial/revlogutils/docket.py CHANGE DETAILS diff --git a/mercurial/revlogutils/docket.py b/mercurial/revlogutils/docket.py --- a/mercurial/revlogutils/docket.py +++ b/mercurial/revlogutils/docket.py @@ -237,19 +237,30 @@ def parse_docket(revlog, data, use_pending=False): """given some docket data return a docket object for the given revlog""" header = S_HEADER.unpack(data[: S_HEADER.size]) - offset = S_HEADER.size + + # this is a mutable closure capture used in `get_data` + offset = [S_HEADER.size] + + def get_data(size): + """utility closure to access the `size` next bytes""" + if offset[0] + size > len(data): + # XXX better class + msg = b"docket is too short, expected %d got %d" + msg %= (offset[0] + size, len(data)) + raise error.Abort(msg) + raw = data[offset[0] : offset[0] + size] + offset[0] += size + return raw iheader = iter(header) version_header = next(iheader) index_uuid_size = next(iheader) - index_uuid = data[offset : offset + index_uuid_size] - offset += index_uuid_size + index_uuid = get_data(index_uuid_size) data_uuid_size = next(iheader) - data_uuid = data[offset : offset + data_uuid_size] - offset += data_uuid_size + data_uuid = get_data(data_uuid_size) index_size = next(iheader) To: marmoute, #hg-reviewers Cc: mercurial-patches, mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel