summaryrefslogtreecommitdiff
path: root/transport.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2020-04-28 22:50:04 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-04-28 22:50:04 (GMT)
commit5b6864ca445e606bdd6dae607d3ee5f410da66fa (patch)
tree678130275ab282b480468163def1419fa42eb76b /transport.c
parent8f5dc5a4af3fa32bf9261b76b0f1146fd15b8643 (diff)
parentdfe1b7f19c04fd10e9bafce91bc1da0c18bbb194 (diff)
downloadgit-5b6864ca445e606bdd6dae607d3ee5f410da66fa.zip
git-5b6864ca445e606bdd6dae607d3ee5f410da66fa.tar.gz
git-5b6864ca445e606bdd6dae607d3ee5f410da66fa.tar.bz2
Merge branch 'jx/atomic-push'
"git push --atomic" used to show failures for refs that weren't even pushed, which has been corrected. * jx/atomic-push: transport-helper: new method reject_atomic_push() transport-helper: mark failure for atomic push send-pack: mark failure of atomic push properly t5543: never report what we do not push send-pack: fix inconsistent porcelain output
Diffstat (limited to 'transport.c')
-rw-r--r--transport.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/transport.c b/transport.c
index 471c5bd..15f5ba4 100644
--- a/transport.c
+++ b/transport.c
@@ -715,7 +715,15 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
close(data->fd[1]);
close(data->fd[0]);
- ret |= finish_connect(data->conn);
+ /*
+ * Atomic push may abort the connection early and close the pipe,
+ * which may cause an error for `finish_connect()`. Ignore this error
+ * for atomic git-push.
+ */
+ if (ret || args.atomic)
+ finish_connect(data->conn);
+ else
+ ret = finish_connect(data->conn);
data->conn = NULL;
data->got_remote_heads = 0;
@@ -1240,20 +1248,6 @@ int transport_push(struct repository *r,
err = push_had_errors(remote_refs);
ret = push_ret | err;
- if ((flags & TRANSPORT_PUSH_ATOMIC) && err) {
- struct ref *it;
- for (it = remote_refs; it; it = it->next)
- switch (it->status) {
- case REF_STATUS_NONE:
- case REF_STATUS_UPTODATE:
- case REF_STATUS_OK:
- it->status = REF_STATUS_ATOMIC_PUSH_FAILED;
- break;
- default:
- break;
- }
- }
-
if (!quiet || err)
transport_print_push_status(transport->url, remote_refs,
verbose | porcelain, porcelain,