author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Sat, 22 May 2021 00:06:22 +0200 | |
changeset 47393 | 7a0ec25d5836 |
parent 47371 | 298d4400ea68 |
child 47395 | a669404f0f4a |
permissions | -rw-r--r-- |
47249
130c9f7ed914
revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47234
diff
changeset
|
1 |
# revlogdeltas.py - constant used for revlog logic. |
39329
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:
46704
diff
changeset
|
3 |
# Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
39329
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 |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
15 |
|
47072
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 |
|
47393
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
30 |
### Index entry key |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
31 |
# |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
32 |
# |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
33 |
# Internal details |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
34 |
# ---------------- |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
35 |
# |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
36 |
# A large part of the revlog logic deals with revisions' "index entries", tuple |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
37 |
# objects that contains the same "items" whatever the revlog version. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
38 |
# Different versions will have different ways of storing these items (sometimes |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
39 |
# not having them at all), but the tuple will always be the same. New fields |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
40 |
# are usually added at the end to avoid breaking existing code that relies |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
41 |
# on the existing order. The field are defined as follows: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
42 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
43 |
# [0] offset: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
44 |
# The byte index of the start of revision data chunk. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
45 |
# That value is shifted up by 16 bits. use "offset = field >> 16" to |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
46 |
# retrieve it. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
47 |
# |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
48 |
# flags: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
49 |
# A flag field that carries special information or changes the behavior |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
50 |
# of the revision. (see `REVIDX_*` constants for details) |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
51 |
# The flag field only occupies the first 16 bits of this field, |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
52 |
# use "flags = field & 0xFFFF" to retrieve the value. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
53 |
ENTRY_DATA_OFFSET = 0 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
54 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
55 |
# [1] compressed length: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
56 |
# The size, in bytes, of the chunk on disk |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
57 |
ENTRY_DATA_COMPRESSED_LENGTH = 1 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
58 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
59 |
# [2] uncompressed length: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
60 |
# The size, in bytes, of the full revision once reconstructed. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
61 |
ENTRY_DATA_UNCOMPRESSED_LENGTH = 2 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
62 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
63 |
# [3] base rev: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
64 |
# Either the base of the revision delta chain (without general |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
65 |
# delta), or the base of the delta (stored in the data chunk) |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
66 |
# with general delta. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
67 |
ENTRY_DELTA_BASE = 3 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
68 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
69 |
# [4] link rev: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
70 |
# Changelog revision number of the changeset introducing this |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
71 |
# revision. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
72 |
ENTRY_LINK_REV = 4 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
73 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
74 |
# [5] parent 1 rev: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
75 |
# Revision number of the first parent |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
76 |
ENTRY_PARENT_1 = 5 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
77 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
78 |
# [6] parent 2 rev: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
79 |
# Revision number of the second parent |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
80 |
ENTRY_PARENT_2 = 6 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
81 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
82 |
# [7] node id: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
83 |
# The node id of the current revision |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
84 |
ENTRY_NODE_ID = 7 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
85 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
86 |
# [8] sidedata offset: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
87 |
# The byte index of the start of the revision's side-data chunk. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
88 |
ENTRY_SIDEDATA_OFFSET = 8 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
89 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
90 |
# [9] sidedata chunk length: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
91 |
# The size, in bytes, of the revision's side-data chunk. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
92 |
ENTRY_SIDEDATA_COMPRESSED_LENGTH = 9 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
93 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
94 |
# [10] data compression mode: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
95 |
# two bits that detail the way the data chunk is compressed on disk. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
96 |
# (see "COMP_MODE_*" constants for details). For revlog version 0 and |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
97 |
# 1 this will always be COMP_MODE_INLINE. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
98 |
ENTRY_DATA_COMPRESSION_MODE = 10 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
99 |
|
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
100 |
# [11] side-data compression mode: |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
101 |
# two bits that detail the way the sidedata chunk is compressed on disk. |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
102 |
# (see "COMP_MODE_*" constants for details) |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
103 |
ENTRY_SIDEDATA_COMPRESSION_MODE = 11 |
7a0ec25d5836
revlog: move entry documentation alongside new related constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47371
diff
changeset
|
104 |
|
46855
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
105 |
### main revlog header |
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
106 |
|
47371
298d4400ea68
index: use an explicit constant for INDEX_HEADER format and use it for docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47270
diff
changeset
|
107 |
# We cannot rely on Struct.format is inconsistent for python <=3.6 versus above |
298d4400ea68
index: use an explicit constant for INDEX_HEADER format and use it for docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47270
diff
changeset
|
108 |
INDEX_HEADER_FMT = b">I" |
298d4400ea68
index: use an explicit constant for INDEX_HEADER format and use it for docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47270
diff
changeset
|
109 |
INDEX_HEADER = struct.Struct(INDEX_HEADER_FMT) |
46859
c6e23fb4bfb4
revlog: move the "index header" struct inside revlog.utils.constants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46858
diff
changeset
|
110 |
|
46855
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
111 |
## revlog version |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
112 |
REVLOGV0 = 0 |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
113 |
REVLOGV1 = 1 |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
114 |
# 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
|
115 |
REVLOGV2 = 0xDEAD |
47266
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
116 |
# Dummy value until file format is finalized. |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
117 |
CHANGELOGV2 = 0xD34D |
46855
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
118 |
|
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
119 |
## global revlog header flags |
41202
e7a2cc84dbc0
revlog: always enable generaldelta on version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40047
diff
changeset
|
120 |
# Shared across v1 and v2. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43032
diff
changeset
|
121 |
FLAG_INLINE_DATA = 1 << 16 |
41202
e7a2cc84dbc0
revlog: always enable generaldelta on version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40047
diff
changeset
|
122 |
# Only used by v1, implied by v2. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43032
diff
changeset
|
123 |
FLAG_GENERALDELTA = 1 << 17 |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
124 |
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
|
125 |
REVLOG_DEFAULT_FORMAT = REVLOGV1 |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
126 |
REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS |
47230
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
127 |
REVLOGV0_FLAGS = 0 |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
128 |
REVLOGV1_FLAGS = FLAG_INLINE_DATA | FLAG_GENERALDELTA |
41202
e7a2cc84dbc0
revlog: always enable generaldelta on version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40047
diff
changeset
|
129 |
REVLOGV2_FLAGS = FLAG_INLINE_DATA |
47266
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
130 |
CHANGELOGV2_FLAGS = 0 |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
131 |
|
46855
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
132 |
### individual entry |
aba724bf550e
revlog: add some comment in the header sections
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
133 |
|
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
|
134 |
## 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
|
135 |
# 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
|
136 |
# 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
|
137 |
# 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
|
138 |
# 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
|
139 |
# 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
|
140 |
# 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
|
141 |
# 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
|
142 |
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
|
143 |
|
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
|
144 |
## 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
|
145 |
# 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
|
146 |
# 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
|
147 |
# 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
|
148 |
# 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
|
149 |
# 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
|
150 |
# 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
|
151 |
# 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
|
152 |
# 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
|
153 |
# 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
|
154 |
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
|
155 |
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
|
156 |
|
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
|
157 |
# 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
|
158 |
# 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
|
159 |
# 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
|
160 |
# 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
|
161 |
# 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
|
162 |
# 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
|
163 |
# 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
|
164 |
# 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
|
165 |
# 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
|
166 |
# 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
|
167 |
# 4 bytes: sidedata compressed length |
47251
6bfa6c2c5f15
revlogv2: preserve the compression mode on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47249
diff
changeset
|
168 |
# 1 bytes: compression mode (2 lower bit are data_compression_mode) |
6bfa6c2c5f15
revlogv2: preserve the compression mode on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47249
diff
changeset
|
169 |
# 19 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page) |
6bfa6c2c5f15
revlogv2: preserve the compression mode on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47249
diff
changeset
|
170 |
INDEX_ENTRY_V2 = struct.Struct(b">Qiiiiii20s12xQiB19x") |
6bfa6c2c5f15
revlogv2: preserve the compression mode on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47249
diff
changeset
|
171 |
assert INDEX_ENTRY_V2.size == 32 * 3, INDEX_ENTRY_V2.size |
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
|
172 |
|
47270
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
173 |
# 6 bytes: offset |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
174 |
# 2 bytes: flags |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
175 |
# 4 bytes: compressed length |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
176 |
# 4 bytes: uncompressed length |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
177 |
# 4 bytes: parent 1 rev |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
178 |
# 4 bytes: parent 2 rev |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
179 |
# 32 bytes: nodeid |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
180 |
# 8 bytes: sidedata offset |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
181 |
# 4 bytes: sidedata compressed length |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
182 |
# 1 bytes: compression mode (2 lower bit are data_compression_mode) |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
183 |
# 27 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page) |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
184 |
INDEX_ENTRY_CL_V2 = struct.Struct(b">Qiiii20s12xQiB27x") |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
185 |
assert INDEX_ENTRY_CL_V2.size == 32 * 3, INDEX_ENTRY_V2.size |
25ce16bf724b
changelogv2: use a dedicated on disk format for changelogv2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47266
diff
changeset
|
186 |
|
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
187 |
# revlog index flags |
40047
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
188 |
|
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
189 |
# 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:
39506
diff
changeset
|
190 |
# 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:
39506
diff
changeset
|
191 |
|
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
192 |
# revision has censor metadata, must be verified |
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
193 |
REVIDX_ISCENSORED = repository.REVISION_FLAG_CENSORED |
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
194 |
# revision hash does not match data (narrowhg) |
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
195 |
REVIDX_ELLIPSIS = repository.REVISION_FLAG_ELLIPSIS |
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
196 |
# revision data is stored externally |
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39506
diff
changeset
|
197 |
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
|
198 |
# 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
|
199 |
REVIDX_HASCOPIESINFO = repository.REVISION_FLAG_HASCOPIESINFO |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
200 |
REVIDX_DEFAULT_FLAGS = 0 |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
201 |
# 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
|
202 |
REVIDX_FLAGS_ORDER = [ |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
203 |
REVIDX_ISCENSORED, |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
204 |
REVIDX_ELLIPSIS, |
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
205 |
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
|
206 |
REVIDX_HASCOPIESINFO, |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
207 |
] |
42730
92ac6b1697a7
flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41202
diff
changeset
|
208 |
|
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
209 |
# bitmark for flags that could cause rawdata content change |
47077
119790e1c67c
cg4: introduce protocol flag to signify the presence of sidedata
Rapha?l Gom?s <rgomes@octobus.net>
parents:
47072
diff
changeset
|
210 |
REVIDX_RAWTEXT_CHANGING_FLAGS = REVIDX_ISCENSORED | REVIDX_EXTSTORED |
39506
b66ea3fc3a86
sparse-revlog: set max delta chain length to on thousand
Boris Feld <boris.feld@octobus.net>
parents:
39330
diff
changeset
|
211 |
|
47249
130c9f7ed914
revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47234
diff
changeset
|
212 |
## 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:
47234
diff
changeset
|
213 |
# 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:
47234
diff
changeset
|
214 |
# for a chunk. |
130c9f7ed914
revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47234
diff
changeset
|
215 |
|
47253
b876f0bf7366
revlog: introduce a plain compression mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47251
diff
changeset
|
216 |
# Chunk use no compression, the data stored on disk can be directly use as |
b876f0bf7366
revlog: introduce a plain compression mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47251
diff
changeset
|
217 |
# chunk value. Without any header information prefixed. |
b876f0bf7366
revlog: introduce a plain compression mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47251
diff
changeset
|
218 |
COMP_MODE_PLAIN = 0 |
b876f0bf7366
revlog: introduce a plain compression mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47251
diff
changeset
|
219 |
|
47255
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
220 |
# Chunk use the "default compression" for the revlog (usually defined in the |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
221 |
# revlog docket). A header is still used. |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
222 |
# |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
223 |
# XXX: keeping a header is probably not useful and we should probably drop it. |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
224 |
# |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
225 |
# XXX: The value of allow mixed type of compression in the revlog is unclear |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
226 |
# and we should consider making PLAIN/DEFAULT the only available mode for |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
227 |
# revlog v2, disallowing INLINE mode. |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
228 |
COMP_MODE_DEFAULT = 1 |
ff9fd7107d11
revlog: implement a "default compression" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47253
diff
changeset
|
229 |
|
47249
130c9f7ed914
revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47234
diff
changeset
|
230 |
# 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:
47234
diff
changeset
|
231 |
# 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:
47234
diff
changeset
|
232 |
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:
47234
diff
changeset
|
233 |
|
47230
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
234 |
SUPPORTED_FLAGS = { |
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
235 |
REVLOGV0: REVLOGV0_FLAGS, |
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
236 |
REVLOGV1: REVLOGV1_FLAGS, |
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
237 |
REVLOGV2: REVLOGV2_FLAGS, |
47266
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
238 |
CHANGELOGV2: CHANGELOGV2_FLAGS, |
47230
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
239 |
} |
0e9105bf54cb
revlog: unify checks for supported flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47077
diff
changeset
|
240 |
|
47231
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
241 |
_no = lambda flags: False |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
242 |
_yes = lambda flags: True |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
243 |
|
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
244 |
|
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
245 |
def _from_flag(flag): |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
246 |
return lambda flags: bool(flags & flag) |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
247 |
|
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
248 |
|
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
249 |
FEATURES_BY_VERSION = { |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
250 |
REVLOGV0: { |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
251 |
b'inline': _no, |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
252 |
b'generaldelta': _no, |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
253 |
b'sidedata': False, |
47234
616b8f412676
revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47231
diff
changeset
|
254 |
b'docket': False, |
47231
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
255 |
}, |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
256 |
REVLOGV1: { |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
257 |
b'inline': _from_flag(FLAG_INLINE_DATA), |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
258 |
b'generaldelta': _from_flag(FLAG_GENERALDELTA), |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
259 |
b'sidedata': False, |
47234
616b8f412676
revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47231
diff
changeset
|
260 |
b'docket': False, |
47231
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
261 |
}, |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
262 |
REVLOGV2: { |
47234
616b8f412676
revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47231
diff
changeset
|
263 |
# 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:
47231
diff
changeset
|
264 |
# 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:
47231
diff
changeset
|
265 |
# means to reduce the number of files for revlogv2. |
47231
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
266 |
b'inline': _no, |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
267 |
b'generaldelta': _yes, |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
268 |
b'sidedata': True, |
47234
616b8f412676
revlogv2: introduce a very basic docket file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47231
diff
changeset
|
269 |
b'docket': True, |
47231
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
270 |
}, |
47266
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
271 |
CHANGELOGV2: { |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
272 |
b'inline': _no, |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
273 |
# General delta is useless for changelog since we don't do any delta |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
274 |
b'generaldelta': _no, |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
275 |
b'sidedata': True, |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
276 |
b'docket': True, |
921648d31553
changelogv2: use a dedicated version number
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47255
diff
changeset
|
277 |
}, |
47231
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
278 |
} |
4d1c893b9095
revlog: unify flag processing when loading index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47230
diff
changeset
|
279 |
|
47249
130c9f7ed914
revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47234
diff
changeset
|
280 |
|
39506
b66ea3fc3a86
sparse-revlog: set max delta chain length to on thousand
Boris Feld <boris.feld@octobus.net>
parents:
39330
diff
changeset
|
281 |
SPARSE_REVLOG_MAX_CHAIN_LENGTH = 1000 |