ref:4f88147009b5e45761ea1986c9070211f2460044

Phase 3: Pack format read support

- Pack index (.idx v2) parser: fanout, SHA list, CRC, 4/8-byte offsets - Packfile reader: parse objects by offset with delta resolution - Delta decompression: OFS_DELTA and REF_DELTA instruction application - ObjectResolver: check loose objects first, fall back to pack search - Integration test: git gc'd repo read through library - 95 tests passing Refs: notifd/anvil#62 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SHA: 4f88147009b5e45761ea1986c9070211f2460044
Author: Cole Christensen <cole.christensen@macmillan.com>
Date: 2026-02-10 07:41
Parents: 988139c
9 files changed +1128 -2
Type
lib/ex_git_objectstore.ex +2 −2
@@ -6,7 +6,7 @@
All git data (objects, refs, packs) is stored via a pluggable storage backend.
"""
alias ExGitObjectstore.{Object, Repo, Ref}
alias ExGitObjectstore.{Object, ObjectResolver, Repo, Ref}
@type sha :: String.t()
@type ref_name :: String.t()
@@ -35,7 +35,7 @@
"""
@spec cat_object(Repo.t(), sha()) :: {:ok, Object.t()} | {:error, term()}
def cat_object(%Repo{} = repo, sha) do
Object.read(repo, sha)
ObjectResolver.read(repo, sha)
end
@doc """