git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] pack-format.txt: document sizes at start of delta data

From
MÅMartin Ågren <martin.agren@gmail.com>
Date
Dec 29, 2020, 22:43 UTC
Message-ID
<20201229224335.8989-1-martin.agren@gmail.com>
In-Reply-To
<cover.1608537234.git.martin.agren@gmail.com>

We document the delta data as a set of instructions, but forget to document the two sizes that precede those instructions: the size of the base object and the size of the object to be reconstructed. Fix this omission.

Rather than cramming all the details about the encoding into the running text, introduce a separate section detailing our "size encoding" and refer to it.

Reported-by: Ross Light <ross@zombiezen.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
 v1: https://lore.kernel.org/git/cover.1608537234.git.martin.agren@gmail.com/
 Documentation/technical/pack-format.txt | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/Documentation/technical/pack-format.txt b/Documentation/technical/pack-format.txt
index f96b2e605f..96d2fc589f 100644
--- a/Documentation/technical/pack-format.txt
+++ b/Documentation/technical/pack-format.txt
@@ -55,6 +55,18 @@ Valid object types are:
 
 Type 5 is reserved for future expansion. Type 0 is invalid.
 
+=== Size encoding
+
+This document uses the following "size encoding" of non-negative
+integers: From each byte, the seven least significant bits are
+used to form the resulting integer. As long as the most significant
+bit is 1, this process continues; the byte with MSB 0 provides the
+last seven bits.  The seven-bit chunks are concatenated. Later
+values are more significant.
+
+This size encoding should not be confused with the "offset encoding",
+which is also used in this document.
+
 === Deltified representation
 
 Conceptually there are only four object types: commit, tree, tag and
@@ -73,7 +85,10 @@ Ref-delta can also refer to an object outside the pack (i.e. the
 so-called "thin pack"). When stored on disk however, the pack should
 be self contained to avoid cyclic dependency.
 
-The delta data is a sequence of instructions to reconstruct an object
+The delta data starts with the size of the base object and the
+size of the object to be reconstructed. These sizes are
+encoded using the size encoding from above.  The remainder of
+the delta data is a sequence of instructions to reconstruct the object
 from the base object. If the base object is deltified, it must be
 converted to canonical form first. Each instruction appends more and
 more data to the target object until it's complete. There are two
-- 
2.30.0
Previous: Ross Light
Message 8 of 8 in “Documentation errors for HTTP protocol v2 and packfile”
  1. Ross LightDec 19, 2020
  2. 0/2 pack-format.txt: document lengths at start of delta dataMartin Ågren, Dec 21, 2020
  3. 1/2 pack-format.txt: define "varint" formatMartin Ågren, Dec 21, 2020
  4. Junio C HamanoDec 21, 2020
  5. Martin ÅgrenDec 29, 2020
  6. 2/2 pack-format.txt: document lengths at start of delta dataMartin Ågren, Dec 21, 2020
  7. Ross LightDec 23, 2020
  8. pack-format.txt: document sizes at start of delta dataMartin Ågren, Dec 29, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.