gitproto: don't let NoErrAlreadyUpToDate mask cancellation

Commit

Stefan Haubold5h ago

FetchToStore joined ctx.Err() with the fetch error whenever the context was canceled. When the fetch had no wants, that error was git.NoErrAlreadyUpToDate, and errors.Is matches the sentinel through the join, so every caller (sync, fetch-only, materialized tag refill, sha256convert) treated the canceled run as up to date. The fetch-only path then reported success.

The sentinel is returned before any I/O, so it is never a side effect of cancellation; return the cancellation alone in that case. Fixing it here covers all callers at once.

Fixes #141

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com Entire-Checkpoint: 01M6PJ8GHA0FMQZK8FXWB8CG84