- packfile.go: ReadObject now uses a countingReader to track compressed
bytes consumed and properly advances r.offset, fixing sequential
multi-object reads.
- handlers.go: Use commitSHA from GenerateCommit directly instead of
re-reading refs, which fixes both the HTTP error-after-body-written
issue and ensures HEAD is always advertised first (Git protocol
requirement).
- commit.go: GenerateCommit now holds the repo lock for the entire
read-modify-write cycle, preventing concurrent generates from reading
the same parent and losing ref updates.
- repo.go: Added Lock/Unlock/GetRefsLocked methods to support holding
the mutex across multiple repo operations.
https://claude.ai/code/session_015F9BYQoCy2P2zYZBuVeXHH
This server generates a new commit every time someone pulls from it.
Features:
- Pure Go implementation of Git object format and protocols
- No dependency on git CLI commands
- Thread-safe commit generation
- Read-only Git HTTP smart protocol support
- Comprehensive test suite
Each pull creates a new commit with a unique file containing a timestamp
and counter, making the repository grow infinitely with each pull operation.
Co-Authored-By: Claude <noreply@anthropic.com>