fix(protocol): preserve negotiation state in v2, handle submodule gitlinks, and support atomic tags #53

merged colechristensen cole.christensen@gmail.com wants to merge fix/git-protocol-negotiation-and-submodules into main

Summary of Changes

  1. Protocol v2 Multi-Round Negotiation State:
    • Persisted wants, haves, filter_spec, and shallow_opts in UploadPackV2.state across negotiation rounds.
    • Fixed bug where round 2+ requests omitting the want list resulted in 0 objects being packed.
  2. Submodule Gitlink Mode 160000 Reachability:
    • Added mode: "160000" handling in UploadPack (v1) tree walker to prevent submodule commit pointers from being treated as missing loose objects during reachability walks.
  3. Smart HTTP & Atomic Tag Interoperability:
    • Added tests and verified push with --atomic, annotated tags (refs/tags/v1.0.0^{} peeling), and branch deletions with standard git binary.
  4. diff3 Merge Correctness:
    • Handled single-sided and non-overlapping diff hunk additions without empty line artifacts.
Created Aug 31, 2026 at 00:12 UTC | Merged Aug 31, 2026 at 01:00 UTC by colechristensen cole.christensen@gmail.com