Fail push if a ref update is rejected #195
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.
libgit2's Push method will succeed even when ref updates are rejected, meaning it can silently fail if you e.g., use branch protection in GitHub.
To make these errors visible, a callback is supplied to Push, which checks for a non-empty status (on the advice of https://libgit2.org/libgit2/#HEAD/group/callback/git_push_update_reference_cb).
For whatever reason, gogit seems overly sensitive to hook errors (in a way that
git
and libgit2 aren't), and reports "invalid pkg-len found" when it sees a rejected ref message. This doesn't affect the runtime code, since that uses libgit2 -- but it does affect the test code, which initialises the git repo used in many tests, so more care is needed to push only the main branch, so as not to trigger a rejection.Fixes #194.