##// END OF EJS Templates
revlog: move the details of revlog "v1" index inside revlog.utils.constants...
revlog: move the details of revlog "v1" index inside revlog.utils.constants The revlog module is quite large and this kind of format information would handy for other module. So let us start to gather this information about the format in a more appropriate place. We update various reference to this information to use the new "source of truth" in the process. Differential Revision: https://phab.mercurial-scm.org/D10304

File last commit:

r47616:cc65cea9 default
r47616:cc65cea9 default
Show More
constants.py
90 lines | 2.6 KiB | text/x-python | PythonLexer
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 # revlogdeltas.py - constant used for revlog logic
#
Raphaël Gomès
contributor: change mentions of mpm to olivia...
r47575 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 # Copyright 2018 Octobus <contact@octobus.net>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""Helper class to compute deltas stored inside revlogs"""
from __future__ import absolute_import
revlog: move the details of revlog "v0" index inside revlog.utils.constants...
r47615 import struct
Augie Fackler
formatting: blacken the codebase...
r43346 from ..interfaces import repository
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365
revlog: add some comment in the header sections...
r47614 ### main revlog header
## revlog version
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 REVLOGV0 = 0
REVLOGV1 = 1
# Dummy value until file format is finalized.
REVLOGV2 = 0xDEAD
revlog: add some comment in the header sections...
r47614
## global revlog header flags
Gregory Szorc
revlog: always enable generaldelta on version 2 revlogs...
r41238 # Shared across v1 and v2.
Augie Fackler
formatting: blacken the codebase...
r43346 FLAG_INLINE_DATA = 1 << 16
Gregory Szorc
revlog: always enable generaldelta on version 2 revlogs...
r41238 # Only used by v1, implied by v2.
Augie Fackler
formatting: blacken the codebase...
r43346 FLAG_GENERALDELTA = 1 << 17
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 REVLOG_DEFAULT_FLAGS = FLAG_INLINE_DATA
REVLOG_DEFAULT_FORMAT = REVLOGV1
REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS
REVLOGV1_FLAGS = FLAG_INLINE_DATA | FLAG_GENERALDELTA
Gregory Szorc
revlog: always enable generaldelta on version 2 revlogs...
r41238 REVLOGV2_FLAGS = FLAG_INLINE_DATA
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365
revlog: add some comment in the header sections...
r47614 ### individual entry
revlog: move the details of revlog "v0" index inside revlog.utils.constants...
r47615 ## index v0:
# 4 bytes: offset
# 4 bytes: compressed length
# 4 bytes: base rev
# 4 bytes: link rev
# 20 bytes: parent 1 nodeid
# 20 bytes: parent 2 nodeid
# 20 bytes: nodeid
INDEX_ENTRY_V0 = struct.Struct(b">4l20s20s20s")
revlog: move the details of revlog "v1" index inside revlog.utils.constants...
r47616 ## index v1
# 6 bytes: offset
# 2 bytes: flags
# 4 bytes: compressed length
# 4 bytes: uncompressed length
# 4 bytes: base rev
# 4 bytes: link rev
# 4 bytes: parent 1 rev
# 4 bytes: parent 2 rev
# 32 bytes: nodeid
INDEX_ENTRY_V1 = struct.Struct(b">Qiiiiii20s12x")
assert INDEX_ENTRY_V1.size == 32 * 2
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 # revlog index flags
Gregory Szorc
repository: define and use revision flag constants...
r40083
# For historical reasons, revlog's internal flags were exposed via the
# wire protocol and are even exposed in parts of the storage APIs.
# revision has censor metadata, must be verified
REVIDX_ISCENSORED = repository.REVISION_FLAG_CENSORED
# revision hash does not match data (narrowhg)
REVIDX_ELLIPSIS = repository.REVISION_FLAG_ELLIPSIS
# revision data is stored externally
REVIDX_EXTSTORED = repository.REVISION_FLAG_EXTSTORED
sidedata: add a new revision flag constant for side data...
r43300 # revision data contains extra metadata not part of the official digest
REVIDX_SIDEDATA = repository.REVISION_FLAG_SIDEDATA
copies: add a HASCOPIESINFO flag to highlight rev with useful data...
r46263 # revision changes files in a way that could affect copy tracing.
REVIDX_HASCOPIESINFO = repository.REVISION_FLAG_HASCOPIESINFO
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 REVIDX_DEFAULT_FLAGS = 0
# stable order in which flags need to be processed and their processors applied
REVIDX_FLAGS_ORDER = [
REVIDX_ISCENSORED,
REVIDX_ELLIPSIS,
REVIDX_EXTSTORED,
sidedata: add a new revision flag constant for side data...
r43300 REVIDX_SIDEDATA,
copies: add a HASCOPIESINFO flag to highlight rev with useful data...
r46263 REVIDX_HASCOPIESINFO,
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 ]
flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)...
r42956
Boris Feld
revlog: split constants into a new `revlogutils.constants` module...
r39365 # bitmark for flags that could cause rawdata content change
sidedata: add a new revision flag constant for side data...
r43300 REVIDX_RAWTEXT_CHANGING_FLAGS = (
Augie Fackler
formatting: blacken the codebase...
r43346 REVIDX_ISCENSORED | REVIDX_EXTSTORED | REVIDX_SIDEDATA
sidedata: add a new revision flag constant for side data...
r43300 )
Boris Feld
sparse-revlog: set max delta chain length to on thousand...
r39542
SPARSE_REVLOG_MAX_CHAIN_LENGTH = 1000