Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

An attempt to black-box reverse-engineer git commit graph format #532

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
51 changes: 51 additions & 0 deletions serialization/git_commit_graph.ksy
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
meta:
id: git_commit_graph
endian: le
license: Unlicense
encoding: utf-8

doc: |
Black-box reverse-engineered Git Commit Graph Blob format.
Black-box reverse-enginneering was a requirement of Junio Hamano, who was unwiling to relicense Git Commit Graph Blob docs under a permissive license and [told](https://lore.kernel.org/git/xmqqeexbrffe.fsf@gitster-ct.c.googlers.com/) that [clean-room/black box reverse engineering](https://lore.kernel.org/git/4B11ADEA-8E8F-444F-B4CA-C4A3E9536F8C@mail.ru/#r) (this was my previous message) is "the necessary effort to comply with the license".
Don't rely on types names, they will likely be changed.

seq:
- id: records
type: record
repeat: eos

types:
record:
seq:
- id: signature
type: str
size: 4
- id: record
type:
switch-on: signature
cases:
'"CGBF"': header # I guess, Git Commit graph Blob Format
'"OIDF"': oidf
'"OIDL"': oidl
'"CDAT"': cdat
#'"EDGE"': edges

header:
seq:
- id: unkn
type: u4
doc: likely flags,
oidf:
seq:
- id: unkn
type: u8
oidl:
seq:
- id: unkn
type: u8
cdat:
seq:
- id: unkn
size: 7
#edges:
# -
Binary file added serialization/git_commit_graph_blob_reversing/1
Binary file not shown.
79 changes: 79 additions & 0 deletions serialization/git_commit_graph_blob_reversing/1.hd
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
00000000 43 47 50 48 01 01 03 00 4f 49 44 46 00 00 00 00 |CGPH....OIDF....|
00000010 00 00 00 38 4f 49 44 4c 00 00 00 00 00 00 04 38 |...8OIDL.......8|
00000020 43 44 41 54 00 00 00 00 00 00 04 4c 00 00 00 00 |CDAT.......L....|
00000030 00 00 00 00 00 00 04 70 |.......p |
00000030 00 00 00 00 00 00 00 00 | ........|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000270 00 00 00 00 00 00 00 00 |........ |
00000270 00 00 00 01 00 00 00 01 | ........|
00000280 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000290 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000002a0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000002b0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000002c0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000002d0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000002e0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000002f0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000300 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000310 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000320 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000330 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000340 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000350 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000360 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000370 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000380 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000390 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000003a0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000003b0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000003c0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000003d0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000003e0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
000003f0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000400 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000410 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000420 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
00000430 00 00 00 01 00 00 00 01 |......... |
00000430 90 8e 62 e0 81 df ce c3 | .b.....|
00000440 b0 41 8e 33 16 dd c2 7a 32 83 65 48 |.A.3...z2.eH |
00000440 3f d9 44 f2 | ?.D.|
00000450 42 2e 08 f7 b8 39 c0 7a 2b 73 f7 a9 06 35 d4 30 |B....9.z+s...5.0|
00000460 70 00 00 00 70 00 00 00 00 00 00 04 61 32 1d 21 |p...p.......a2.!|

00000470 a0 79 d0 bf 25 9d 50 a1 5c 37 9e e5 8a fc a7 30 |.y..%.P.\7.....0|
00000480 78 fd 23 77 |x.#w|
00000484
150 changes: 150 additions & 0 deletions serialization/git_commit_graph_blob_reversing/1_2.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
--- 1.hd
+++ 2.hd
@@ -1,7 +1,7 @@
00000000 43 47 50 48 01 01 03 00 4f 49 44 46 00 00 00 00 |CGPH....OIDF....|
00000010 00 00 00 38 4f 49 44 4c 00 00 00 00 00 00 04 38 |...8OIDL.......8|
-00000020 43 44 41 54 00 00 00 00 00 00 04 4c 00 00 00 00 |CDAT.......L....|
-00000030 00 00 00 00 00 00 04 70 |.......p |
+00000020 43 44 41 54 00 00 00 00 00 00 04 60 00 00 00 00 |CDAT.......`....|
+00000030 00 00 00 00 00 00 04 a8 |........ |
00000030 00 00 00 00 00 00 00 00 | ........|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
@@ -12,67 +12,73 @@
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000000e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-00000270 00 00 00 00 00 00 00 00 |........ |
-00000270 00 00 00 01 00 00 00 01 | ........|
-00000280 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000290 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000002a0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000002b0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000002c0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000002d0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000002e0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000002f0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000300 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000310 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000320 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000330 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000340 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000350 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000360 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000370 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000380 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000390 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000003a0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000003b0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000003c0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000003d0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000003e0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-000003f0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000400 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000410 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000420 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
-00000430 00 00 00 01 00 00 00 01 |......... |
-00000430 90 8e 62 e0 81 df ce c3 | .b.....|
-00000440 b0 41 8e 33 16 dd c2 7a 32 83 65 48 |.A.3...z2.eH |
-00000440 3f d9 44 f2 | ?.D.|
-00000450 42 2e 08 f7 b8 39 c0 7a 2b 73 f7 a9 06 35 d4 30 |B....9.z+s...5.0|
-00000460 70 00 00 00 70 00 00 00 00 00 00 04 61 32 1d 21 |p...p.......a2.!|
-00000470 a0 79 d0 bf 25 9d 50 a1 5c 37 9e e5 8a fc a7 30 |.y..%.P.\7.....0|
-00000480 78 fd 23 77 |x.#w|
-00000484
+000000d0 00 00 00 00 00 00 00 00 |........ |
+000000d0 00 00 00 01 00 00 00 01 | ........|
+000000e0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000000f0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000100 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000110 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000120 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000130 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000140 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000150 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000160 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000170 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000180 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000190 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000001a0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000001b0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000001c0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000001d0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000001e0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+000001f0 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000200 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000210 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000220 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000230 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000240 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000250 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000260 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 |................|
+00000270 00 00 00 01 00 00 00 01 |........ |
+00000270 00 00 00 02 00 00 00 02 | ........|
+00000280 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000290 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000002a0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000002b0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000002c0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000002d0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000002e0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000002f0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000300 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000310 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000320 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000330 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000340 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000350 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000360 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000370 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000380 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000390 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000003a0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000003b0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000003c0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000003d0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000003e0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+000003f0 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000400 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000410 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000420 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 |................|
+00000430 00 00 00 02 00 00 00 02 |........ |
+00000430 28 b4 26 8a b4 bb 38 96 | (.&...8.|
+00000440 de 20 27 84 a7 20 98 e6 59 39 73 e4 |........Y9s. |
+00000440 90 8e 62 e0 | ..b.|
+00000450 81 df ce c3 b0 41 8e 33 16 dd c2 7a 32 83 65 48 |.....A.3...z2.eH|
+
+00000460 89 38 37 c8 25 50 70 d7 76 3e 0d cf fb 5d 09 2d |.87.%Pp.v>...].-|
+00000470 41 41 d1 2f 00 00 00 01 70 00 00 00 00 00 00 08 |AA./....p.......|
+00000480 61 32 1d b9 3f d9 44 f2 42 2e 08 f7 b8 39 c0 7a |a2..?.D.B....9.z|
+00000490 2b 73 f7 a9 06 35 d4 30 70 00 00 00 70 00 00 00 |+s...5.0p...p...|
+000004a0 00 00 00 04 61 32 1d 21 |....a2.! |
+000004a0 e8 96 d5 ac 70 a8 5d 09 | ....p.].|
+000004b0 89 eb 84 56 f9 7b 09 f9 6c be 63 05 |...V.{..l.c.|
+000004bc
Binary file added serialization/git_commit_graph_blob_reversing/2
Binary file not shown.