Skip to content

Show server-side progress during Git pushes #112

Closed

Description

@carsonfarmer

After Git finishes uploading a pack, our service waits silently while it imports objects, validates the update and publishes it. A real push of object-log exposed a noticeable pause after the client's Total ... line.

The local workload uploaded 6,282 objects, including 4,198 deltas, in a 2.78 MiB pack. It succeeded: the stored main matched the local branch. The missing feedback makes a working push appear stalled.

The service currently does not advertise receive-pack sideband progress. Upstream go-git provides PreReceiveInfo.Progress, but that hook runs after pack import, so merely adding a message there does not cover the whole pause.

Investigate the smallest way to provide standard Git progress during the expensive server phases, using existing go-git APIs where possible. Keep object-log itself independent of Git and Spin.

Acceptance:

  • An ordinary Git client receives useful progress before a slow push finishes, including during import if the existing APIs allow it.
  • Success is reported only after durable publication; failed and uncertain operations retain their current semantics.
  • Quiet clients and clients without progress negotiation still work.
  • Exercise the real object-log history against disposable local Spin/MinIO, alongside focused protocol/error tests. Keep added runtime code small.

Reproduce with the viewer's documented local launcher, then push this repository's main to a fresh carsonfarmer/object-log.git name. Coordinate measurements with the storage-amplification investigation so concurrent runs do not distort results.

Activity

  1. carsonfarmer commented on Sep 28, 2026

    @carsonfarmer
    OwnerAuthor

    Implemented in #115. The actual object-log history (6,282 objects) now receives negotiated server progress during pack import, then validation/publication messages before final status. Quiet/no-progress pushes and malformed-pack rejection framing passed through stock Spin/MinIO. Independent review caught continued work after a failed progress write; the request now cancels, with a regression proving zero subsequent object writes. Full make git-check passes. Signed commit; no merge yet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions