Push negotiation callback #1396
Merged
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.
This PR does two things:
git_remote_callbacks.push_negotiationto Python code (viaRemoteCallbacks).connectargument toRemote.ls_remotes(). This lets you tellls_remoteto skip its default connection step, which is harmful if callingls_remotesfromRemoteCallbacks.push_negotiation.Some background info:
My use case is to implement an equivalent of
git push --force-with-lease. To achieve this, I needpush_negotiationwhich is called right before the transfer actually begins.My negotiation callback uses
Remote.ls_remotesto determine whether the repo has stale information about the remote branch to force-push to, in which case the push should be rejected.However,
Remote.ls_remotescurrently forces a new connection to the remote. This invalidates the existing connection that was set up by the push - causing the push fail. So, this PR also lets you tellls_remotesto not override the current connection (by passingconnect=False).