Size: 1360
Comment:
|
Size: 1836
Comment: added comments about offset and compressed length
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
RevlogNG was introduced with Mercurial 0.9. | RevlogNG was introduced with Mercurial 0.9 (see also [[Revlog]]). |
Line 24: | Line 24: |
* 6 bytes: offset -- This is how far into the data file we need to go to find the appropriate delta | |
Line 25: | Line 26: |
* 6 bytes: offset (allows for 256TB of compressed history per file) * 4 bytes: compressed length |
* 4 bytes: compressed length -- Once we are offset into the data file, this is how much we read to get the delta |
Line 37: | Line 37: |
As the offset of the first data chunk is always zero, the first offset is used to indicate revlog version number and flags. | As the offset of the first data chunk is always zero, the first 4 bytes (part of the offset) are used to indicate revlog version number and flags. all values are in big endian format. |
Line 39: | Line 39: |
RevlogNG also supports interleaving of index and data. This can greatly reduce storage overhead for smaller revlogs. In this format, the data chunk immediately follows its index entry. The position of the next index entry is calculated by adding the compressed length to the offset. | RevlogNG also supports interleaving of index and data. This can greatly reduce storage overhead for smaller revlogs. In this format, the data chunk immediately follows its index entry. The position of the next index entry is calculated by adding the compressed length to the offset. For how renames are stored see "[[http://selenic.com/pipermail/mercurial/2008-February/017139.html|Problems extracting renames]]", a reply by [[mpm]] posted on Feb 12, 2008, on the [[http://selenic.com/pipermail/mercurial/|mercurial mailing list]]. See also: ParentDeltaPlan |
Line 42: | Line 46: |
CategoryNewFeatures | CategoryInternals |
RevlogNG was introduced with Mercurial 0.9 (see also Revlog).
Deficiencies in original revlog format:
- no uncompressed revision size stored
- SHA1 hash is potentially too weak
- compression context for deltas is often too small
- offset range is limited to 4MB
- some metadata is indicated by escaping in the data
The original index format was:
- 4 bytes: offset
- 4 bytes: compressed length
- 4 bytes: base revision
- 4 bytes: link revision
- 20 bytes: nodeid
- 20 bytes: parent 1 nodeid
- 20 bytes: parent 2 nodeid
72 bytes total
RevlogNG format:
- 6 bytes: offset -- This is how far into the data file we need to go to find the appropriate delta
- 2 bytes: flags
- 4 bytes: compressed length -- Once we are offset into the data file, this is how much we read to get the delta
- 4 bytes: uncompressed length
- 4 bytes: base revision
- 4 bytes: link revision
- 4 bytes: parent 1 revision
- 4 bytes: parent 2 revision
- 32 bytes: nodeid
64 bytes total
RevlogNG header:
As the offset of the first data chunk is always zero, the first 4 bytes (part of the offset) are used to indicate revlog version number and flags. all values are in big endian format.
RevlogNG also supports interleaving of index and data. This can greatly reduce storage overhead for smaller revlogs. In this format, the data chunk immediately follows its index entry. The position of the next index entry is calculated by adding the compressed length to the offset.
For how renames are stored see "Problems extracting renames", a reply by mpm posted on Feb 12, 2008, on the mercurial mailing list.
See also: ParentDeltaPlan