Conversation
Background status fetch kills git after five seconds, so a macOS keychain prompt from git-credential-osxkeychain never receives Always Allow and the refresh retries forever. After three consecutive timeouts, stop polling that remote. A successful explicit pull, completed push, or fetch clears the stop. Idle refresh-generation entries share the same 2,048-entry bound as failure state. An in-flight fetch keeps the generation it captured, and a missing record cannot match a stale attempt. Fixes pingdotgg#13912
Owner
Author
|
Opened upstream. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
Background Git status refresh stops polling a remote after three consecutive fetch timeouts. A successful explicit pull, a completed push, or an explicit fetch (
fetchRemote,fetchRemoteBranch,fetchRemoteTrackingBranch) clears that stop and lets the background poll run again. Fast non-timeout failures still use the existing backoff and do not stop the remote.Refresh bookkeeping is one bounded ledger. Idle entries, including generations remembered after a successful explicit fetch, pull, or push, are evicted at 2,048. An in-flight fetch keeps the generation it captured, so a timeout that finishes after recovery cannot write a new failure streak. A missing record does not match a stale attempt.
The change stays in the Git driver. There is no contract field, client state, or web/mobile recovery UI. Recovery is the existing pull, push, and fetch commands.
Why
Status refresh runs
git fetchwith a 5 second timeout and prompts disabled.credential.helper=osxkeychaincan still raise a macOS Keychain dialog, the timeout kills git before Always Allow is stored, and the failure used to retry forever (30 seconds, doubling, capped at 15 minutes). Clearingcredential.helperwould also drop silent keychain andgh auth git-credentialsuccess, so the helper stays intact and only repeated timeouts stop the background spawn. An explicit pull still uses the normal interactive timeout, so the dialog can be approved.UI Changes
No UI changes.
Checklist
Fixes pingdotgg#13912
Grok 4.7, Cursor cloud agent.