Hi there, I noticed while debugging an issue in Phabricator where shallow git fetches over HTTP were failing with 500 errors that `git-http-backend` seemed to exit abnormally after the first request even though the response was otherwise correct—and when the error is not surfaced to the client, the packfile negotiation via `git-remote-curl` seems to continue normally.[1] I think this patch fixes the issue by having `upload-pack` gently handle EOFs at a specific point in negotiation—after shallow/unshallow lines have been returned to the client (followed by flush) but before the client sends its haves. This is my first contribution here so hopefully I'm understanding the packfile negotiation protocol correctly and included my test in the right place. Kindly, Daniel [1] https://discourse.phabricator-community.org/t/git-fetches-with-depth-over-http-results-in-500-errors/4317