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

[PATCH 02/15] pack-objects: a bit of document about struct object_entry

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Apr 14, 2018, 15:35 UTC
Message-ID
<20180414153513.9902-3-pclouds@gmail.com>
In-Reply-To
<20180414153513.9902-1-pclouds@gmail.com>

The role of this comment block becomes more important after we shuffle fields around to shrink this struct. It will be much harder to see what field is related to what.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 pack-objects.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
diff --git a/pack-objects.h b/pack-objects.h
index 03f1191659..c0a1f61aac 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -1,6 +1,51 @@
 #ifndef PACK_OBJECTS_H
 #define PACK_OBJECTS_H
 
+/*
+ * basic object info
+ * -----------------
+ * idx.oid is filled up before delta searching starts. idx.crc32 is
+ * only valid after the object is written out and will be used for
+ * generating the index. idx.offset will be both gradually set and
+ * used in writing phase (base objects get offset first, then deltas
+ * refer to them)
+ *
+ * "size" is the uncompressed object size. Compressed size of the raw
+ * data for an object in a pack is not stored anywhere but is computed
+ * and made available when reverse .idx is made.
+ *
+ * "hash" contains a path name hash which is used for sorting the
+ * delta list and also during delta searching. Once prepare_pack()
+ * returns it's no longer needed.
+ *
+ * source pack info
+ * ----------------
+ * The (in_pack, in_pack_offset) tuple contains the location of the
+ * object in the source pack. in_pack_header_size allows quickly
+ * skipping the header and going straight to the zlib stream.
+ *
+ * "type" and "in_pack_type" both describe object type. in_pack_type
+ * may contain a delta type, while type is always the canonical type.
+ *
+ * deltas
+ * ------
+ * Delta links (delta, delta_child and delta_sibling) are created to
+ * reflect that delta graph from the source pack then updated or added
+ * during delta searching phase when we find better deltas.
+ *
+ * delta_child and delta_sibling are last needed in
+ * compute_write_order(). "delta" and "delta_size" must remain valid
+ * at object writing phase in case the delta is not cached.
+ *
+ * If a delta is cached in memory and is compressed, delta_data points
+ * to the data and z_delta_size contains the compressed size. If it's
+ * uncompressed [1], z_delta_size must be zero. delta_size is always
+ * the uncompressed size and must be valid even if the delta is not
+ * cached.
+ *
+ * [1] during try_delta phase we don't bother with compressing because
+ * the delta could be quickly replaced with a better one.
+ */
 struct object_entry {
 	struct pack_idx_entry idx;
 	unsigned long size;	/* uncompressed size */
-- 
2.17.0.367.g5dd2e386c3
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 2 of 17 in “nd/pack-objects-pack-struct update”
  1. 00/15 nd/pack-objects-pack-struct updateNguyễn Thái Ngọc Duy, Apr 14, 2018
  2. 02/15 pack-objects: a bit of document about struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  3. 01/15 read-cache.c: make $GIT_TEST_SPLIT_INDEX booleanNguyễn Thái Ngọc Duy, Apr 14, 2018
  4. Ævar Arnfjörð BjarmasonApr 14, 2018
  5. 04/15 pack-objects: use bitfield for object_entry::dfs_stateNguyễn Thái Ngọc Duy, Apr 14, 2018
  6. 05/15 pack-objects: use bitfield for object_entry::depthNguyễn Thái Ngọc Duy, Apr 14, 2018
  7. 07/15 pack-objects: move in_pack out of struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  8. 08/15 pack-objects: refer to delta objects by index instead of pointerNguyễn Thái Ngọc Duy, Apr 14, 2018
  9. 09/15 pack-objects: shrink z_delta_size field in struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  10. 15/15 ci: exercise the whole test suite with uncommon code in pack-objectsNguyễn Thái Ngọc Duy, Apr 14, 2018
  11. 14/15 pack-objects: reorder members to shrink struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  12. 13/15 pack-objects: shrink delta_size field in struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  13. 10/15 pack-objects: don't check size when the object is badNguyễn Thái Ngọc Duy, Apr 14, 2018
  14. 11/15 pack-objects: clarify the use of object_entry::sizeNguyễn Thái Ngọc Duy, Apr 14, 2018
  15. 06/15 pack-objects: move in_pack_pos out of struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  16. 12/15 pack-objects: shrink size field in struct object_entryNguyễn Thái Ngọc Duy, Apr 14, 2018
  17. 03/15 pack-objects: turn type and in_pack_type to bitfieldsNguyễn Thái Ngọc Duy, Apr 14, 2018

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.