X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=transport.c;h=15f5ba4e8f22c69959357bc8a7fe073678fe8862;hb=ac140beebe11adbca5801c225e87802d706590c4;hp=471c5bd339c07e83701026968d46b79faa39e2cd;hpb=82fa169d551d71fd21d8a6368040e19d209f79ab;p=thirdparty%2Fgit.git diff --git a/transport.c b/transport.c index 471c5bd339..15f5ba4e8f 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,