annotate mercurial/revlogutils/constants.py @ 47260:130c9f7ed914

revlog: add a "data compression mode" entry in the index tuple That will make it possible to keep track of compression information in the revlog index, opening the way to more efficient revision restoration (in native code, but the python usage is already defeating performance work). We start with adding a new entry to the index tuple, using a value matching the current behavior. We will introduce storage and other value in later changesets. Differential Revision: https://phab.mercurial-scm.org/D10646
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 03 May 2021 18:19:16 +0200
parents 616b8f412676
children 6bfa6c2c5f15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
1 # revlogdeltas.py - constant used for revlog logic.
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
2 #
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46717
diff changeset
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
4 # Copyright 2018 Octobus <contact@octobus.net>
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
5 #
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
6 # This software may be used and distributed according to the terms of the
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
7 # GNU General Public License version 2 or any later version.
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
8 """Helper class to compute deltas stored inside revlogs"""
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
9
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
10 from __future__ import absolute_import
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
11
46856
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
12 import struct
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
13
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
14 from ..interfaces import repository
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
15
47089
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
16 ### Internal utily constants
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
17
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
18 KIND_CHANGELOG = 1001 # over 256 to not be comparable with a bytes
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
19 KIND_MANIFESTLOG = 1002
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
20 KIND_FILELOG = 1003
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
21 KIND_OTHER = 1004
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
22
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
23 ALL_KINDS = {
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
24 KIND_CHANGELOG,
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
25 KIND_MANIFESTLOG,
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
26 KIND_FILELOG,
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
27 KIND_OTHER,
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
28 }
4c041c71ec01 revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46859
diff changeset
29
46855
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
30 ### main revlog header
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
31
46859
c6e23fb4bfb4 revlog: move the "index header" struct inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46858
diff changeset
32 INDEX_HEADER = struct.Struct(b">I")
c6e23fb4bfb4 revlog: move the "index header" struct inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46858
diff changeset
33
46855
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
34 ## revlog version
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
35 REVLOGV0 = 0
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
36 REVLOGV1 = 1
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
37 # Dummy value until file format is finalized.
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
38 REVLOGV2 = 0xDEAD
46855
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
39
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
40 ## global revlog header flags
41202
e7a2cc84dbc0 revlog: always enable generaldelta on version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40048
diff changeset
41 # Shared across v1 and v2.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
42 FLAG_INLINE_DATA = 1 << 16
41202
e7a2cc84dbc0 revlog: always enable generaldelta on version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40048
diff changeset
43 # Only used by v1, implied by v2.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
44 FLAG_GENERALDELTA = 1 << 17
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
45 REVLOG_DEFAULT_FLAGS = FLAG_INLINE_DATA
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
46 REVLOG_DEFAULT_FORMAT = REVLOGV1
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
47 REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS
47241
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
48 REVLOGV0_FLAGS = 0
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
49 REVLOGV1_FLAGS = FLAG_INLINE_DATA | FLAG_GENERALDELTA
41202
e7a2cc84dbc0 revlog: always enable generaldelta on version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40048
diff changeset
50 REVLOGV2_FLAGS = FLAG_INLINE_DATA
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
51
46855
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
52 ### individual entry
aba724bf550e revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
53
46856
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
54 ## index v0:
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
55 # 4 bytes: offset
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
56 # 4 bytes: compressed length
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
57 # 4 bytes: base rev
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
58 # 4 bytes: link rev
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
59 # 20 bytes: parent 1 nodeid
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
60 # 20 bytes: parent 2 nodeid
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
61 # 20 bytes: nodeid
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
62 INDEX_ENTRY_V0 = struct.Struct(b">4l20s20s20s")
34e1fa4b548a revlog: move the details of revlog "v0" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46855
diff changeset
63
46857
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
64 ## index v1
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
65 # 6 bytes: offset
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
66 # 2 bytes: flags
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
67 # 4 bytes: compressed length
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
68 # 4 bytes: uncompressed length
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
69 # 4 bytes: base rev
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
70 # 4 bytes: link rev
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
71 # 4 bytes: parent 1 rev
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
72 # 4 bytes: parent 2 rev
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
73 # 32 bytes: nodeid
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
74 INDEX_ENTRY_V1 = struct.Struct(b">Qiiiiii20s12x")
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
75 assert INDEX_ENTRY_V1.size == 32 * 2
cc65cea90edb revlog: move the details of revlog "v1" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46856
diff changeset
76
46858
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
77 # 6 bytes: offset
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
78 # 2 bytes: flags
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
79 # 4 bytes: compressed length
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
80 # 4 bytes: uncompressed length
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
81 # 4 bytes: base rev
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
82 # 4 bytes: link rev
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
83 # 4 bytes: parent 1 rev
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
84 # 4 bytes: parent 2 rev
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
85 # 32 bytes: nodeid
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
86 # 8 bytes: sidedata offset
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
87 # 4 bytes: sidedata compressed length
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
88 # 20 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page)
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
89 INDEX_ENTRY_V2 = struct.Struct(b">Qiiiiii20s12xQi20x")
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
90 assert INDEX_ENTRY_V2.size == 32 * 3
85e3a630cad9 revlog: move the details of revlog "v2" index inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46857
diff changeset
91
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
92 # revlog index flags
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
93
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
94 # For historical reasons, revlog's internal flags were exposed via the
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
95 # wire protocol and are even exposed in parts of the storage APIs.
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
96
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
97 # revision has censor metadata, must be verified
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
98 REVIDX_ISCENSORED = repository.REVISION_FLAG_CENSORED
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
99 # revision hash does not match data (narrowhg)
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
100 REVIDX_ELLIPSIS = repository.REVISION_FLAG_ELLIPSIS
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
101 # revision data is stored externally
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39523
diff changeset
102 REVIDX_EXTSTORED = repository.REVISION_FLAG_EXTSTORED
45671
2d6aea053153 copies: add a HASCOPIESINFO flag to highlight rev with useful data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
103 # revision changes files in a way that could affect copy tracing.
2d6aea053153 copies: add a HASCOPIESINFO flag to highlight rev with useful data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
104 REVIDX_HASCOPIESINFO = repository.REVISION_FLAG_HASCOPIESINFO
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
105 REVIDX_DEFAULT_FLAGS = 0
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
106 # stable order in which flags need to be processed and their processors applied
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
107 REVIDX_FLAGS_ORDER = [
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
108 REVIDX_ISCENSORED,
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
109 REVIDX_ELLIPSIS,
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
110 REVIDX_EXTSTORED,
45671
2d6aea053153 copies: add a HASCOPIESINFO flag to highlight rev with useful data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
111 REVIDX_HASCOPIESINFO,
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
112 ]
42747
92ac6b1697a7 flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41202
diff changeset
113
39356
729082bb9938 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
114 # bitmark for flags that could cause rawdata content change
47094
119790e1c67c cg4: introduce protocol flag to signify the presence of sidedata
Rapha?l Gom?s <rgomes@octobus.net>
parents: 47089
diff changeset
115 REVIDX_RAWTEXT_CHANGING_FLAGS = REVIDX_ISCENSORED | REVIDX_EXTSTORED
39523
b66ea3fc3a86 sparse-revlog: set max delta chain length to on thousand
Boris Feld <boris.feld@octobus.net>
parents: 39357
diff changeset
116
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
117 ## chunk compression mode constants:
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
118 # These constants are used in revlog version >=2 to denote the compression used
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
119 # for a chunk.
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
120
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
121 # Chunk use a compression mode stored "inline" at the start of the chunk
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
122 # itself. This is the mode always used for revlog version "0" and "1"
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
123 COMP_MODE_INLINE = 2
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
124
47241
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
125 SUPPORTED_FLAGS = {
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
126 REVLOGV0: REVLOGV0_FLAGS,
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
127 REVLOGV1: REVLOGV1_FLAGS,
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
128 REVLOGV2: REVLOGV2_FLAGS,
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
129 }
0e9105bf54cb revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47094
diff changeset
130
47242
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
131 _no = lambda flags: False
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
132 _yes = lambda flags: True
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
133
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
134
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
135 def _from_flag(flag):
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
136 return lambda flags: bool(flags & flag)
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
137
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
138
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
139 FEATURES_BY_VERSION = {
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
140 REVLOGV0: {
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
141 b'inline': _no,
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
142 b'generaldelta': _no,
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
143 b'sidedata': False,
47245
616b8f412676 revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47242
diff changeset
144 b'docket': False,
47242
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
145 },
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
146 REVLOGV1: {
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
147 b'inline': _from_flag(FLAG_INLINE_DATA),
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
148 b'generaldelta': _from_flag(FLAG_GENERALDELTA),
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
149 b'sidedata': False,
47245
616b8f412676 revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47242
diff changeset
150 b'docket': False,
47242
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
151 },
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
152 REVLOGV2: {
47245
616b8f412676 revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47242
diff changeset
153 # The point of inline-revlog is to reduce the number of files used in
616b8f412676 revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47242
diff changeset
154 # the store. Using a docket defeat this purpose. So we needs other
616b8f412676 revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47242
diff changeset
155 # means to reduce the number of files for revlogv2.
47242
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
156 b'inline': _no,
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
157 b'generaldelta': _yes,
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
158 b'sidedata': True,
47245
616b8f412676 revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47242
diff changeset
159 b'docket': True,
47242
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
160 },
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
161 }
4d1c893b9095 revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47241
diff changeset
162
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47245
diff changeset
163
39523
b66ea3fc3a86 sparse-revlog: set max delta chain length to on thousand
Boris Feld <boris.feld@octobus.net>
parents: 39357
diff changeset
164 SPARSE_REVLOG_MAX_CHAIN_LENGTH = 1000