transport-helper: enforce atomic in push_refs_with_push
authorEmily Shaffer <emilyshaffer@google.com>
Thu, 11 Jul 2019 21:19:19 +0000 (14:19 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 12 Jul 2019 16:24:10 +0000 (09:24 -0700)
commit3bca1e7f9f9708b970035a641d21f8c5cec1cd88
treedfc12425711865fdbf6e599ac696deb3ad289bea
parentb697d92f56511e804b8ba20ccbe7bdc85dc66810
transport-helper: enforce atomic in push_refs_with_push

Teach transport-helper how to notice if skipping a ref during push would
violate atomicity on the client side. We notice that a ref would be
rejected, and choose not to send it, but don't notice that if the client
has asked for --atomic we are violating atomicity if all the other
pushes we are sending would succeed. Asking the server end to uphold
atomicity wouldn't work here as the server doesn't have any idea that we
tried to update a ref that's broken.

The added test-case is a succinct way to reproduce this issue that fails
today. The same steps work fine when we aren't using a transport-helper
to get to the upstream, i.e. when we've added a local repository as a
remote:

  git remote add ~/upstream upstream

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5541-http-push-smart.sh
transport-helper.c
transport.c